私はCUDAでアプリケーションのプロトタイプを作成しています。私はそれをCPUに対してベンチマークし、いくつかの可変ランタイムに注目しました。コマンドラインからアプリケーションをループして実行することにしたので、より良い統計情報を集めることができました。私はアプリケーションを50回実行し、結果を記録した。私は、発射回数の関数として経過したカーネル時間が増えているのを見て非常に驚いていました。ここで連続した起動でCUDAカーネルの実行時間が長くなるのはなぜですか?
あなたはタイムアウトされているコードの一部を見ることができるので、抜粋です:
int nblocks = (int)ceil((float)n/(float)NUM_THREADS);
gpuErrchk(cudaEventRecord(start, 0));
gpuperfkernel << <nblocks, NUM_THREADS >> >(dmetadata, ddatax, ddatay);
gpuErrchk(cudaPeekAtLastError());
gpuErrchk(cudaDeviceSynchronize());
gpuErrchk(cudaEventRecord(stop, 0));
gpuErrchk(cudaEventSynchronize(stop));
gpuErrchk(cudaEventElapsedTime(&milliseconds, start, stop));
printf("GPU kernel took %f milliseconds.\n", milliseconds);
gpuelapsed += milliseconds;
私はCUDAでかなり働いてきたし、私はこれを見ていません以前の行動。誰かがこれに気付いているのだろうか?私のプラットフォームはWindows 10、CUDA 7.5、MSIノートブック、GeForce 970mです。
私はラップトップにいるので、それは電源関連の設定やそのようなものかもしれないと思っていましたが、すべてが高性能に設定され、スクリーンセーバーが無効になっています。
全体的に、測定時間の差が1%未満であり、最小から最大までです。 Windowsオペレーティングシステムでは、GPUも使用しています。実際には、すべてのCUDAアクセスをGPUに管理しています。 Windowsは忙しい環境です。私はいくつかのバリエーションがあることには驚かない。 –