首页 文章

用CUDA编译错误改变推力后端系统5

提问于
浏览
0

我最近安装了CUDA 5,发现基于Thrust的现有代码无法编译 . 如果我切换到OMP或TBB,则只会发生错误 .

所以我使用Thrust示例中的monte_carlo.cpp进行了实验 .

当我使用CUDA 5.0的include路径时,我收到此错误:

g -O2 -o monte_carlo monte_carlo.cpp -DTHRUST_DEVICE_SYSTEM = THRUST_DEVICE_SYSTEM_OMP -fopenmp -I /usr/local/cuda-5.0/include/ /tmp/ccFsJtAs.o:in function main':monte_carlo.cpp :( . text 0xa0) :undefined reference tofloat thrust :: detail :: backend :: cuda :: reduce_n,float,thrust :: use_default>,long,float,thrust :: plus(thrust :: transform_iterator,float,thrust :: use_default>,long, float,thrust :: plus)'

但是,如果我改用CUDA 4.1

g -O2 -o monte_carlo monte_carlo.cpp -DTHRUST_DEVICE_SYSTEM = THRUST_DEVICE_SYSTEM_OMP -fopenmp -I /usr/local/cuda-4.1/include/

没有错误 .

我的平台是Ubuntu 10.04和g 4.4.3 .

希望有人能帮助我,谢谢!

Edit OMP问题通过改变@Robrt指出的 -fopenmp 的顺序来解决,但是我无法使用TBB进行编译

g -O2 -o monte_carlo monte_carlo.cpp -DTHRUST_DEVICE_SYSTEM = THRUST_DEVICE_SYSTEM_TBB -ltbb -I / usr / local / cuda / include / /tmp/ccxSmcnJ.o:在函数main'中:monte_carlo.cpp :( . text 0xa0):undefined参考tofloat thrust :: detail :: backend :: cuda :: reduce_n,float,thrust :: use_default>,long,float,thrust :: plus>(thrust :: transform_iterator,float,thrust :: use_default>,long,float ,thrust :: plus)'collect2:ld返回1退出状态

但是如果我使用汇编成功的话

g -O2 -o monte_carlo monte_carlo.cpp -DTHRUST_DEVICE_SYSTEM = THRUST_DEVICE_SYSTEM_TBB -ltbb -I /usr/local/cuda-4.1/include/

1 回答

  • 1

    OpenMP编译似乎是由错误指定的编译参数引起的 . 使用编译

    g++ -O2 -o monte_carlo monte_carlo.cpp -fopenmp -DTHRUST_DEVICE_BACKEND=THRUST_DEVICE_BACKEND_OMP -lgomp -I\usr\local\cuda\include
    

    (即在任何预处理器指令之前指定OpenMP代码生成)允许使用支持的推力OpenMP进行正确编译 .

    报告的TBB后端编译错误似乎是由于试图在没有TBB支持的推力1.5.3上使用TBB后端引起的 .

    [这个答案已经从问题编辑和评论中汇总,以便从CUDA标签的未答复列表中获取问题]

相关问题