Измерение времени контекста C (Windows) - PullRequest
1 голос
/ 27 сентября 2010

Мне нужно реализовать метод, который может измерять время и циклы процессора переключения контекста между потоками в Windows.

Вот мой код

#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;
}

Примечание: деление на два, потому что у меня есть два переключения контекста между initialTimeStamp и finalTimeStamp.

Я не знаю, является ли это лучшим или правильным способом сделать это ... Я получаю разное время на каждое выполнение, а это не то, чего я ожидал. Я не уверен, как получить количество циклов процессора.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

У вас на самом деле должен быть поток, который записывает циклы ЦП, чтобы SwitchToThread () действительно переключал контекст.Более одного, если ваш процессор имеет несколько ядер.Даже тогда результат, который вы получите, в значительной степени не имеет смысла.Объем служебных данных сильно варьируется в зависимости от процесса, которому принадлежит поток, который получает квант, и состояния кэша TLB.Перезагрузка регистров TLB и получение пропусков кэша добавляет много времени.Обычное число составляет от 2000 до 10000 циклов.

1 голос
/ 27 сентября 2010

Вы получаете разные времена, потому что производительность компьютера очень изменчива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...