Приблизительное количество циклов ЦП для различных операций

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

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

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

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

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

4 ответа

Я сделал небольшое приложение, чтобы проверить это. Очень приблизительное приложение, использующее бесплатное издание 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, так и base для скорости звука, например, составляет около 800 циклов, поэтому я бы сказал, что вышеупомянутые цифры близки по крайней мере к 50 процентам. Я думал, что разрыв был намного больше! Кажется, в два раза больше. Если вы хотите, чтобы файл, который я сделал для запуска в бесплатной версии SM, отправили мне по почте, я собирался сохранить exe, поэтому я сделал это, но вы не можете сохранить его в бесплатной версии, глупый я! Я не собираюсь кодировать его с нуля в версии 1.17:/ ant.stewart в месте yahoo dotty com.

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

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

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

Тест будет примерно таким:

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

Вот исследование, проведенное Агнером Фогом:

  1. Таблицы с инструкциями

Таблицы инструкций: списки задержек инструкций, пропускной способности и сбоев микроопераций для процессоров Intel, AMD и VIA.

Последнее обновление 22.03.2021

Другие вопросы по тегам