在内核函数中调用设备函数时如何测量它们的时间[重复]
Posted
技术标签:
【中文标题】在内核函数中调用设备函数时如何测量它们的时间[重复]【英文标题】:How to measure the time of the device functions when they are called in kernel function [duplicate] 【发布时间】:2013-10-31 20:45:02 【问题描述】:您好,在我的内核函数中,我使用了 3 个设备函数,我想计算每个设备函数所花费的时间。有没有办法在内核中为设备函数计时?请告诉我谢谢你
【问题讨论】:
也许这是少数不需要显示代码的情况之一? :-) 【参考方案1】:引用 CUDA C 编程指南:
clock_t clock();
long long int clock64();
在设备代码中执行时,返回每个多处理器计数器的值,即 每个时钟周期递增。在开始和结束时对这个计数器进行采样 一个内核,取两个样本的差异,并记录每个线程的结果 为每个线程提供设备所采用的时钟周期数的度量,以 完全执行线程,但不是设备实际的时钟周期数 花在执行线程指令上。前者的数量大于后者,因为 线程是时间切片的。
这个时间和 Matlab 的 tic
和 toc
差不多。 CUDA SDK 中有一个 clock 示例。基本上是这样的
__global__ void max(..., int* time)
int i = threadIdx.x + blockIdx.x * blockDim.x;
clock_t start = clock();
//device function call
clock_t stop = clock();
...
time[i] = (int)(stop - start);
【讨论】:
是否需要为每个设备功能添加clock()? @ChaparalaAbhilash 我用一个简单的用法示例编辑了我的帖子。以上是关于在内核函数中调用设备函数时如何测量它们的时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章