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

时间:2012-11-22 17:02:47

标签: cuda thrust

我最近安装了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:在函数main': monte_carlo.cpp:(.text+0xa0): undefined reference to float中   thrust :: detail :: backend :: cuda :: reduce_n,float,   thrust :: use_default&gt ;, 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。

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

修改 OMP问题通过改变@ -fopenmp的顺序来解决,因为@Robert指出,但我无法使用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 reference to float thrust :: detail :: backend :: cuda :: reduce_n,float,thrust :: use_default>,long,float,thrust :: plus>(推力: :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 个答案:

答案 0 :(得分: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标签的未答复列表中删除]