使用CUDA 5更改推力后端系统时出错

使用CUDA 5更改推力后端系统时出错,cuda,thrust,Cuda,Thrust,我最近安装了CUDA5,发现基于推力的现有代码无法编译。只有在切换到OMP或TBB时才会发生错误 所以我用推力例子中的monte_carlo.cpp做了一个实验 当我使用CUDA 5.0的include path时,我得到了以下错误: g++-O2-o蒙特卡罗蒙特卡罗蒙特卡罗.cpp -D推力装置系统=推力装置系统OMP-fopenmp-I/usr/local/cuda-5.0/include/ /tmp/ccFsJtAs.o:在函数main:monte_carlo.cpp:(.text+0xa

我最近安装了CUDA5,发现基于推力的现有代码无法编译。只有在切换到OMP或TBB时才会发生错误

所以我用推力例子中的monte_carlo.cpp做了一个实验

当我使用CUDA 5.0的include path时,我得到了以下错误:

g++-O2-o蒙特卡罗蒙特卡罗蒙特卡罗.cpp -D推力装置系统=推力装置系统OMP-fopenmp-I/usr/local/cuda-5.0/include/

/tmp/ccFsJtAs.o:在函数
main:monte_carlo.cpp:(.text+0xa0):
未定义对浮动的引用
float 推力::细节::后端::cuda::减少,浮动, 推力::使用默认值>,长,浮动,推力::加号

(推力::变换迭代器,浮点, 推力::使用_default>,long,float,推力::plus)'

但是如果我使用

g++-O2-o蒙特卡罗蒙特卡罗蒙特卡罗.cpp -D推力装置系统=推力装置系统OMP-fopenmp-I/usr/local/cuda-4.1/包括/

没有错误

我的平台是Ubuntu 10.04和g++4.4.3

希望有人能帮助我,谢谢

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

g++-O2-o monte_carlo monte_carlo.cpp-DTHRUST_DEVICE_SYSTEM=推力_DEVICE_SYSTEM_TBB-ltbb-I/usr/local/cuda/include/ /tmp/ccxSmcnJ.o:在函数
main'中:
monte_carlo.cpp:(.text+0xa0):未定义对
浮点推力::细节::后端::cuda::减少\n,浮点,推力::使用默认值>,长,浮点,推力::加号>(推力::转换迭代器,浮点,推力::使用默认值>,长,浮点,推力::加号) collect2:ld返回了1个退出状态

但是如果我使用

g++-O2-o monte_carlo monte_carlo.cpp-DTHRUST_DEVICE_SYSTEM=推力_DEVICE_SYSTEM_TBB-ltbb-I/usr/local/cuda-4.1/include/


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标记的未回答列表中删除]

在CUDA 4.1中,您的编译命令对我来说失败,但是,如果我使用以下命令匹配指令:
g++-O2-o monte\u carlo monte\u carlo.cpp-fopenmp-DTHRUST\u DEVICE\u BACKEND=THRUST\u DEVICE\u BACKEND\u OMP-lgomp-I\usr\local\cuda\include
。在我的例子中,编译器开关的顺序很重要。在CUDA 5.0中,我观察到了相同的行为。是否有某些原因导致编译器开关的顺序与指令中给出的顺序不完全匹配?(您也不包括
-lgomp
?)@RobertCrovella我添加了-lgomp,但得到了相同的错误开关顺序很重要(例如
-fopenmp
)。对我有效的订单与你发布的不同。您发布的内容也与说明不匹配。请尝试如下命令:
g++-O2-o monte\u carlo monte\u carlo.cpp-fopenmp-DTHRUST\u DEVICE\u BACKEND=THRUST\u DEVICE\u BACKEND\u OMP-lgomp-I/usr/local/cuda-5.0/include
谢谢@RobertCrovella OMP now已编译,但我尝试了,但失败了。我使用了g++-O2-o蒙特卡罗蒙特卡罗.cpp-DTHRUST\u DEVICE\u SYSTEM=推力\u DEVICE\u SYSTEM\u TBB-ltbb-I/usr/local/cuda/include/