Я ищу какую-то таблицу или что-то подобное, что может помочь мне рассчитать эффективность кода сборки.
Как я знаю, сдвиг бит занимает 1 такт процессора, но я действительно смотрю, сколько нужно сложения (вычитание должно быть одинаковым), умножения и как предположительно рассчитать время деления, если я знаю значения, которые делятся.
Мне действительно нужна информация о целочисленных значениях, но приветствуется также время выполнения с плавающей запятой.
Ответы:
В общем, каждая из этих операций также выполняет один тактовый цикл, если аргументы находятся в регистрах на различных этапах конвейера.
Что вы подразумеваете под латентностью? Сколько циклов проводит операция в АЛУ?
Вы можете найти эту таблицу полезной: http://www.agner.org/optimize/instruction_tables.pdf
Поскольку современные процессоры являются суперскалярными и могут выполняться не по порядку, часто можно получить общее количество команд за цикл, превышающее 1. Аргументы для макрокоманды являются наиболее важными, но операция также имеет значение, поскольку деление занимает больше времени, чем XOR (<1 задержка цикла).
Многие инструкции x86 могут проходить несколько циклов, если они сложны (например, команды REP или MWAIT хуже).
источник
div
иidiv
) еще хуже: оно микрокодируется и имеет гораздо большую задержку, чемadd
илиshr
, и даже не полностью конвейеризовано на любом процессоре. Все это прямо из таблиц инструкций Агнера Фога, так что хорошо, что вы связали это.Вычисление эффективности кода сборки - не лучший путь в наши дни для конвейеров Super Scalar. Это будет зависеть от типа процессора. Это зависит от инструкций как до, так и после (вы можете добавить дополнительный код и иногда запускать его быстрее!). Некоторые операции (особенно деление) могут иметь диапазон времени выполнения даже на более старых и более предсказуемых чипах. На самом деле синхронизация большого количества итераций - единственный путь.
источник
Вы можете найти информацию о процессоре Intel в руководствах для разработчиков программного обеспечения Intel . Например, задержка составляет 1 цикл для сложения целых чисел и 3 цикла для умножения целых чисел.
Я не знаю о умножении, но я ожидаю, что сложение всегда займет один цикл.
источник