Как измерить внутреннее время ядра в NVIDIA CUDA?
Я хочу измерить время внутреннего ядра графического процессора, как его измерить в NVIDIA CUDA?
например.
__global__ void kernelSample()
{
some code here
get start time
some code here
get stop time
some code here
}
Ответы
Ответ 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
для проверки).