2011-07-13 6 views
1

私が正しく理解していれば、CUDAカーネルを非同期で起動するとすぐに実行を開始するか、以前の非同期呼び出し(転送、カーネルなど)が最初に完了するのを待つかもしれません。 (カーネルはいくつかのケースで同時に実行できることも理解していますが、今は無視したい)。カーネルの起動から実行までの平均時間は?

カーネルの起動(「キューイング」)と実際に実行を開始するまでの時間を知るにはどうすればよいですか?実際には、自分のプログラムの一回の実行ですべての起動の平均「待ち時間」を知りたいだけです(一般に数十万回または数十万回のカーネル起動です)。

私は簡単に平均イベントを伴うカーネルあたりの実行時間(〜500us)。シミュレートしようとしました - カーネルが起動されるたびにCLOCK()の結果を落としました。各カーネルが起動されたときの起動キューの長さを判断できるという考えがありました。しかし、CLOCK()は十分な精度(0.01s)を持っていません。実際には多くの場合、60個ものカーネルが一度に起動するように見えることがあります。

答えて

1

clockではなく、マシンクロックサイクルに基づいてカウントするQueryPerformanceTimerを使用してください。

Code for QueryPerformanceTimer

第二に、プロファイリングツール(ビジュアルプロファイラは)のみシリアル起動[see page 24]と[see post number 3]を測定します。

したがって、1つの起動を正確に測定するようにQueryPerformanceTimer(またはVisual Profiler)を使用し、複数の起動のタイミングを取得してタイミング結果が得られるかどうかを確認するために使用してください(2)QueryPerformanceTimer非同期の起動が行われたことを示します。

関連する問題