例えば
int *p;
cudaMalloc(&p, sizeof(int));
約20秒かかり、私のプロセスは通常、タスクマネージャーでのメモリ使用量が650MB以上になります(ただし、常にわずかに異なる量です). GPU-Zは、GPU の専用メモリ使用量が 200MB 以上増加していることも示しています。
- への最初の呼び出しでのみ発生します
cudaMalloc
- その前に他の CUDA 関数を呼び出しても問題ありません。
cudaGetDevice
- 他の CUDA プロジェクトでは発生しない
私は使っている
- Thrust、CUBLAS、cuRAND ライブラリ
- NVCC を使用した MSVC 2010
- Nsight 3.0
- CUDA5.0
なぜこれが起こるのですか?何ができるでしょうか?
更新:
以下のコメントで述べたように、これは初期化に起因するようです (呼び出しcudaFree(0)
も同じ効果があります)。ただし、なぜこれほど遅いのかについては、おそらく実行時エラーに関係している可能性があります。初期化行がヒットすると、次のエラーが 30 回発生します。
First-chance exception at 0x74f0b727 in ...: Microsoft C++ exception: cudaError_enum at memory location 0x003ff9c4..
First-chance exception at 0x74f0b727 in ...: Microsoft C++ exception: cudaError_enum at memory location 0x003ff9c4..
First-chance exception at 0x74f0b727 in ...: Microsoft C++ exception: cudaError_enum at memory location 0x003ff9c4..
etc...
これは、孤独な呼び出しのように、何も割り当てていないときにも発生しますcudaFree(0);
-理由はわかりません...