Подтвердить что ты не робот

Как измерить внутреннее время ядра в NVIDIA CUDA?

Я хочу измерить время внутреннего ядра графического процессора, как его измерить в NVIDIA CUDA? например.

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

Ответ 1

Попробуйте это, он измеряет время между двумя событиями в миллисекундах.

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

Ответ 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);
}

Который дает количество тактовых циклов между двумя вызовами. Будьте осторожны, таймер будет переполняться через пару секунд, поэтому вы должны быть уверены, что продолжительность кода между последовательными вызовами довольно короткая. Вы также должны знать, что компилятор и ассемблер выполняют переупорядочение команд, поэтому вам может потребоваться проверить, что вызовы часов не замыкаются друг на друга на выходе SASS (используйте cudaobjdump для проверки).