Каков наибольший объем данных, которые одна инструкция x86 будет считывать или записывать в кэш L1?

Я только что прочитал AVX (Википедия), и у меня возник этот вопрос.


person OregonTrail    schedule 06.03.2014    source источник
comment
используя повтор, вы можете получить перевод довольно хорошего размера.   -  person old_timer    schedule 06.03.2014
comment
Инструкции string с префиксом REP могут передавать произвольно большие объемы данных. Отбросив это в сторону, 64-разрядные процессоры без AVX имеют CMPXCHG16B, что может вызвать в общей сложности 32 байта трафика (16 байтов чтения, 16 байтов записи). В AVX смещенное 32-байтовое хранилище может привести к чтению и записи двух строк кэша (CL). При сборе AVX2 можно было прочитать до 8 CL. Основные ЦП и более поздние версии имеют XSAVE, что может сохранять более 512 байтов состояния ЦП. Но окончательным победителем для меня является XEND от TSX, который в принципе может фиксировать или откатывать КБ данных без ощущения обмана строковых операций.   -  person Iwillnotexist Idonotexist    schedule 06.03.2014


Ответы (2)


Я не уверен, что ваш вопрос полностью ясен, но я думаю, вы спрашиваете, сколько данных может быть передано в кэш L1 или из него при выполнении одной инструкции x86?

Если да, то это какой-то некорректный вопрос. Структура кэша и даже кэширование как концепция не являются частью спецификации x86. Это означает, что ответ полностью зависит от базового оборудования. Если вы имеете в виду конкретный процессор, вы, вероятно, сможете найти ответ в техническом описании. Что вам нужно знать, так это размер блока кеша, поскольку менеджеры кеша любят записывать и читать целые блоки за раз. Однако в расширениях x86 (таких как AVX и SSE) есть инструкции, специально предназначенные для больших транзакций памяти, и они могут записывать или читать кэш столько, сколько требуется/удобно.

person Irisshpunk    schedule 06.03.2014
comment
Верно, в этом есть смысл, архитектура может меняться, но x86 — это просто спецификация ISA. Итак, если бы я задал вопрос, относящийся конкретно к Haswell, где я мог бы найти ответ? - person OregonTrail; 06.03.2014
comment
Я должен уточнить это: ISA расшифровывается как «Архитектура набора инструкций» и является архитектурой. Меняется реализация или микроархитектура. Что касается Haswell, это может быть то, что вы ищете: intel.com/content/www/us/en/processors/core/ - person Irisshpunk; 06.03.2014
comment
@OregonTrail, на самом деле в x86 есть способы взаимодействия с элементами микроархитектуры - инструкция wbinvd сделает недействительной всю иерархию кеша, что приведет к многократной записи измененных строк, хранящихся там, поэтому, вероятно, будет записано наибольшее количество данных. Однако кажется, что вам нужен максимально возможный фрагмент, который может передаваться между кешем и исполнительными модулями, который в Haswell должен составлять 256 байт, а будущие процессоры могут увеличиться до 512 (см. software.intel.com/en-us/blogs/2013/avx-512-instructions) - person Leeor; 06.03.2014
comment
@Leeor, ты поднимаешь отличный вопрос. Почти любая инструкция памяти может вызвать цепную реакцию событий когерентности кэша, которая может включать чтение и запись многих строк кэша. Да, мой вопрос касается передачи данных из конвейера выполнения в кеш и наоборот. - person OregonTrail; 06.03.2014

Вы никогда не читаете и не записываете в какой-либо уровень кэша явно, но при любой разумной интерпретации того, что вы имеете в виду, мне кажется, что если вы читаете из L1$, значение считывается в регистр, и если вы при записи в L1$ значение записывается из регистра, поэтому для всех практических целей основным ответом всегда будет «размер регистра, который вы используете» в качестве источника/назначения для рассматриваемой архитектурной инструкции.

На самом деле все немного сложнее, потому что зависит от ширины пути между MOB (буфер порядка памяти) и L1$, что является особенностью конкретной микроархитектуры. Недавно процессоры Intel (например, Core, Nehalem) имели 128-битные пути от MOB к L1$, но я не знаю, увеличили ли самые последние (например, Haswell) это до 256-бит, чтобы соответствовать размеру регистра AVX. Это одна из возможностей. Во-вторых, одно архитектурное хранилище 256-битного регистра AVX может декодироваться в две 128-битные µops (микрооперации) на бэкенде. Последнее кажется более вероятным для Sandy и Ivy Bridge из-за «двойного» использования двух 128-битных исполнительных блоков для выполнения 256-битных операций AVX. Я недостаточно знаю микроархитектуру Haswell, чтобы размышлять о том, что она может делать.

person Emmet    schedule 06.03.2014
comment
stackoverflow.com/tags/x86/info содержит ссылки с ответами на ваши вопросы по микроархитектуре. (особенно рецензии Дэвида Кантера для Sandybridge и Haswell). SnB/IvB имеют AVX, но все еще только 128-битные пути к L1D$. 256b операции загрузки являются одной операцией для портов 2 или 3, но занимают ее в течение двух циклов. Нет выделенного порта для адреса магазина (до Haswell). Хранилища (как обычно, декодированные в одно для каждого uop store-data и store-address) могут запускать uop store-address на p2 или p3 даже во время 2-го цикла загрузки 256b. Таким образом, максимальная пропускная способность (2x 128b загрузка, 1x 128b хранилище) достигается только при операциях 256b. - person Peter Cordes; 29.01.2016
comment
Максимальная пропускная способность SnB на практике не достигается, потому что при такой пропускной способности конфликты банков кэша почти неизбежны. Haswell — это большой шаг вперед: 256-битный путь к L1, отсутствие конфликтов кэш-банков и отдельный порт для хранения адресов (хотя он может обрабатывать только однорегистровые режимы адресации). Однако большая часть кода по-прежнему привязана к L2/L3 или DRAM. - person Peter Cordes; 29.01.2016
comment
В любом случае, +1 за ответ на вопрос, сколько данных в одном вопросе uop, что больше похоже на то, что имел в виду OP, чем на одну инструкцию x86. - person Peter Cordes; 29.01.2016