Windows C++で実行時間をミリ秒またはマイクロ秒でどのように測定しますか?
多くのメソッド1がtime(NULL)を呼び出すのを見つけましたが、それは秒単位でのみ時間を測定し、seconds clock()(clock_t)は実際の時間ではなくCPU時間を測定します。
このペーパーで言及されている関数gettimeofday(Calendar time)を見つけました:dropbox.com/s/k0zv8pck7ydbakz/1_7-PDF_thesis_2.pdf
この関数はLinux(ミリ秒とマイクロ秒単位の計算時間)用であり、Windows用ではありません。
Windows用の代替手段を見つけました:dropbox.com/s/ofo99b166l7e2gf/gettimeofday.txt
そしてこれは関連しているかもしれません:stackoverflow.com/questions/1861294/how-to-calculate-execution-time-of-a-code-snippet-in-c
標準のC++を使用できます _<chrono>
_ライブラリ :
_#include <iostream>
#include <chrono>
// long operation to time
long long fib(long long n) {
if (n < 2) {
return n;
} else {
return fib(n-1) + fib(n-2);
}
}
int main() {
auto start_time = std::chrono::high_resolution_clock::now();
long long input = 32;
long long result = fib(input);
auto end_time = std::chrono::high_resolution_clock::now();
auto time = end_time - start_time;
std::cout << "result = " << result << '\n';
std::cout << "fib(" << input << ") took " <<
time/std::chrono::milliseconds(1) << "ms to run.\n";
}
_
覚えておくべきことの1つは、_<chrono>
_を使用すると、タイプセーフで一般的なタイミングコードが有効になりますが、その利点を得るには、期間と時点を格納するダムタイプセーフでないタイミングライブラリを使用する場合とは少し異なる方法で使用することですint
のようなタイプで。これは、いくつかの特定の使用シナリオと、型なしライブラリの使用とクロノを使用するためのベストプラクティスの違いを説明する回答です: https://stackoverflow.com/a/15839862/365496
Visual Studioの標準ライブラリ実装のメンテナ 示されています _high_resolution_clock
_の低解像度は、QueryPerformanceCounter()
を使用してVS2015で修正されています。
実行時間を計算するには、QPC/QPFAPIを使用する必要があります。 QueryPerformanceCounter の呼び出しの間に必要なコードを呼び出してから、 QueryPerformanceFrequency を使用してサイクルからマイクロ秒に変換します。
LARGE_INTEGER nStartTime;
LARGE_INTEGER nStopTime;
LARGE_INTEGER nElapsed;
LARGE_INTEGER nFrequency;
::QueryPerformanceFrequency(&nFrequency);
::QueryPerformanceCounter(&nStartTime);
SomethingToBeTimed();
::QueryPerformanceCounter(&nStopTime);
nElapsed.QuadPart = (nStopTime.QuadPart - nStartTime.QuadPart) * 1000000;
nElapsed.QuadPart /= nFrequency.QuadPart;
参照: http://msdn.Microsoft.com/en-us/library/windows/desktop/dn553408(v = vs.85).aspx
QueryPerformanceCounter
および関連する関数を探しています。