在内核函数中调用设备函数时如何测量它们的时间[重复]

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 的 tictoc 差不多。 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 我用一个简单的用法示例编辑了我的帖子。

以上是关于在内核函数中调用设备函数时如何测量它们的时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在设备函数中调用 cufft 库调用?

测量linux模块中函数的执行时间和调用次数

如何从另一个模块调用导出的内核模块函数?

Linux内核设计基础之中断处理

对所有核心使用 perfsuite

C#如何测量函数时间执行[重复]