3

これについていくつかのスレッドを見ましたが、私が抱えている問題とは関係がないようです。

動作する CUDA コードがありますが、カーネル コードと非同期で実行されている (そしてカーネルが終了した後も) for ループを並列化したいと考えています。

リンクに問題があるようですが...エラーはそのままです。

.../lib/liblainference.so: エラー: 'omp_get_num_threads' への未定義の参照

.../lib/liblainference.so: エラー: 'omp_get_thread_num' への未定義の参照

.../lib/liblainference.so: エラー: 'GOMP_barrier' への未定義の参照

.../lib/liblainference.so: エラー: 'GOMP_single_start' への未定義の参照

.../lib/liblainference.so: エラー: 'GOMP_critical_start' への未定義の参照

.../lib/liblainference.so: エラー: 'GOMP_critical_end' への未定義の参照

.../lib/liblainference.so: エラー: '__gxx_personality_v0' への未定義の参照

.../lib/liblalinference.so: エラー: 'GOMP_parallel_start' への未定義の参照

.../lib/liblalinference.so: エラー: 'GOMP_parallel_end' への未定義の参照

最初に、私は以前に opemMP の作業を行ったことがあることを指摘したいと思いますが、C コードをコンパイルした別のセクションで

CFLAGS = -g -O2 *many flags here* -fopenmp

それ以外は無関係な情報です。重要な部分は、makefile のフラグ行に -fopenmp を追加する必要があったことです。

ただし、CUDAはすべて複雑であり、バックボーンとしてc ++コンパイラを使用するようなnvccを使用しているため(そうですか?)、途方に暮れているようです。-fopenmp を追加すると

CPPFLAGS =  ... *many cuda flags* -fopenmp

上記のエラーが発生します。

私も試してみました

CPPFLAGS =  ... *many cuda flags* -fopenmp -lgomp

また、プロジェクトを構成すると、CUDA が有効になっていると GCC フラグが無効になることにも注意してください。

どこが間違っていますか?フラグを別の場所に置く必要がありますか? あきらめる必要がありますか?

4

1 に答える 1

6

以下を実行したところ、うまくいくことがわかりました。

nvccフラグ-Xcompiler -fopenmp -fgompファイル スタッフ

チューダーのおかげで

于 2012-09-06T01:42:22.670 に答える