測量精度不一致
問題:
在給定的測試程序中, std::chrono::high_resolution_clock 報告的分辨率為100 奈秒,但測量的std::cout 所花費的時間始終超過1 微秒。為什麼預期分辨率與觀察到的測量結果不匹配?
答案:
如果使用Visual Studio 2012,std::chrono::high_resolution_clock 為typedef' d 為system_clock,其解析度有限,約為1 毫秒。這種差異是導致觀察到的不一致的原因。
解決方案:
要在 Visual Studio 2012 中取得高解析度計時,應採用利用 QueryPerformanceCounter 的替代時脈。以下代碼提供了示例:
struct HighResClock { typedef long long rep; typedef std::nano period; typedef std::chrono::duration<rep, period> duration; typedef std::chrono::time_point<HighResClock> time_point; static const bool is_steady = true; static time_point now(); };HighResClock.h:
namespace { const long long g_Frequency = []() -> long long { LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); return frequency.QuadPart; }(); } HighResClock::time_point HighResClock::now() { LARGE_INTEGER count; QueryPerformanceCounter(&count); return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency)); }HighResClock.cpp:此HighResClock 可與標準時脈互換使用,提供必要的高解析度計時功能。
以上是為什麼 Visual Studio 2012 中的 std::chrono::high_resolution_clock 報告的解析度比觀察到的測量值更高?的詳細內容。更多資訊請關注PHP中文網其他相關文章!