Opened 5 years ago

Last modified 5 years ago

#13049 new Bugs

nvcc CT Error: Boost 1.64.0 & CUDA 8.0

Reported by: r.widera@… Owned by: karsten
Milestone: To Be Determined Component: odeint
Version: Boost 1.64.0 Severity: Showstopper
Keywords: cuda nvcc odeint config cudafe noexcept C++11 Cc:

Description

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

Change History (2)

comment:1 by psychocoderHPC <r.widera@…>, 5 years ago

Note: See TracTickets for help on using tickets.