12

Я ищу какую-то таблицу или что-то подобное, что может помочь мне рассчитать эффективность кода сборки.

Как я знаю, для сдвига битов требуется 1 такт процессора, но я действительно смотрю, сколько нужно сложения (вычитание должно занимать то же самое), умножения и как предположительно рассчитать время деления, если я знаю значения, которые делятся.

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

3 ответа3

9

В общем, каждая из этих операций также выполняет один тактовый цикл, если аргументы находятся в регистрах на разных этапах конвейера.

Что вы подразумеваете под латентностью? Сколько циклов проводит операция в АЛУ?

Вы можете найти эту таблицу полезной:http://www.agner.org/optimize/instruction_tables.pdf

Поскольку современные процессоры являются суперскалярными и могут работать не по порядку, вы можете получить общее количество команд за цикл, превышающее 1. Аргументы для макрокоманды являются наиболее важными, но операция также имеет значение, поскольку деление занимает больше времени, чем XOR (<1 задержка цикла).

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

6

Вычисление эффективности кода сборки - не лучший путь в наши дни для конвейеров Super Scalar. Это будет зависеть от типа процессора. Это будет зависеть от инструкций как до, так и после (вы можете добавить дополнительный код и иногда запускать его быстрее!). Некоторые операции (особенно деление) могут иметь диапазон времени выполнения даже на более старых и более предсказуемых чипах. На самом деле синхронизация большого количества итераций - единственный путь.

4

Вы можете найти информацию о процессоре Intel в руководствах для разработчиков программного обеспечения Intel. Например, задержка составляет 1 цикл для сложения целых чисел и 3 цикла для умножения целых чисел.

Я не знаю о умножении, но я ожидаю, что сложение всегда займет один цикл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .