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

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

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

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

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

Может кто посоветует такой ресурс?


person colordot    schedule 23.04.2010    source источник


Ответы (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.

person ant grobbelar    schedule 24.04.2011
comment
Почему MULT примерно с той же задержкой, что и ADD? Я слышал, что целочисленное MULT обычно в 3 раза медленнее, чем ADD в современных процессорах. Однако MULT с плавающей запятой может иметь ту же скорость, что и ADD с плавающей запятой. - person adieux; 27.02.2020

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

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

person nos    schedule 23.04.2010

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

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

  • Запустите примитивную операцию миллион раз (скажем, сложите два целых числа)
  • Запишите время, которое потребовалось для запуска (скажем, в секундах)
  • Умножьте на количество циклов, которые ваша машина выполняет в секунду — это даст вам общее количество затраченных циклов.
  • Разделите 1000000 на число из предыдущего шага — это даст вам количество инструкций за цикл. Имейте в виду, что при конвейерной обработке это может быть меньше 1.
person danben    schedule 23.04.2010
comment
Как вы можете исключить время, затрачиваемое на выполнение 1 000 000 циклов, и выделение регистров, используемое для хранения количества раз, предсказания переходов и т. д.? - person SOFe; 16.03.2018

Существует исследование, проведенное Agner Fog:

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

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

Последнее обновление 2021-03-22

person Dmytro Ovdiienko    schedule 27.04.2021