Приблизительное количество циклов ЦП для различных операций - PullRequest
10 голосов
/ 24 апреля 2010

Я пытаюсь найти примерную информацию о том, сколько циклов ЦП требуют различные операции.

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

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

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

Кто-нибудь может порекомендовать такой ресурс?

Ответы [ 3 ]

4 голосов
/ 24 апреля 2011

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

  divide|e:115|10
    mult|e: 48|10
     add|e: 48|10
    subs|e: 50|10
compare>|e: 50|10
     sin|e:135:10

Показания в анализаторе циклов сильно варьируются от 50 до 100, как правило, на единицу или вдвое больше ожидаемого значения, это цифры, представляющие средние значения, анализатор циклов является очень грубым инструментом, но он дает справедливые результаты, обходной путь пользователя например, показатель экспоненты, закодированный в ASM, который вычисляет как exp, так и основание при скорости звука, составляет около 800 циклов, поэтому я бы сказал, что приведенные выше значения близки по крайней мере к 50 процентам. Я думал, что разрыв был намного больше! Кажется, в два раза больше. Если вы хотите, чтобы файл, который я сделал для запуска в бесплатной версии SM, отправили мне по почте, я собирался сохранить exe, поэтому я сделал это, но вы не можете сохранить его в бесплатной версии, глупый я! Я не собираюсь кодировать его с нуля в версии 1.17: / ant.stewart на месте Yahoo Дотти ком.

3 голосов
/ 24 апреля 2010

Для процессоров x86 см. Справочное руководство по оптимизации архитектур Intel® 64 и IA-32 , возможно, Приложение C.

Однако не так просто определить, сколько циклов занимает инструкция для выполнения на современном процессоре x86, так как это слишком сильно зависит, например, от доступ к данным в кеше, согласованный доступ, сбой прогнозирования ветвлений, остановка в конвейере команд и многое другое.

1 голос
/ 24 апреля 2010

Это будет зависеть от оборудования. Лучше всего выполнить несколько тестов на конкретном оборудовании, которое вы хотите протестировать.

Тест будет выглядеть примерно так:

  • Выполнить примитивную операцию миллион раз (скажем, добавив два целых числа)
  • Запишите время, необходимое для запуска (скажем, в секундах)
  • Умножьте на количество циклов, которые ваша машина выполняет в секунду - это даст вам общее количество потраченных циклов.
  • Разделите 1000000 на число из предыдущего шага - это даст вам количество инструкций за цикл. Имейте в виду, что при конвейерной обработке это может быть меньше 1.
...