【问题标题】:Timing Kernel Execution with CPU Timers使用 CPU 定时器计时内核执行
【发布时间】:2021-11-07 05:26:42
【问题描述】:

我一直在尝试使用 nvidia 网站中显示的 cpu 指标来测量 cuda 内核执行时间,但是我在使用 myCPUTimer() 函数时遇到了问题

  T1=myCPUtimer();
  vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);
  cudaDeviceSynchronize();
  T2=myCPUTimer();

编译后我得到这个错误undefined reference to 'myCPUTimer' 而且我似乎在网上找不到任何有关如何使用此功能的文档。

【问题讨论】:

标签: c cuda


【解决方案1】:

我猜你指的是this

那里的文字说:

通用主机时间戳函数 myCPUTimer()

该功能不是为您提供的,您不能按原样使用它。那里的“通用”意味着它是您将使用和提供的一些功能,可能是特定于平台(即操作系统)的。

您必须自己提供这样的功能。在这种情况下,它是一个虚构的功能。它在现实世界中并不存在,就像那样。

您可以在 SO 上找到许多关于如何对 CUDA 内核进行主机计时的问题,例如 this one

例如,在 linux 上,您可以这样做:

#include <time.h>
#include <sys/time.h>
#define USECPSEC 1000000ULL

unsigned long long myCPUTimer(unsigned long long start=0){

  timeval tv;
  gettimeofday(&tv, 0);
  return ((tv.tv_sec*USECPSEC)+tv.tv_usec)-start;
}

这将以微秒为单位将“时间戳”返回到 unsigned long long 变量中,使用相当高分辨率的基于 CPU 的计时器。

【讨论】:

  • 非常感谢,我还是 cuda 编程的新手,所以我可能会有些困惑。
猜你喜欢
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多