如何使我的系统支持纳秒精度

时间:2014-03-19 10:54:30

标签: c++ linux timer performance-testing

当我从这个页面high_precision_timer运行代码时,我知道我的系统只支持微秒精度。

根据文件,

  

cout<< chrono :: high_resolution_clock :: period :: den<< ENDL;

     

注意,不能保证每秒的滴答数   只有它是最高的可用。因此,我们首先要做的事情   通过打印每秒多少次来获得精度   时钟滴答作响。我的系统每秒提供1000000个滴答,即   微秒精度。

我也得到完全相同的值每秒1000000个刻度。这意味着我的系统也支持微秒精度。

每次我运行任何程序时,我总是得到xyz微秒和xyz000 nanosec的值。我认为上述不支持我的系统可能是纳赛索的原因。

有没有办法让我的系统支持nanosec?

2 个答案:

答案 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;
}