cuda-4-计时

写CUDA,追求的就是加速比,想要得到准确的时间,计时函数就是必不可少
计时通常分为两种情况:

  • 直接得到接口函数的时间,一般用于得到加速比;可以使用CPU计时函数和GPU计时函数

  • 获得接口函数内核函数、内存拷贝函数等所耗时间,一般用于优化代码时;可以使用nvprof工具

CPU计时函数

在利用CPU计时函数时,要考虑的一个问题是:核函数的执行是异步执行的,所以必须加上核函数同步函数,才能得到准确的时间。
示例代码如下:

1
2
3
4
5
6
7
8
9
double cpuSecond() {
struct timeval tp;
gettimeofday(&tp,NULL);
return ((double)tp.tv_sec + (double)tp.tv_usec*1.e-6);
}
double iStart = cpuSecond();
function(argument list);
cudaDeviceSynchronize(); // 同步函数
double iElaps = cpuSecond() - iStart;