5

CUDA 5を搭載したLinuxで計算機能35のtesla k20を使用しています。単純な子カーネル呼び出しでコンパイルエラーが発生します:Unresolved extern function cudaLaunchDevice

私のコマンドラインは次のようになります:

nvcc --compile -G -O0 -g -gencode arch=compute_35 , code=sm_35 -x cu -o fill.cu fill.o

私はcudadevrt.alib64で見ます..それを追加する必要がありますか、またはそれを解決するために何をする必要がありますか? 子カーネル呼び出しがなければ、すべて正常に動作します。

4

2 に答える 2

11

動的並列処理を使用するには、リロケータブル デバイス コードを有効にして明示的にコンパイルし、デバイス ランタイム ライブラリをリンクする必要があります。したがって、コンパイル コマンドには を含める必要が--relocatable-device-code trueあり、リンクコマンド (表示されていません) には を含める必要があります-lcudadevrt

この手順については、動的並列処理プログラミング ガイド pdf の「TOOLKIT SUPPORT FOR DYNAMIC PARALLELISM」セクションで詳しく説明されています

于 2012-12-15T08:20:25.987 に答える
6

おそらく私は少し話題から外れていますが、Windows/Visual Studio 2010 でも同じ問題があり、talonmies による最後のコメントを使用していくつかの手順で問題を解決したことを述べたいと思います。

1) View -> Property Pages
2) Configuration Properties -> CUDA C/C++ -> Common -> Generate Relocatable Device Code -> Yes (-rdc=true)
3) Configuration Properties -> CUDA C/C++ -> Device -> Code Generation -> compute_35,sm_35
4) Configuration Properties -> Linker -> Input -> Additional Dependencies -> cudadevrt.lib

この情報がお役に立てば幸いです。

于 2012-12-19T12:02:17.787 に答える