Visual Studio 2012 で std::chrono::high_resolution_ Clock が予想よりも低い解像度を報告するのはなぜですか?

Linda Hamilton
リリース: 2024-11-11 09:13:02
オリジナル
471 人が閲覧しました

Why Does std::chrono::high_resolution_clock Report Lower Resolution Than Expected in Visual Studio 2012?

std::chrono::high_resolution_lock の解像度の不一致

std::cout にかかる時間を測定するように設計されたテスト プログラムでは、出力は、予想される 100 ナノ秒の分解能から一貫して高い偏差を示しています。 std::chrono::high_resolution_lock。代わりに、測定された持続時間の範囲は 1 ~ 2 マイクロ秒です。この不一致により、報告された分解能と時間測定方法の精度について疑問が生じます。

分解能に影響を与える要因

周期によって報告されるクロックの分解能。測定できる時間の最小単位です。 Visual Studio 2012 には高解像度のクロックが含まれていますが、残念ながら精度が低く、通常は約 1 ミリ秒の解像度を示します。これは、Visual Studio 2012 が high_resolution_ Clock を system_ Clock に再定義するため、本質的に精度が低いことが原因です。

Visual Studio 2012 の代替高解像度クロック

に対処するにはこの制限がある場合は、QueryPerformanceCounter 関数を使用して、より正確な高解像度クロックを実装できます。オペレーティング システムによって提供されます。以下に提供されている HighResClock クラスは、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()
    {
        LARGE_INTEGER count;
        QueryPerformanceCounter(&amp;count);
        return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency));
    }
};

namespace
{
    const long long g_Frequency = []() -> long long
    {
        LARGE_INTEGER frequency;
        QueryPerformanceFrequency(&amp;frequency);
        return frequency.QuadPart;
    }();
}
ログイン後にコピー

この代替クロックは既存のコードにシームレスに統合でき、コード内でも高解像度の時間測定が可能です。 Visual Studio 2012 の制約。

以上がVisual Studio 2012 で std::chrono::high_resolution_ Clock が予想よりも低い解像度を報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート