CUDA 4.x で への最初の呼び出しが途方もなくcudaMalloc
遅くなることは秘密ではありません (これは何度か報告されています)、一見 CUDA ドライバーのバグのようです。
最近、奇妙な動作に気付きました: の実行時間はcudaMalloc
、プログラムにリンクしたサードパーティの CUDA ライブラリの数に直接依存します (これらのライブラリは使用しないことに注意してください。プログラムをリンクするだけです)。
次のプログラムを使用していくつかのテストを実行しました。
int main() {
cudaSetDevice(0);
unsigned int *ptr = 0;
cudaMalloc((void **)&ptr, 2000000 * sizeof(unsigned int));
cudaFree(ptr);
return 1;
}
結果は次のとおりです。
リンク先: -lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand 実行時間: 5.852449
リンク先: -lcudart -lnpp -lcufft -lcublas 実行時間: 1.425120
リンク先: -lcudart -lnpp -lcufft 実行時間: 0.905424
リンク先: -lcudart 実行時間: 0.394558
「gdb」によると、時間は実際に私のcudaMallocに入るので、ライブラリの初期化ルーチンが原因ではありません..
誰かがこれについてもっともらしい説明を持っているのだろうか?