我最近安装了 CUDA 5,发现无法编译基于 Thrust 的现有代码。仅当我切换到 OMP 或 TBB 时才会发生该错误。
所以我使用 Thrust 示例中的 monte_carlo.cpp 做了一个实验。
当我使用 CUDA 5.0 的包含路径时,出现此错误:
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
浮动推力::细节::后端::cuda::reduce_n,浮动,推力::使用默认>,长,浮动,推力::加(推力::transform_iterator,浮动,推力::use_default>,长,浮动,推力::加)'
但是如果我改用 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/
没有错误。
我的平台是带有 g++ 4.4.3 的 Ubuntu 10.04。
希望有人能帮助我,谢谢!
编辑
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
浮动推力::detail::backend::cuda::reduce_n,浮动, 推力::use_default>, 长, 浮动, 推力::plus >(推力::transform_iterator, 浮动, 推力::use_default>, 长, 浮动, 推力::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/