Nehalem может выполнять 4 DP или 8 SP FLOP / цикл. Это достигается с помощью SSE, который работает с упакованными значениями с плавающей запятой, 2 / регистр в DP и 4 / регистр в SP. Для достижения 4 DP FLOP / цикл или 8 SP FLOP / цикл ядро должно выполнять 2 инструкции SSE за цикл. Это достигается путем выполнения MULDP и ADDDP (или MULSP и ADDSP) за цикл. Причина, по которой это возможно, заключается в том, что Nehalem имеет отдельные исполнительные блоки для SSE-умножения и SSE-сложения, и эти блоки конвейерные, так что throughput
- это одно умножение и одно добавление за цикл. Умножения находятся в конвейере умножителя для 4 циклов в SP и 5 циклов в DP. Добавления находятся в конвейере в течение 3 циклов независимо от SP / DP. Количество циклов в конвейере известно как latency
. Все, что вам нужно знать, чтобы вычислить пиковое значение FLOP / цикл, - это пропускная способность. Таким образом, при пропускной способности в 1 векторную инструкцию SSE / цикл как для умножителя, так и для сумматора (2 исполнительных блока) у вас есть 2 x 2 = 4 FLOP / цикл в DP и 2 x 4 = 8 FLOP / цикл в SP. Чтобы действительно поддерживать эту пиковую пропускную способность, вам необходимо учитывать задержку (чтобы у вас было как минимум столько же независимых операций в конвейере, сколько глубина конвейера), и вам нужно подумать о том, чтобы можно было подавать данные достаточно быстро. Nehalem имеет встроенный контроллер памяти, способный обеспечить очень высокую пропускную способность из памяти, чего он может достичь, если средство предварительной выборки данных правильно предвидит шаблон доступа к данным (последовательная загрузка из памяти - это тривиальный шаблон, который он может предвидеть). Как правило, пропускной способности памяти недостаточно для поддержки подачи данных на все ядра при пиковом FLOP / цикл, поэтому необходимо некоторое количество повторного использования данных из кеша для поддержания пикового FLOP / цикл.
Подробная информация о том, где можно найти информацию о количестве независимых исполнительных модулей, их пропускной способности и задержке в циклах, приведена ниже.
См. Стр. 105 8.9 Исполнительные единицы этого документа.
http://www.agner.org/optimize/microarchitecture.pdf
В нем говорится, что для Нехалема
Множитель с плавающей запятой на порту 0 имеет задержку 4 для одинарной точности и 5 для двойной и длинной двойной точности. Пропускная способность умножителя с плавающей запятой составляет 1 операцию за такт, за исключением длинной двойной точности на Core2. Сумматор с плавающей запятой подключен к порту 1. Он имеет задержку 3 и полностью конвейерный.
Чтобы получить 8 SP FLOP / цикл, вам нужно 4 SP ADD / цикл и 4 SP MUL / цикл. Сумматор и умножитель находятся на отдельных исполнительных модулях и отправляются из отдельных портов, каждый может одновременно выполнять 4 упакованных операнда SP с использованием упакованных (векторных) инструкций SSE (4x32 бит = 128 бит). Оба имеют пропускную способность 1 операцию за такт. Чтобы получить эту пропускную способность, вам необходимо учитывать задержку ... сколько циклов после выдачи инструкций, прежде чем вы сможете использовать результат ... поэтому вам нужно выпустить несколько независимых инструкций, чтобы покрыть задержку. У множителя с одинарной точностью задержка равна 4, а у сумматора - 3.
Вы можете найти те же значения пропускной способности и задержки для Nehalem в руководстве по оптимизации Intel, таблица C-15a.
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html
person
amdn
schedule
21.04.2014