[Boost-bugs] [Boost C++ Libraries] #13049: nvcc CT Error: Boost 1.64.0 & CUDA 8.0

Subject: [Boost-bugs] [Boost C++ Libraries] #13049: nvcc CT Error: Boost 1.64.0 & CUDA 8.0
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2017-05-30 11:58:21


#13049: nvcc CT Error: Boost 1.64.0 & CUDA 8.0
-------------------------------------------------+-------------------------
 Reporter: r.widera@… | Owner: karsten
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: odeint
  Version: Boost 1.64.0 | Severity: Showstopper
 Keywords: cuda nvcc odeint config cudafe |
  noexcept C++11 |
-------------------------------------------------+-------------------------
 Compiling a host program which uses boost odeint integrate with nvcc from
 CUDA8.0 is not possible.
 The issue has been reported to Nvidia and will be fixed in CUDA 9.

 == Error ==
 nvcc is crashing with an internal cudafe error
 {{{
 /boost/numeric/odeint/stepper/controlled_runge_kutta.hpp(66): internal
 error: assertion failed at:
 "/dvs/p4/build/sw/rel/gpu_drv/r361/r361_00/drivers/compiler/edg/EDG_4.10/src/types.c",
 line 7537

 1 catastrophic error detected in the compilation of
 "/tmp/tmpxft_0000369f_00000000-9_main.cpp1.ii".
 }}}

 == Example ==

 {{{
 #include <boost/array.hpp>
 // this include is needed to compile with cuda 7.5
 // boost bug: https://svn.boost.org/trac/boost/ticket/12516
 // see fix
 https://github.com/boostorg/serialization/commit/1d86261581230e2dc5d617a9b16287d326f3e229
 #include <boost/serialization/array_wrapper.hpp>
 #include <boost/numeric/odeint/integrate/integrate.hpp>
 #include <iostream>
 typedef double float_64;
 namespace foo{

     struct Probability
     {
         Probability() {}

         template<typename T_State>
         void operator()(const T_State &, T_State &dpdtheta, const float_64
 theta) const
         {
             const float_64 theta2 = theta*theta;
             dpdtheta[0] = theta2;
         }
     };
 }

 int main()
 {

     namespace odeint = boost::numeric::odeint;

     typedef boost::array<float_64, 1> state_type;

     state_type integral_result = {0.0};
     const float_64 lowerLimit = 0.0;
     const float_64 upperLimit = 0.1;
     const float_64 stepwidth = (2000 - 10) / float_64(1000.0);
     foo::Probability integrand;
     odeint::integrate(integrand, integral_result, lowerLimit, upperLimit,
 stepwidth);

     std::cout<<integral_result[0]<<std::endl;
     return 0;
 }
 }}}

 === Compile ===

 {{{
 nvcc -std=c++11 main.cu -I$BOOST_ROOT/boost_1_64_0/include
 -L$BOOST_ROOT/boost_1_64_0/lib
 }}}

 I will provide a pull request in the next hours adding
 `-DBOOST_NO_CXX11_NOEXCEPT` to boost/config for nvcc CUDA 8.0

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/13049>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-05-30 12:02:20 UTC