【C/C++/CUDA C/Python】CPU/GPU 程序块运行时间多种计算方法全解析

目录

1. CPU程序块运行时间计算

1.1 C++ clock()函数

1.2 C++ chrono库

1.3 C++ time()函数【低精度(秒级)】

1.4 C++ Windows API GetTickCount()

1.5 C++ Windows API QueryPerformanceCounter() 【高精度】

1.6 C++ linux环境 gettimeofday()  【高精度】

2. GPU程序块运行时间计算

2.1 CUDA计时事件 cudaEvent_t

3. CPU计时方法用于GPU任务计时

4. python程序块运行时间计算

4.1 datetime.datetime.now()

4.2 time.time()

4.3 time.clock()


【内容繁杂,水平有限,必有差错,如若发现,感谢指正!】 


如何准确计算程序在CPU上或者GPU上执行的时间呢?如果使用CPU或者操作系统中的某个计时器,将带来某种延迟(包括操作系统线程调度,高精度CPU计时器可用性等方面)。而且,当GPU核函数运行时,还可以在主机上异步地执行计算。但如果仅测量这些程序在CPU上运算时间我们可以使用CPU或者操作系统的定时机制。而测量GPU在某个任务上花费的时间,则可以使用CUDA的事件API。

1. CPU程序块运行时间计算

1.1 C++ clock()函数

C系统调用方法,需要头文件 ctime/time.h,即Windows和Linux都可以使用。

  • clock()返回类型为clock_t类型
  • clock_t实际上为long类型, typedef long clock_t
  • clock()函数,返回从 开启这个程序进程 到 程序中调用clock()函数 之间的CPU时钟计时单元(clock tick)数,返回单位为毫秒
  • 可以使用常量CLOCKS_PER_SEC,这个常量表示每一秒有多少时钟计时单元

示例代码:

#include <time.h>   //引入头文件
int main()
{
clock_t start,end;   //定义clock_t变量
start = clock();     //开始时间

fun()  //需计时的函数

end = clock();   //结束时间
cout<<"time = "<<double(end-start)/CLOCKS_PER_SEC<<"s"<<endl;  //输出时间(单位:s)
}

1.2 C++ chrono库

chrono是C++ 11引入的一个精确中立的时间和日期库,要使用chrono要在添加chrono库。std::chrono 主要包含两部分,std::chrono::duration 和 std::chrono::time_point,它们都是类模板,std::chrono::duration 表示时间间隔,std::chrono::time_point 表示时间戳。

duration:

template <class Rep, class Period = ratio<1> > class duration;

其中Rep表示一种数值类型,用来表示Period的数量,比如int float double;Period是ratio类型,用来表示用秒表示的时间单位,比如second milisecond。

template <std::intmax_t Num, std::intmax_t Denom = 1> class ratio;

ratio 表示值等于 Num/Denom 的有理数,它的静态数据成员 num 与 den 表示由 Num 与 Denom 除以其最大公约数的分子与分母。

duration 的常用类型定义:

类型 定义
std::chrono::nanoseconds duration</*至少 64 位的有符号整数类型*/, std::nano>
std::chrono::microseconds duration</*至少 55 位的有符号整数类型*/, std::micro>
std::chrono::milliseconds duration</*至少 45 位的有符号整数类型*/, std::milli>
std::chrono::seconds duration</*至少 35 位的有符号整数类型*/>
std::chrono::minutes duration</*至少 29 位的有符号整数类型*/, std::ratio<60>>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值