当我从这个页面high_precision_timer运行代码时,我知道我的系统只支持微秒精度。
根据文件,
cout<< chrono :: high_resolution_clock :: period :: den<< ENDL;
注意,不能保证每秒的滴答数 只有它是最高的可用。因此,我们首先要做的事情 通过打印每秒多少次来获得精度 时钟滴答作响。我的系统每秒提供1000000个滴答,即 微秒精度。
我也得到完全相同的值每秒1000000个刻度。这意味着我的系统也支持微秒精度。
每次我运行任何程序时,我总是得到xyz微秒和xyz000 nanosec的值。我认为上述不支持我的系统可能是纳赛索的原因。
有没有办法让我的系统支持nanosec?
答案 0 :(得分:0)
考虑一下, 目前大多数处理器的工作频率约为1至3GHz,即2 * 10 ^ 9Hz。 这意味着在处理器级别每0.5纳秒进行一次滴答。所以我猜你的机会非常渺茫。
编辑: 虽然文档仍然是稀疏的,我记得读它访问CPU的RTC(不确定),其频率是固定的。 另外作为一个建议,我认为以微秒为单位测量纳秒的测量性能没有什么优势(除非用于医疗用途;)。
并看看这个问题及其答案。我认为它更有意义 HPET's frequency vs CPU frequency for measuring time
答案 1 :(得分:0)
这不是答案。我无法在评论中打印长消息。 我只是测试你的例子。 我的系统输出结果是: chrono :: high_resolution_clock :: period :: den = 1000000000。 我的系统每秒提供1000000000个刻度,这是一个纳秒的精度。 不是1000000(微秒)。 您的系统每秒提供1000000个刻度,这是一个微秒的精度。 所以,我不知道如何帮助你。遗憾。
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
cout << chrono::high_resolution_clock::period::den << endl;
auto start_time = chrono::high_resolution_clock::now();
int temp;
for (int i = 0; i< 242000000; i++)
temp+=temp;
auto end_time = chrono::high_resolution_clock::now();
cout <<"sec = "<<chrono::duration_cast<chrono::seconds>(end_time - start_time).count() << ":"<<std::endl;
cout <<"micro = "<<chrono::duration_cast<chrono::microseconds>(end_time - start_time).count() << ":"<<std::endl;
cout <<"nano = "<<chrono::duration_cast<chrono::nanoseconds>(end_time - start_time).count() << ":"<<std::endl;
return 0;
}