Sar*_* T. 7 c++ benchmarking timing c++11
我正在为一部分具有低延迟要求的程序编写一些时序代码.
看看std :: chrono库中可用的内容,我发现编写可移植的定时代码有点困难.
system_clock没用,因为它不稳定,其余两个时钟都有问题.
high_resolution_clock在所有平台上都不一定稳定.
steady_clock不一定支持细粒度分辨率时间段(例如:纳秒)
为了我的目的,有一个稳定的时钟是最重要的要求,我可以通过微秒粒度来解决.
我的问题是,如果有人想要在不同的h/w体系结构和操作系统上运行的时间代码 - 什么是最好的选择?
使用steady_clock
.在所有实现中,其精度为纳秒.您可以通过打印出检查这个自己所用平台steady_clock::period::num
和steady_clock::period::den
.
现在这并不意味着它实际上会测量纳秒精度.但平台会尽力而为.对我来说,连续两次调用steady_clock
(启用优化)将报告相隔100ns的时间.
#include "chrono_io.h"
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
using namespace date;
auto t0 = steady_clock::now();
auto t1 = steady_clock::now();
auto t2 = steady_clock::now();
auto t3 = steady_clock::now();
std::cout << t1-t0 << '\n';
std::cout << t2-t1 << '\n';
std::cout << t3-t2 << '\n';
}
Run Code Online (Sandbox Code Playgroud)
上面的示例仅使用这个免费的,开源的,仅限标头的库,以方便格式化持续时间.你可以自己格式化(我很懒).对我来说这只是输出:
287ns
116ns
75ns
Run Code Online (Sandbox Code Playgroud)
因人而异.
归档时间: |
|
查看次数: |
1392 次 |
最近记录: |