Windows で特定のコードの実行に費やされた CPU サイクルを測定しようとしています。上記のコード (Visual C++ 11) を実行しているときに、実行ごとに CPU サイクルが大幅に異なる可能性があることに気付きました。関連する明示的な I/O がないため、なぜこれが起こっているのかわかりません。
一般に、スレッドが消費する CPU サイクルと実行される命令の量との関係はどのようなものですか? その概算として CPU サイクルを使用できますか?
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <algorithm>
int _tmain(int argc, _TCHAR* argv[])
{
unsigned __int64 thread_cycle1;
unsigned __int64 thread_cycle2;
HANDLE thread_handle = GetCurrentThread();
QueryThreadCycleTime(thread_handle, &thread_cycle1);
// Code for profiling
int a[] = {1,3,4,5,6,7,23,4,2,6,7,8,9};
std::sort(a, a + sizeof(a) / sizeof(a[0]));
QueryThreadCycleTime(thread_handle, &thread_cycle2);
std::cout << thread_cycle2 - thread_cycle1 << " cycles";
return 0;
}