これについていくつかのスレッドを見ましたが、私が抱えている問題とは関係がないようです。
動作する 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 フラグが無効になることにも注意してください。
どこが間違っていますか?フラグを別の場所に置く必要がありますか? あきらめる必要がありますか?