24

GPU の内部カーネルの時間を測定したいのですが、NVIDIA CUDA でどのように測定するのですか? 例えば

__global__ void kernelSample()
{
  some code here
  get start time 
  some code here 
  get stop time 
  some code here
}
4

2 に答える 2

48

次のようなことができます。

__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);
}

これは、2 つの呼び出し間のクロック サイクル数を示します。ただし、少し注意してください。タイマーは数秒後にオーバーフローするため、連続する呼び出し間のコードの継続時間が非常に短いことを確認する必要があります。また、コンパイラとアセンブラが命令の並べ替えを実行することにも注意する必要があるため、クロック呼び出しが SASS 出力で互いに隣り合って配置されないことを確認する必要がある場合があります (cudaobjdump確認に使用)。

于 2012-05-14T16:27:48.263 に答える
2

これを試してください。2つのイベント間の時間をミリ秒単位で測定します。

  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);
于 2012-05-14T15:17:42.087 に答える