【发布时间】:2022-01-04 01:03:11
【问题描述】:
我正在尝试使用以下代码获取内核启动时间,但此代码的输出不正确。
我想要内核函数的启动时间相对于这个程序的启动时间。也就是说,如果我们把这个程序的开始时间看作零时间,那么内核函数的开始时间是多少。
我的错误是什么?
//headers
#include <sys/time.h>
//kernel function defined here
int main(){
struct timeval kernelStartTime;
//memcpys and ....
gettimeofday(&kernelStartTime, 0);
MatrixMulCUDA<32><<<matrixMulgrid, matrixMulthreads>>>(C, A, B, dimsA.x, dimsB.x);
cudaDeviceSynchronize();
float startTime = (1000000.0 * kernelStartTime.tv_sec + kernelStartTime.tv_usec)/1000.0;
//some codes
printf("kernel start time = %f", startTime);
return 0;
}
输出:
内核启动时间 = 1.63786e+12
谢谢。
【问题讨论】:
-
为什么 1.6e12 不是正确答案?根据gettimeofday linux man page,该函数返回“自 epoch 以来的秒数”。你知道那是什么吗?时代似乎是
1970-01-01 00:00:00 +0000 (UTC).。自纪元以来,您的缩放似乎实际上产生了数毫秒。这个数字似乎在正确的范围内,从 1970 年到现在的毫秒数。您期望的价值是多少? -
谢谢克罗维拉先生。在你的评论之后,我明白了我应该做什么。
-
当你不想使用 cudaDeviceSynchronize - docs.nvidia.com/cuda/cuda-runtime-api/… 时,你也可以考虑使用回调来获取实际的内核启动时间
-
@meh 由于您已经发布了自己问题的答案,请考虑接受该答案。如果问题已接受答案,则对社区更有帮助。
标签: cuda