Приблизительное количество циклов ЦП для различных операций
Я пытаюсь найти ссылку приблизительно на то, сколько циклов ЦП требуют различные операции.
Мне не нужны точные цифры (поскольку это будет варьироваться в зависимости от процессоров), но я хотел бы что-то относительно достоверное, которое дает приблизительные цифры, которые я мог бы привести в обсуждении с друзьями.
В качестве примера, мы все знаем, что деление с плавающей запятой занимает больше циклов ЦП, чем, скажем, выполнение битового сдвига
Я предполагаю, что разница в том, что деление составляет около 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.
Вот исследование, проведенное Агнером Фогом:
- Таблицы с инструкциями
Таблицы инструкций: списки задержек инструкций, пропускной способности и сбоев микроопераций для процессоров Intel, AMD и VIA.
Последнее обновление 22.03.2021