我想衡量一段代码的时间内,我的内核负责。我已经关注了这个问题及其评论,以便我的内核看起来像这样:
__global__ void kernel(..., long long int *runtime)
{
long long int start = 0;
long long int stop = 0;
asm volatile("mov.u64 %0, %%clock64;" : "=l"(start));
/* Some code here */
asm volatile("mov.u64 %0, %%clock64;" : "=l"(stop));
runtime[threadIdx.x] = stop - start;
...
}
Run Code Online (Sandbox Code Playgroud)
答案说做一个转换如下:
计时器计算时钟滴答的次数。要获得毫秒数,请将其除以设备上的 GHz 数并乘以 1000。
我这样做:
for(long i = 0; i < size; i++)
{
fprintf(stdout, "%d:%ld=%f(ms)\n", i,runtime[i], (runtime[i]/1.62)*1000.0);
}
Run Code Online (Sandbox Code Playgroud)
其中 1.62 是我设备的 GPU 最大时钟频率。但是我以毫秒为单位的时间看起来不正确,因为它表明每个线程需要几分钟才能完成。这不可能是正确的,因为执行在不到一秒的挂钟时间内完成。转换公式不正确还是我在某处犯了错误?谢谢。