я измерение физического времени между двумя событиями, как это:логического времени по сравнению с физическим временем в Ubuntu Linux
#include <time.h>
#include <sys/time.h>
timeval wall_time0;
timeval wall_time1;
// start of period measurement
gettimeofday(&wall_time0 , 0);
...stuff happening
// end of period measurement
gettimeofday(&wall_time1 , 0);
return ((wall_time1.tv_sec - wall_time0.tv_sec) + ((wall_time1.tv_usec - wall_time0.tv_usec)/(double)1000000));
Но сейчас, мне нужен способ измерения логического времени, что нить на самом деле использует. То есть теоретически это должно быть физическое время, меньше времени, затрачиваемого на запуск других потоков и/или системной логики ядра &.
Я думал это был способ сделать это:
clock_t mTime0;
clock_t mTime1;
//start of period measurement
mTime0=clock();
... stuff happening
//end of period measurement
mTime1=clock();
return (mTime1-mTime0)/(double)CLOCKS_PER_SEC;
но делать несколько измерений, я заметил две проблемы:
1) для некоторых измерений она больше чем физическая (т. е. для определенной петли, физическое время будет 0,2495 .. и «логическое» (измеренное с помощью clock()) будет 0,27, для меньших измерений оно будет округлено до нуля, что приведет к второй выпуск ...)
2) результирующее время кажется намного более грубым, чем одно возвращение gettimeofday
Есть ли лучший способ измерения времени локальной потоки в Linux?
, похоже, что это решение также не является полным; по-видимому, результат от rusage не будет иметь новое значение до некоторого времени (я предполагаю, что он не получит новое значение до следующего переключения подкачки контекста). Если это предположение является допустимым, значит, нужно выполнить хамкаунд, сохранять физическое время каждый раз при изменении логического времени, то до тех пор, пока логическое время не будет изменено, нужно добавить временную дельту физического времени с момента последнего изменения. И, вероятно, это не совсем точно, так как я не знаю, как далеко до последнего обмена контекстом. Время, чтобы взять это в список рассылки linux – lurscher
, я также пробовал с 'clock_gettime', и результат был чем-то промежуточным между результатами' getrusage' и результатами 'gettimeofday', и поскольку мы в конечном счете после надежной контрольной метрики, Я не уверен, что любой вариант лучше, чем другой, но ... http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/ – lurscher