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

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

Мне было интересно, каковы функциональные блоки моего процессора и каковы задержки? целочисленное сложение, целочисленное умножение, сложение одинарной точности, умножение одинарной точности и умножение двойной точности.

My CPU is AMD Ryzen 5 3600

Я проверил эти ссылки: https://www.amd.com/en/technologies/zen-core-3 https://en.wikichip.org/wiki/amd/microarchitectures/zen_3

но не смог найти ничего о функциональных блоках в моем процессоре или его задержках.

пример таблицы задержек из книги:

пример таблицы задержек из книги

Пример информации о функциональных блоках Intel Core i7 Haswell:

пример функциональных блоков в Intel Core i7 Haswell

Любая помощь приветствуется, спасибо! :)


person Megan Darcy    schedule 23.06.2021    source источник
comment
Я думаю, что все это будет в руководствах по процессорам, которые выпустят Intel и AMD, если они захотят включить эту информацию. Это не совсем то, что вы ищете, потому что он не относится к одному-единственному процессору, но это наиболее подробный документ об архитектуре Intel x86. Может быть, у вас есть полезная информация.   -  person wxz    schedule 23.06.2021
comment
В некоторых случаях эта информация является частной собственностью, но сторонний реверс-инжиниринг может дать хорошее предположение. Руководства по оптимизации Agner Fog являются одним из широко используемых источников; см. тома 3 и 4. Это также неявно присутствует в данных, созданных на uops.info, где В столбце «Порты» указано, какие функциональные блоки существуют и какие инструкции их используют.   -  person Nate Eldredge    schedule 23.06.2021
comment
(Я работал над некоторыми правками, когда вы приняли ответ; посмотрите, не видели ли вы последнее изменение; на данный момент я закончил его обновлять.)   -  person Peter Cordes    schedule 23.06.2021
comment
@NateEldredge да Агнера тоже неплохой справочник, спасибо!   -  person Megan Darcy    schedule 24.06.2021


Ответы (1)


Zen 3 - это всего лишь постепенное изменение по сравнению с Zen 2, поэтому Wikichip не повторял раздел с деталями архитектуры. См. https://en.wikichip.org/wiki/amd/microarchitectures/zen_2#Block_Diagram.

Что касается задержек, на https://uops.info/ вы можете увидеть, какие инструкции ALU являются однократными, а какие измеренные задержки равны. Если нет присущей обходной задержки как части единственного способа использования инструкции (например, возможно, в pmovmskb), это те же задержки, что и базовые функциональные блоки.


Для более ранних микроархитектур, включая Intel от Core 2 до Haswell и AMD K8 / K10 / Bulldozer, Дэвид Кантер написал несколько действительно хороших глубоких погружений в микроархитектуру.

Их чтение, особенно Сэнди-Бридж и Хасуэлл, будет полезно для понимания Дзен (потому что есть сходство). Но обратите внимание, что Zen может декодировать даже адресат памяти add [rdi], eax как единый интерфейсный uop, в отличие от Intel, где требуемые операции загрузки и сохранения - это отдельные uop, которые должны быть объединены в микросхему, чтобы протиснуться через интерфейс без использования дополнительной полосы пропускания. .

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


В вашей книге сказано, что Haswell имеет 8 функциональных единиц

Это не совсем так. Процессоры Intel группируют исполнительные блоки на разные порты, но это не означает, что все исполнительные блоки, подключенные к / через один порт, физически являются частью одного большого функционального блока или исполнительного блока.

Например, Энди Глю (один из архитекторов микроархитектуры Intel P6) прокомментировал Что такое ЕС в архитектуре x86? (вычисляет эффективный адрес?), говоря, что я не вдавался в сложность групп специализированных ЕС, совместно использующих начальные порты и порты завершения, не говоря уже о портах чтения и записи RF, гибких задержках и т. д., это было сложно достаточно, чтобы объяснить эти проблемы в руководстве разработчика компилятора Intel, когда я писал первую версию для P6 примерно в 1994 году.

Диаграммы Кантера для SnB и HSW на https://www.realworldtech.com/haswell-cpu/4/ показать это

введите описание изображения здесь

Например: порт 1 имеет три отдельных (группы) исполнительных модулей, подключенных через него:

  • Целочисленное ALU (включая поддержку трехцикловых операций с задержкой, таких как imul и popcnt, в отличие от целочисленного ALU на любом другом порту)
  • SIMD FP ALU, с FMA / MULPS / PD (полностью конвейерная задержка в 5 циклов) и отдельно ADDPS (задержка в 3 цикла). Они также конкурируют за порты обратной записи / завершения, поэтому расписание будет пытаться избежать запуска ADDPS на порту 1 через два цикла после MULPS.
  • Целочисленное ALU SIMD, включая blend, VPADDB и т. Д.

Эти три исполнительных модуля (или группы исполнительных модулей?) Являются частью отдельных доменов пересылки (следовательно, обходят задержку, если вы выполняете сдвиг целого числа SIMD на выходе SIMD-FP mulps, например, для извлечения поля экспоненты). Скорее всего, FP ALU физически близки к регистровому файлу FP, отдельно от целочисленных единиц. Наличие отдельных доменов также позволяет контролировать комбинаторный взрыв того, что может потребоваться пересылать, а также просто разветвление сигналов. (Если с одной и той же шины требуется считывать много данных, требуется более сильный сигнал, чтобы довести ее напряжение до логической 1 или логического 0 со всей емкостной нагрузкой.)

Skylake отказался от отдельного ALU SIMD-FP-add и просто запускает его на оборудовании FMA с той же задержкой, что и fma / mul. Вероятно, что добавление SIMD-FP было действительно отдельным исполнительным блоком в Haswell, а не просто другой конфигурацией блока FMA, иначе можно было бы ожидать, что они сделали бы это с блоками FMA на обоих портах 0 и 1. Но addps имеет пропускную способность только 1 / такт на Haswell. (Связано: Почему чип Intel Haswell позволяет выполнять умножение с плавающей запятой в два раза быстрее, чем сложение?)

Я не знаю, конкурирует ли целочисленное ALU на порту 1 с материалом SIMD за обратную запись. Возможно, нет, поскольку целое число и FP имеют разные файлы регистров. Тем не менее, им нужно пометить uop как выполняющийся в ROB (ReOrder Buffer), и ROB является унифицированным. (Uop может однако оставить RS (планировщик) вскоре после отправки в порт выполнения; ему не нужно ждать завершения, только для того, чтобы знать, что его данные действительно были готовы, как ожидалось, поэтому их не нужно воспроизводить Это может произойти, если он считывал результат загрузки, и оказалось, что загрузка не попала в кеш, поэтому не была готова с ожидаемой задержкой.)


К счастью, различие между портом и ЕС - в основном забавный факт.

Для повышения производительности вам действительно нужно знать цифры из https://uops.info/ и какие мопы соревнуются. для исполнения портов / модулей друг с другом. Не важно, используют ли addps и fma...ps одни и те же транзисторы. (И https://agner.org/optimize/ и руководства по оптимизации поставщиков, чтобы понять детали конвейера передавать работу этим исполнительным блокам и обходить задержки между ними.)

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

Skylake-X (поддерживающий AVX-512) имеет интересный эффект: когда 512-битные мопы находятся в полете, он отключает SIMD ALU на порту 1, соединяя их с 512-битным модулем FMA, который обрабатывает мопы с порта 0.

Но он не отключает целочисленные ALU: это единственное место, где popcnt / imul / lzcnt / slow-LEA может выполняться, и он все еще может запускать простые целочисленные данные с одним циклом. Это действительно наглядный пример того, как исполнительные блоки отделены от портов, а доступны просто через них.

(Многие процессоры Skylake-AVX512 имеют второй 512-битный блок FMA, подключенный к порту 5, они могут включаться для 512-битных мопов. Некоторые процессоры Xeon Bronze / Silver этого не делают. Ноутбук Ice Lake и чипы Rocket Lake этого не делают; 512- bit FP add / mul / FMA имеет пропускную способность 1 / такт вместо 1 на 0,5 такта. https://www.extremetech.com/computing/263963-intel-reverses-declares-skylake-x-cpus-two-avx-512-units есть небольшая статья о высокопроизводительных чипах для настольных ПК Skylake-X с описанием механизма.)

Агнер Фог также рассказал об этом порте 1 и о том, что в его руководство по микроархитектуре.

person Peter Cordes    schedule 23.06.2021