知道 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 条指令。
我试图在 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 条指令。