Как измерить циклы ЦП на инструкцию в программе на С - PullRequest
4 голосов
/ 05 ноября 2010

У меня есть программа на C, в которой я начинаю использовать некоторые SIMD-оптимизации для SPE (процессор Cell) и т. Д. Я хотел бы как-то «рассчитать», сколько циклов им нужно.Одна идея состоит в том, чтобы включать / выключать и измерять все время выполнения.Но это медленно.Я также могу добавить между и перед выполнением gettimeofday (& start, NULL) и так далее, но я думаю, что они точны только тогда, когда каждый справляется более чем за миллисекунды.

Интересно, можно ли эффективно измерить наносекунды на инструкцию или просто циклы ЦП или какую-то другую точную временную меру?

Ответы [ 4 ]

4 голосов
/ 05 ноября 2010

В зависимости от вашего процессора вы можете получить регистры производительности внутри самого процессора, которые отслеживают такты команд и многие другие полезные вещи.Профилировщики и другие служебные программы производительности могут делать это, поэтому это также должно быть возможно из пользовательского кода.В Mac OS XI использовалась бы структура Apple CHUD, но вы не указали, какую ОС или ЦП вы используете, поэтому сложно дать конкретные рекомендации.

1 голос
/ 05 ноября 2010

Выполните проверяемый код в цикле и разделите время, которое требуется с помощью счетчика цикла.Используемый таймер не должен иметь высокое разрешение для измерения правильных значений.

0 голосов
/ 05 ноября 2010

Как парень не из Си ... я думаю, вам нужно посмотреть код сборки и перейти оттуда.Единственная проблема в том, что одна инструкция может занять 1 или 100000 тактов процессора, в зависимости от того, какой процессор у вас установлен.

0 голосов
/ 05 ноября 2010

Нано секунд не хватит для этого. Вам нужны пикосекунды.

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

...