NVIDIA プログラミング ガイドによると:
実行時にアプリケーションによってロードされた PTX コードは、デバイス ドライバーによってさらにバイナリ コードにコンパイルされます。これは、ジャストインタイム コンパイルと呼ばれます。ジャストインタイム コンパイルでは、アプリケーションの読み込み時間が長くなりますが、アプリケーションは最新のコンパイラの改善点を利用できます。
...
CUDA_FORCE_PTX_JIT を 1 に設定すると、デバイス ドライバーはアプリケーションに埋め込まれたバイナリ コードを無視し (セクション 3.1.4 を参照)、代わりに埋め込み PTX コードをジャスト イン タイムでコンパイルします。カーネルに PTX コードが埋め込まれていない場合、ロードに失敗します。
次のフラグを使用して、単純な vectorAdd をコンパイルしました。
nvcc -o vectorAdd -gencode arch=compute_20,code=sm_20 vectorAdd.cu
CUDA_FORCE_PTX_JIT
環境変数が設定されていない場合、正しい結果が得られます。しかし、CUDA_FORCE_PTX_JIT
環境変数をに設定する1
と、次のエラーが発生しますcudaGetErrorString
。
invalid device function
この問題を修正して CUDA_FORCE_PTX_JIT を機能させるにはどうすればよいですか? 私のコンパイル方法では、PTX コードが埋め込まれていない可能性があります。
前もって感謝します。
さらに詳しい情報:
CUDA ドライバーのバージョン: 295.41
CUDA ツールキット バージョン: 4.0
OS: Ubuntu 10.04
ハードウェア: GTX 480、または Tesla C2050