Какой максимально возможный IPC может быть достигнут с помощью микроархитектуры Intel Nehalem?

Существует ли оценка максимального числа инструкций за цикл, достижимая архитектурой Intel Nehalem? Кроме того, что является узким местом, которое влияет на максимальное количество инструкций за цикл?

Я открыт для любых комментариев.

Спасибо

1 ответ

Решение

TL: DR: 5 insns за часы, где один из них является test или же cmp который может слиться с jcc,


Источник: микроарх Agner Fog pdf и таблицы с инструкциями. Также см. Тег x86 вики.

В конвейере Intel Core2 и более поздних версиях выходящий из строя конвейер может выдавать / переименовывать 4 мопа слитых доменов за такт. Это узкое место. Макро-фьюжн объединит cmp / jcc в один моп, но это может произойти только один раз для каждого блока декодирования. (До Haswell).

Даже если бы вы могли расположить так, чтобы в цикле было более одной пары с макросами на 4 мопа, Nehalem имеет пропускную способность только одного слияния с тестированием и ветвью за такт (порт 5). Таким образом, он не может выдержать более одного слитого макросом сравнения и ветвления за такт, даже если некоторые из них не взяты. (Haswell может запускать незанятые ветви на порту 0 или 6).

;; Should run at one iteration per clock.
.l:
    mov   edx, [rsi]    ; doesn't need an ALU uop.  nop would work here, too
    add   eax, edx
    inc   rsi
    cmp   rsi, rdi
    jb   .l

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

Обратите внимание, что у pre-Haswell uarches есть только три порта ALU. mov нагрузки или хранилища занимают полосу пропускания конвейера, поэтому есть преимущество в том, чтобы иметь возможность переименовывать / переименовывать по всей ширине. Для внешнего интерфейса также полезно иметь возможность выдавать быстрее, чем может выполнить ядро, вышедшее из строя, поэтому в планировщике всегда есть буфер работы для постановки в очередь, поэтому он может найти параллелизм на уровне команд и начать работу с будущими нагрузками рано, и все в таком духе.

Я думаю, кроме загрузки / хранения (в том числе push / pop благодаря стековому движку), nop а также fxchg являются единственными мопами слитых доменов, которым не нужен порт ALU в Nehalem. На SnB-семью уарчах, xor same,same также обрабатывается на этапе переименования / выпуска, а иногда и reg-reg mov с (IvB и позже).

Другие вопросы по тегам