内核内的CUDA评测
是否有配置CUDA内核的选项?不是作为一个整体,而是它的一部分。我有一些设备函数调用,我想测量它们的时间。是否有任何标志/事件/指令可以设置,然后在NVIDIA Visual Profiler中可见?或者我是否需要通过插入内核内的CUDA评测,cuda,nvvp,Cuda,Nvvp,是否有配置CUDA内核的选项?不是作为一个整体,而是它的一部分。我有一些设备函数调用,我想测量它们的时间。是否有任何标志/事件/指令可以设置,然后在NVIDIA Visual Profiler中可见?或者我是否需要通过插入cudaEventCreate和类似函数手动执行此操作。您可以使用clock()或clock64()函数手动为内核的特定部分计时: unsigned long long* time_spent; __global__ void kernel(...) { unsign
cudaEventCreate
和类似函数手动执行此操作。您可以使用clock()
或clock64()
函数手动为内核的特定部分计时:
unsigned long long* time_spent;
__global__ void kernel(...)
{
unsigned int t1, t2;
// ...
t1 = clock();
// code of interest
t2 = clock();
atomicAdd(&time_spent, t2 - t1);
}
'clock()`正式返回一个时钟,但我更喜欢显式使用unsigned int来说明上述代码如何正确处理时钟值的换行(只要计时代码不超过2^32-1个周期即可完成)
确保代码的时间也与
t1 = clock();
t2 = clock();
背对背,这样就可以减去计时开销。不是因为
clock()
为每个SM返回一个本地计数器吗?答案是:是的。但这并不重要,只要我们只从同一个SM获取时间差。(动态并行性确实会在这里产生一个问题,为了简单起见,我刚刚假设感兴趣的代码不会启动任何其他内核)。