【问题标题】:How to make my system support nano seconds precision如何让我的系统支持纳秒精度
【发布时间】:2014-04-25 13:28:02
【问题描述】:

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

根据文档,

cout

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

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

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

有什么方法可以让我的系统支持纳秒?

【问题讨论】:

  • 首先,我会检查您是否使用clock_gettime 获得纳秒精度,如果没有,那么您的系统可能不支持纳秒精度。
  • @user2802841 感谢您的回复。我在那里得到纳秒精度。问题是我想以纳秒精度打印当前时间,为此我使用了 Boost 计时器。它仅以微秒精度打印。
  • @user2802841 有没有其他计时器可以用来以纳秒精度打印当前时间?
  • 精度可能,精度没有。显然,在 cout 调用完成时,该值将严重过时。显示器发出的光线需要几纳秒才能到达您的眼睛。
  • 如果要操作nano-ratio必须是:nano std::ratio micro std::ratio

标签: c++ linux timer performance-testing


【解决方案1】:

这不是答案。我无法在评论中打印长消息。 我只是测试你的例子。 我的系统输出结果是: 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;
}

【讨论】:

  • 令我惊讶的是,虽然我的系统使用 clock_gettime 以纳秒精度生成,但不是使用这个 chrono,它是更高精度的计时器。
【解决方案2】:

考虑到这一点, 今天的大多数处理器以大约 1 到 3 GHz 的频率运行,即 2 * 10^9 Hz。 这意味着在处理器级别每 0.5 纳秒 1 个滴答声。所以我猜你的机会非常渺茫。

编辑: 虽然文档仍然很少,但我记得读过它访问 CPU 的 RTC(不确定),其频率是固定的。 另外作为一个建议,我认为以纳秒为单位测量性能与以微秒为单位相比几乎没有优势(除非它用于医疗用途;))。

看看这个问题及其答案。我认为它可以更有意义 HPET's frequency vs CPU frequency for measuring time

【讨论】:

  • 我使用 Intel(R) Core(TM) i3 CPU 550 @ 3.20GHz,程序输出为:1000000000 sec = 0:micro = 543327:nano = 543327255:
  • 我的系统是 Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz,输出为 1000000 秒,微 = 616303 纳秒 = 616303000
猜你喜欢
  • 2018-02-16
  • 1970-01-01
  • 2019-07-13
  • 2020-02-02
  • 2015-02-27
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多