Какой максимально возможный 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 и позже).