2012-11-26 18 views
5

Boostを使用してミリ秒の精度で時刻を取得したいと考えています。 (精度は、ミリ秒であることをちょうど近い必要はありません。)boost :: posix_time :: microsec_clockはCPUに負荷をかけますか?

Local time with millisecondsを参照すると、他の人、それはマイクロ秒のクロックを使用すべきであることが示されている:私の経験で

boost::posix_time::microsec_clock::local_time(); 

、それは不可能です影響の少ない標準的なシステムコール(つまり、Windowsでは::GetTicks())を使用して、マイクロ秒単位の精度(何らかの似たような精度を前提としています)を得ることができます。むしろ、ミリ秒単位(マイクロ秒単位)を超えて精度を向上させるためには、CPUを集中的に呼び出す必要があります。

私が言及したように、私はマイクロ秒の精度は必要ありません - ちょうどミリ秒の精度にいくらか近くなります。しかし、Boost.Date_Timeは "millisec_clock"を提供せず、second_clockを提供し、次のグラデーションはmicrosec_clockであり、中間に "millisec_clock"はありません。

私がmicrosec_clockを使用した場合、MILLI秒を取得するために、CPUを大量に使用してコールしますか? Relevant documentationによると

答えて

1

:それはFTIMEを使用して実装されているほとんどのWin32プラットフォームで

。 Win32システムでは、このAPIを使用してマイクロ秒の解像度を達成しないことがよくあります。より高い解像度がアプリケーションにとって重要な場合は、プラットフォームをテストして達成された解像度を確認してください。

ftimeは重すぎる機能(here is a question about how it works)ではないようですが、CPU集約型の考えに依存していると思います。

5

私は、関数内で費やされた時間を測定するために、boost :: date_timeオブジェクトを使って、特にmicrosec_clock :: local_time()を使用しました。

私はこのオブジェクトを使用して、数百万回の異なる機能(ストレステストのケース)への迅速な呼び出しを測定していましたが、私は自分のプロセスの実行時間の多くを占めることはできませんでした。いくつかの実験の後、私はこれらのカウンターのほとんどを削除し、コードの実行時間は約23分〜約12分(約50%!)になりました

私の経験から質問に答えるには、microsec_clock: :local_time()は高価です。

これを見てから、私はmicrosec_clock :: local_time()の代わりにmicrosec_clock :: universal_time()を使ってテストを行いました。これは間違いなく私の実行時間の改善でした。それはまだ約3分を追加しましたが、それは10分より良いです:P。それについて考えてみると、local_time()は時間の値をオフセットして、私の場合は必要ではなかった(時間差だけが必要なので)タイムゾーンを考慮に入れています。私はまだ他のメソッドが高速であるかどうかを調べるためのテストを行う必要があります(clock_gettimeなど)。

私はこれがあなたが探していた答えのタイプであることを願っています。

関連する問題