Как я могу найти время выполнения раздела моей программы в C? - PullRequest
16 голосов
/ 06 октября 2008

Я пытаюсь найти способ получить время выполнения части кода в C. Я уже пробовал time () и clock () из time.h, но похоже, что time () возвращает Секунды и часы (), кажется, дают мне миллисекунды (или центсекунды?) Я хотел бы что-то более точное, хотя. Есть ли способ, которым я могу захватить время с точностью до микросекунды?

Это нужно только для возможности компиляции в Linux.

Ответы [ 11 ]

0 голосов
/ 06 октября 2008

Если вы разрабатываете на x86 или x64, почему бы не использовать счетчик меток времени: RDTSC .

Это будет более надежным, чем функции Ansi C, такие как time () или clock (), поскольку RDTSC является атомарной функцией. Использование функций C для этой цели может создать проблемы, поскольку у вас нет гарантии, что поток, в котором они выполняются, не будет переключен, и в результате возвращаемое ими значение не будет точным описанием фактического времени выполнения, которое вы пытаетесь измерить. .

С RDTSC вы можете лучше измерить это. Вам нужно будет преобразовать счетчик тиков обратно в формат времени H: M: S, который будет читаться человеком, который будет зависеть от тактовой частоты процессора, но в Google все вокруг, и я уверен, что вы найдете примеры.

Однако даже при использовании RDTSC вы будете учитывать время, в течение которого ваш код был выключен, в то время как лучшее решение, чем использование time () / clock (), если вам нужно точное измерение, вам придется обратиться к профилировщику, который будет инструмент вашего кода и учитывать, когда ваш код на самом деле не выполняется из-за переключений контекста или что-то еще.

...