Merge branch 'develop'

This commit is contained in:
jzmaddock
2016-02-15 19:08:25 +00:00
8 changed files with 70 additions and 17 deletions

View File

@@ -57,16 +57,25 @@
#define BOOST_HAS_LONG_LONG #define BOOST_HAS_LONG_LONG
// //
// We disable this if the compiler is really nvcc as it // We disable this if the compiler is really nvcc with C++03 as it
// doesn't actually support __int128 as of CUDA_VERSION=5000 // doesn't actually support __int128 as of CUDA_VERSION=7500
// even though it defines __SIZEOF_INT128__. // even though it defines __SIZEOF_INT128__.
// See https://svn.boost.org/trac/boost/ticket/10418 // See https://svn.boost.org/trac/boost/ticket/10418
// https://svn.boost.org/trac/boost/ticket/11852
// Only re-enable this for nvcc if you're absolutely sure // Only re-enable this for nvcc if you're absolutely sure
// of the circumstances under which it's supported. // of the circumstances under which it's supported.
// Similarly __SIZEOF_INT128__ is defined when targetting msvc // Similarly __SIZEOF_INT128__ is defined when targetting msvc
// compatibility even though the required support functions are absent. // compatibility even though the required support functions are absent.
// //
#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__) && !defined(_MSC_VER) #if defined(__CUDACC__)
# if defined(BOOST_GCC_CXX11)
# define BOOST_NVCC_CXX11
# else
# define BOOST_NVCC_CXX03
# endif
#endif
#if defined(__SIZEOF_INT128__) && !defined(BOOST_NVCC_CXX03) && !defined(_MSC_VER)
# define BOOST_HAS_INT128 # define BOOST_HAS_INT128
#endif #endif

View File

@@ -133,14 +133,23 @@
// //
// Recent GCC versions have __int128 when in 64-bit mode. // Recent GCC versions have __int128 when in 64-bit mode.
// //
// We disable this if the compiler is really nvcc as it // We disable this if the compiler is really nvcc with C++03 as it
// doesn't actually support __int128 as of CUDA_VERSION=5000 // doesn't actually support __int128 as of CUDA_VERSION=7500
// even though it defines __SIZEOF_INT128__. // even though it defines __SIZEOF_INT128__.
// See https://svn.boost.org/trac/boost/ticket/8048 // See https://svn.boost.org/trac/boost/ticket/8048
// https://svn.boost.org/trac/boost/ticket/11852
// Only re-enable this for nvcc if you're absolutely sure // Only re-enable this for nvcc if you're absolutely sure
// of the circumstances under which it's supported: // of the circumstances under which it's supported:
// //
#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__) #if defined(__CUDACC__)
# if defined(BOOST_GCC_CXX11)
# define BOOST_NVCC_CXX11
# else
# define BOOST_NVCC_CXX03
# endif
#endif
#if defined(__SIZEOF_INT128__) && !defined(BOOST_NVCC_CXX03)
# define BOOST_HAS_INT128 # define BOOST_HAS_INT128
#endif #endif
// //
@@ -148,12 +157,16 @@
// include a std lib header to detect this - not ideal, but we'll // include a std lib header to detect this - not ideal, but we'll
// be including <cstddef> later anyway when we select the std lib. // be including <cstddef> later anyway when we select the std lib.
// //
// Nevertheless, as of CUDA 7.5, using __float128 with the host
// compiler in pre-C++11 mode is still not supported.
// See https://svn.boost.org/trac/boost/ticket/11852
//
#ifdef __cplusplus #ifdef __cplusplus
#include <cstddef> #include <cstddef>
#else #else
#include <stddef.h> #include <stddef.h>
#endif #endif
#if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) #if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) && !defined(BOOST_NVCC_CXX03)
# define BOOST_HAS_FLOAT128 # define BOOST_HAS_FLOAT128
#endif #endif

View File

@@ -514,7 +514,15 @@ template<> struct assert_intrinsic_wchar_t<unsigned short> {};
# define BOOST_HAS_STDINT_H # define BOOST_HAS_STDINT_H
#endif #endif
#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(__CUDACC__) #if defined(__CUDACC__)
# if defined(BOOST_GCC_CXX11)
# define BOOST_NVCC_CXX11
# else
# define BOOST_NVCC_CXX03
# endif
#endif
#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(BOOST_NVCC_CXX03)
# define BOOST_HAS_INT128 # define BOOST_HAS_INT128
#endif #endif

View File

@@ -14,3 +14,11 @@
// NVIDIA Specific support // NVIDIA Specific support
// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device // BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device
#define BOOST_GPU_ENABLED __host__ __device__ #define BOOST_GPU_ENABLED __host__ __device__
// A bug in version 7.0 of CUDA prevents use of variadic templates in some occasions
// https://svn.boost.org/trac/boost/ticket/11897
// This is fixed in 7.5. As the following version macro was introduced in 7.5 an existance
// check is enough to detect versions < 7.5
#if !defined(__CUDACC_VER__) || (__CUDACC_VER__ < 70500)
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif

View File

@@ -53,19 +53,27 @@
# define BOOST_NO_CXX11_HDR_FUNCTIONAL # define BOOST_NO_CXX11_HDR_FUNCTIONAL
# define BOOST_NO_CXX11_STD_ALIGN # define BOOST_NO_CXX11_STD_ALIGN
# define BOOST_NO_CXX11_ADDRESSOF # define BOOST_NO_CXX11_ADDRESSOF
#endif # define BOOST_NO_CXX11_HDR_ATOMIC
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_HDR_CHRONO
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
# define BOOST_NO_CXX11_HDR_FUTURE
#elif _LIBCPP_VERSION < 3700
// //
// These appear to be unusable/incomplete so far: // These appear to be unusable/incomplete so far:
// //
# define BOOST_NO_CXX11_HDR_CHRONO
# define BOOST_NO_CXX11_HDR_FUTURE
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_HDR_ATOMIC # define BOOST_NO_CXX11_HDR_ATOMIC
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_HDR_CHRONO
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
# define BOOST_NO_CXX11_HDR_FUTURE
#endif
#if _LIBCPP_VERSION < 3700
// libc++ uses a non-standard messages_base // libc++ uses a non-standard messages_base
#define BOOST_NO_STD_MESSAGES #define BOOST_NO_STD_MESSAGES
#endif
#if defined(__has_include) #if defined(__has_include)
#if !__has_include(<shared_mutex>) #if !__has_include(<shared_mutex>)

View File

@@ -19,7 +19,7 @@
// BOOST_VERSION / 100 % 1000 is the minor version // BOOST_VERSION / 100 % 1000 is the minor version
// BOOST_VERSION / 100000 is the major version // BOOST_VERSION / 100000 is the major version
#define BOOST_VERSION 106000 #define BOOST_VERSION 106100
// //
// BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
@@ -27,6 +27,6 @@
// number, y is the minor version number, and z is the patch level if not 0. // number, y is the minor version number, and z is the patch level if not 0.
// This is used by <config/auto_link.hpp> to select which library version to link to. // This is used by <config/auto_link.hpp> to select which library version to link to.
#define BOOST_LIB_VERSION "1_60" #define BOOST_LIB_VERSION "1_61"
#endif #endif

View File

@@ -29,7 +29,7 @@ int test()
std::atomic<int> a1; std::atomic<int> a1;
std::atomic<unsigned> a2; std::atomic<unsigned> a2;
std::atomic<void*> a3; std::atomic<int*> a3;
a1.is_lock_free(); a1.is_lock_free();
a1.store(1); a1.store(1);
a1.load(); a1.load();

View File

@@ -330,6 +330,13 @@ void print_compiler_macros()
PRINT_MACRO(_NTO_VERSION); PRINT_MACRO(_NTO_VERSION);
PRINT_MACRO(__OPEN64__); PRINT_MACRO(__OPEN64__);
PRINT_MACRO(__open64); PRINT_MACRO(__open64);
PRINT_MACRO(__NVCC__);
PRINT_MACRO(__CUDACC__);
PRINT_MACRO(__CUDACC_RDC__);
PRINT_MACRO(__CUDACC_VER_MAJOR__);
PRINT_MACRO(__CUDACC_VER_MINOR__);
PRINT_MACRO(__CUDACC_VER_BUILD__);
PRINT_MACRO(__CUDACC_VER__);
} }
void print_stdlib_macros() void print_stdlib_macros()