如何在NVIDIA CUDA中测量内核时间?

我想测量GPU的时间内核,如何在NVIDIA CUDA中测量它? 例如

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

试试这个,它以毫秒为单位测量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); 

你可以做这样的事情:

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

这给出了两次调用之间的时钟周期数。 要小心一点,定时器会在几秒钟后溢出,所以你应该确保连续调用之间的代码持续时间很短。 你也应该知道,编译器和汇编器确实执行指令重新sorting,所以你可能想要检查时钟调用不会在SASS输出中相互靠近(使用cudaobjdump来检查)。