Затримка інструкцій щодо процесора на процесорах x86 та x64


14

Я шукаю таблицю або щось подібне, яке могло б допомогти мені обчислити ефективність збірного коду.

Як я знаю, зміна бітів займає 1 тактовий процесор, але я дійсно дивлюсь, скільки потрібно для додавання (віднімання повинно брати те саме), множення і як імовірно обчислити час ділення, якщо я знаю значення, які діляться.

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


Відповіді:


10

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

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

Можливо, ця таблиця буде корисною: http://www.agner.org/optimize/instruction_tables.pdf

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

Багато інструкцій x86 можуть пройти кілька циклів, щоб виконати деякі етапи, якщо вони складні (наприклад, команди REP або гірше MWAIT).


3
Множина цілого числа становить щонайменше 3с затримки на всіх останніх процесорах x86 (і вище на деяких старих процесорах). У багатьох процесорах це повністю конвеєрна схема, тому пропускна здатність дорівнює 1 за такт, але досягти цього ви зможете лише в тому випадку, якщо у вас є три незалежні множення в польоті. (FP помножити на Haswell - це 5с затримки, 0,5c пропускної здатності, тому вам потрібно 10 в польоті, щоб наситити пропускну здатність). Відділення ( divі idiv) ще гірше: воно мікрокодування і набагато більша затримка, ніж addабо shr, і навіть не повністю конвеєрна на будь-якому процесорі. Все це прямо з таблиць інструкцій Agner Fog, тому це добре, що ви пов’язали це.
Пітер Кордес


7

Розрахунок ефективності збірного коду - це не найкращий шлях, який можна пройти в ці дні Супер-скалярні трубопроводи без виконання. Він буде залежати від типу процесора. Це залежатиме від інструкцій як до, так і після (ви можете додати додатковий код та інколи швидше працювати!). Деякі операції (зокрема, підрозділ) можуть мати діапазон часу виконання навіть на старих більш передбачуваних чіпах. Насправді термін безлічі ітерацій - єдиний шлях.


Я це знаю, але мені це потрібно не в реальному проекті, а в одному виді веселого програмування.
ST3

Незалежно від того, чи потрібен він для реального чи для розваги, це не змінює відповідь на цю лінійку процесорів. Чи розглядали ви замість цього перехід на більш детермінований процесор, наприклад, мікросхему Propeller?
Брайан Ноблеуч

3
Навіть при скалярному передбаченні гілки впровадження порядку та помилках кешу може виникнути різниця у часі виконання.
Пол А. Клейтон

Що стосується суто пов'язаних з процесором речей (немає пропусків кеша, не передбачено помилок гілки), поведінка процесора розуміється досить детально, що статичний аналіз часто може передбачити майже точно, скільки циклів за ітерацію циклу буде потрібно для конкретного процесора (наприклад, Intel Haswell). наприклад, дивіться цю відповідь ТА, де дивлячись на створений компілятором ASM, дозвольте мені пояснити, чому версія гілки працює майже рівно в 1,5 рази швидше, ніж версія CMOV на процесорі Sandybridge OP, але набагато ближче на моєму Skylake.
Пітер Кордес

Якщо ви пишете asm від руки з міркувань продуктивності, то насправді корисно шукати затримки та вузькі місця на процесорах Intel та AMD. Це важко, хоча іноді те, що оптимально для AMD, не є оптимальним для Intel.
Пітер Кордес

4

Інформацію про Intel cpu можна знайти в посібниках для розробників програмного забезпечення intel . Наприклад, затримка становить 1 цикл для цілого додавання і 3 цикли для цілого множення.

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


Один цикл, за винятком випадків, коли він "вільний" (паралельно, коли трубопроводи вибудовуються правильно) або триває більше часу через пропуск кешу. :-)
Брайан Ноблеуч

2
На даний момент (2018 рік) ця інформація розміщена у Додатку С під назвою «Затримка інструкцій та пропускна здатність» документа 248966 «Посібник з оптимізації архітектури Intel® 64 та IA-32», також розміщена на сторінці, пов’язаній у відповіді
stefanct
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.