2010-11-05 2 views
4

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

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

ответ

1

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

+0

Только сама петля очень исказила результаты. –

+2

@Let_Me_Be Когда вы просто хотите узнать, какая версия вашего кода работает быстрее, я думаю, что она служит этой цели. Вы согласны? – frast

+0

@frast Да, но только если накладные расходы, созданные методом измерения, не искажают результаты, выходящие за пределы используемой точки. –

0

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

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

+0

да, это была бы хорошая идея, я постараюсь найти эту информацию elweshwere, – flow

0

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

+0

жалость Не понимаю сборки. во всяком случае, легко ли «видеть» только перевод на сборку одного единственного C-узла? – flow

4

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

+0

Я запускаю программу C под Linux на процессоре Cell. Для этого есть какой-то системный симулятор, но очень сложный для установки и понимания – flow

+0

@Werner: Cell не имеет SSE2 - это расширение x86 SIMD. Ячейка использует свой собственный набор уникальных векторных инструкций для SPE и AltiVec на основе PowerPC PPE - на кого вы пытаетесь написать код? –

+0

извините, да, вы совершенно правы. Jsut написал SSE2, потому что он похож на него и делает все ясно, я отредактирую это, спасибо – flow

Смежные вопросы