Windowsのスレッド間のコンテキストスイッチの時間とCPUサイクルを測定できるメソッドを実装する必要があります。
これが私のコードです
#include <stdio.h>
#include <windows.h>
#include <time.h>
LARGE_INTEGER initialTimeStamp, finalTimeStamp, freq;
DWORD ThreadProc(LPVOID lpdwThreadParam)
{
SwitchToThread();
return 0;
}
int main()
{
int result;
HANDLE hThread;
QueryPerformanceFrequency(&freq);
hThread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)ThreadProc,NULL, 0, 0);
QueryPerformanceCounter(&initialTimeStamp);
SwitchToThread();
QueryPerformanceCounter(&finalTimeStamp);
result = (1000000 * ((finalTimeStamp.QuadPart - initialTimeStamp.QuadPart) / 2 ) / freq.QuadPart);
printf("Windows Thread - context switch time is %u ns\n", result);
WaitForSingleObject(hThread, INFINITE);
return 0;
}
注:2で割るのは、initialTimeStampとfinalTimeStampの間に2つのコンテキストスイッチがあるためです。
これが最善の方法なのか正しい方法なのかわかりません...実行ごとに異なる時間が発生しますが、これは私が期待していたことではありません。CPUサイクル数を取得する方法がわかりません。