GPUの内部カーネルを測定したいのですが、どのようにNVIDIA CUDAで測定するのですか?例: NVIDIA CUDAの内部カーネル時間を測定する方法は?
__global__ void kernelSample()
{
some code here
get start time
some code here
get stop time
some code here
}
GPUの内部カーネルを測定したいのですが、どのようにNVIDIA CUDAで測定するのですか?例: NVIDIA CUDAの内部カーネル時間を測定する方法は?
__global__ void kernelSample()
{
some code here
get start time
some code here
get stop time
some code here
}
これを試すと、2つのイベントの間隔がミリ秒単位で測定されます。 2回の呼び出しの間のクロックサイクル数を示します
__global__ void kernelSample(int *runtime)
{
// ....
clock_t start_time = clock();
//some code here
clock_t stop_time = clock();
// ....
runtime[tidx] = (int)(stop_time - start_time);
}
:
cudaEvent_t start, stop;
float elapsedTime;
cudaEventCreate(&start);
cudaEventRecord(start,0);
//Do kernel activity here
cudaEventCreate(&stop);
cudaEventRecord(stop,0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&elapsedTime, start,stop);
printf("Elapsed time : %f ms\n" ,elapsedTime);
あなたはこのような何かを行うことができます。少し注意してください。タイマーは数秒後にオーバーフローしますので、連続するコール間のコードの持続時間が非常に短いことを確認してください。また、コンパイラとアセンブラは命令の並べ替えを実行するので、クロックコールがSASS出力で隣り合わせになっていないことを確認したい場合があります(チェックするにはcudaobjdump
を使用してください)。
Amin(数年前)あなたは有用な情報である回答を受け入れましたが、あなたの実際の質問には答えません。答えを反映させるために質問を受け入れないで編集してもいいですか? – einpoklum