3

洗練された CUDA ベースの Linux アプリケーションがあります。Ubuntu 12.04 (x86_64) と NVIDIA ドライバー 295.41 + CUDA 4.2 Toolkit を使用して、1 枚の NVIDIA GTX 560 Ti カード (1 GB メモリ) を搭載した i7 マシンで実行されます。

アプリケーションは、GPU で約 600 ~ 700 MB のグローバル メモリを必要とし、cudaMalloc().

デバッグを行った後、アプリケーションの最初の への最初の呼び出しで一度に約580 MBのグローバル メモリがcudaSetDevice()割り当てられ、残りのアプリケーションで使用できるメモリは 433 MB しかないことがわかりました。

CUDA リファレンス マニュアルによると、デバイスの「プライマリ コンテキスト」を初期化し、CUDA カーネル (ドライバー API では「モジュール」と呼ばれます) や定数変数などのさまざまなリソースを割り当てます。アプリケーションにはいくつかの__device__ __constant__変数がありますが、それらの合計量はわずか数 KB です。約 20 ~ 30 のカーネルとデバイス関数があります。

初期化中にCUDAが大量のGPUメモリを割り当てる理由がわかりません。別の最小限のプログラムでは、cudaSetDevice(0); cudaMemGetInfo(&a, &t); printf("%ld, %ld\n", a, t);約 980 MB の使用可能なメモリしか表示されません。したがって、問題はアプリケーションcudaSetDevice()にあるはずですが、の実装の詳細は完全に独自のものであるため、このような大量のメモリ割り当ての原因を特定できませんでした。

他のアイデアを得ることができますか?

4

3 に答える 3

1

問題のようですね。Nvidia にバグを報告しますか? 手順は次のとおりです。 1. ページhttp://developer.nvidia.com/cuda/join-cuda-registered-developer-programを開きます。2. 登録していない場合は「今すぐ参加」をクリックし、そうでない場合は「今すぐログイン」をクリックします。3. 電子メールとパスワードを入力してログインします。4. 左パネルの [ホーム] セクションに [バグ レポート] 項目があり、それをクリックしてバグを報告します。5. 必須項目を入力します。その他の項目はオプションですが、詳細な情報は、問題を絞り込んで修正するのに役立ちます。6. 必要に応じて、添付ファイルをアップロードする必要があります。7. Linux システムの場合、nvidia-bug-report を添付することをお勧めします。8. 問題が特定のコード パターンに関連する場合は、再現のためにサンプル コードとそれをコンパイルする手順が必要です。

于 2012-09-14T10:19:55.867 に答える
-1

cudaXXX()関数への最初の呼び出しにより、報告された VmData (UNIX) が大量に、時には数十 GB に急増したときに、同様の問題が発生しました。これはバグではなく、理由は次のとおりです。

Cuda ランタイムが初期化時に 80 GiB の仮想メモリを予約するのはなぜですか?

于 2012-12-31T13:03:52.653 に答える