0

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

4

1 に答える 1

0

問題を処理するためのトレーニングを見つけました。コンパイル中は、ターゲットGPUを指定しないでください(削除-archまたは-gencodeフラグ)。その後、ドライバは実行時に宛先バイナリを生成します。

于 2013-02-01T16:20:17.210 に答える