J'ai besoin de mettre en œuvre une méthode qui permet de mesurer le temps et les cycles CPU de changement de contexte entre les threads dans Windows.Mesure ContextSwitch Time C (Windows)
Voici mon code
#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;
}
Note: La division par deux, parce que j'ai deux changement de contexte entre initialTimeStamp et finalTimeStamp.
Je ne sais pas si c'est la meilleure ou la meilleure façon de le faire ... J'ai un temps différent à chaque exécution, ce qui n'est pas ce à quoi je m'attendais. Je ne suis pas sûr de savoir comment obtenir un certain nombre de cycles CPU.
En remplaçant SwitchToThread() à Sleep (0) va résoudre ceci ou pas? Il doit y avoir un moyen d'obtenir un temps approximatif. – aumanets