我最近安装了CUDA 5,发现现有的基于推力的代码无法编译。只有当我切换到OMP或TBB时,才会发生错误。
所以我用推力例子中的monte_carlo.cpp做了一个实验。
当我使用CUDA 5.0的include path时,我得到了以下错误:
-DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_OMP g++ -O2 -o monte_carlo monte_carlo.cpp -fopenmp -I /usr/local/cuda-5.0/include/ /tmp/ccFsJtAs.o:函数
main': monte_carlo.cpp:(.text+0xa0): undefined reference tofloat thrust::detail::backend::cuda::reduce_n,float,thrust::use_default>,long,float,ccFsJtAs.o::plus (thrust::transform_iterator,浮动,thrust::use_default>,长,浮点,推力::plus)‘
但如果我更改为CUDA 4.1使用
-DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_OMP g++ -O2 -o monte_carlo monte_carlo.cpp -fopenmp -I /usr/local/cuda-4.1/include/
没有错误。
我的平台是Ubuntu10.04和g++ 4.4.3。
希望有人能帮我,谢谢!
正如@Robert所指出的,编辑 OMP问题是通过改变-fopenmp的顺序来解决的,但是我没有使用TBB进行编译。
-DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_TBB g++ -O2 -o monte_carlo monte_carlo.cpp -ltbb -I /usr/local/cuda/include / tmp/ccxSmcnJ.o:函数
main': monte_carlo.cpp:(.text+0xa0): undefined reference tofloat thrust::detail::backend::cuda::reduce_n,float,thrust::use_default>,long,float,推力::plus >(thrust::transform_iterator,float,thrust::use_default>,long,float::plus)‘collect2: ld返回1退出状态
但是如果我用
-DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_TBB g++ -O2 -o monte_carlo monte_carlo.cpp -ltbb -I /usr/local/cuda-4.1/include/
发布于 2016-01-16 11:05:46
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后端编译错误似乎是由于试图使用推力1.5.3上的TBB后端造成的,后者没有TBB支持。
这个答案是从问题编辑和评论中收集的,目的是将问题从CUDA标签的未回答列表中删除。
https://stackoverflow.com/questions/13517249
复制相似问题