0

最近 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内で float Thrust::detail::backend::cuda::reduce_n、float、thrust::use_default>、long、float、thrust::plus

(推力::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 です。

誰かが私を助けてくれることを願っています、ありがとう!

Edit 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 tofloat 推力::詳細::バックエンド::cuda::reduce_n,フロート、推力::use_default>、ロング、フロート、推力::プラス >(推力::transform_iterator、フロート、推力::use_default>、ロング、フロート、推力::プラス)' 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/

4

1 に答える 1