目录
1.4 C++ Windows API GetTickCount()
1.5 C++ Windows API QueryPerformanceCounter() 【高精度】
1.6 C++ linux环境 gettimeofday() 【高精度】
【内容繁杂,水平有限,必有差错,如若发现,感谢指正!】
如何准确计算程序在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>> |

最低0.47元/天 解锁文章
1754

被折叠的 条评论
为什么被折叠?



