知道 CPU 是否支持纳秒

Know if CPU supports nanoseconds

我试图在 visual studio 中使用 C++ 获取经过的时间(以纳秒为单位)。我做了一些测试,测量值总是以 00 结尾。这是否意味着我的处理器 (Ryzen 7-1800X) 不支持 ~1 纳秒分辨率而只支持 ~100ns?我能以某种方式启用它吗?

auto start = std::chrono::high_resolution_clock::now();    
for (int i = 0; i < 10; i++) {
    //stuff
    auto elapsed = std::chrono::high_resolution_clock::now() - start;
    long long nanoseconds = std::chrono::duration_cast<std::chrono::nanoseconds>(elapsed).count();
    std::cout << "\n" << nanoseconds << "\n";
}

在 MSVC 2015+ 中,std::chrono::high_resolution_clock 基于 QueryPerformanceCounter,分辨率为 100ns。

在 Windows 上,QueryPerformanceCounter 是最快的用户空间计时器。 如果你想要更高的分辨率,可以试试RDTSC指令(__rdtsc) which returns the CPU cycle counter. But it's a 可以正常使用,不推荐。

在 Windows 上,您似乎几乎坚持使用 100ns 分辨率。请记住,在 Windows 世界中,100ns 是一个非常短的时间——它大约等于 300 条指令。仅对 QueryPerformanceCounter 的一次调用就已经需要大约 1000 条指令。