相关疑难解决方法(0)

如何将 CUDA 时钟周期转换为毫秒?

我想衡量一段代码的时间内,我的内核负责。我已经关注了这个问题及其评论,以便我的内核看起来像这样:

__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 最大时钟频率。但是我以毫秒为单位的时间看起来不正确,因为它表明每个线程需要几分钟才能完成。这不可能是正确的,因为执行在不到一秒的挂钟时间内完成。转换公式不正确还是我在某处犯了错误?谢谢。

time cuda

4
推荐指数
2
解决办法
1938
查看次数

标签 统计

cuda ×1

time ×1