x86 - это , а не словесно-ориентированная архитектура.Инструкции переменной длины без выравнивания.
«Размер слова» не является значимым термином в x86 ;некоторые люди могут использовать его для ссылки на ширину регистра, но выборка / декодирование инструкций не имеет ничего общего с целочисленными регистрами.
На практике на большинстве современных процессоров x86 выборка инструкций из кэша инструкций L1 происходит в выровненном16-байтовые или 32-байтовые блоки выборки.Более поздние этапы конвейера находят границы команд и декодируют до 5 команд параллельно (например, Skylake).См. запись Дэвида Кантера о Haswell для блок-схемы внешнего интерфейса, показывающей 16-байтовую выборку команд из кэша L1i.
Но обратите внимание, что современные процессоры x86 также используют декодированныйКэш-память, поэтому им не приходится иметь дело с трудным для декодирования машинным кодом x86 для кода, который выполняется очень часто (например, внутри цикла, даже большого цикла).Работа с невыровненными инструкциями переменной длины является существенным узким местом на старых процессорах.
См. Может ли современное оборудование x86 не хранить один байт в памяти? для получения дополнительной информации о том, как кэш поглощаетсохраняет в обычные области памяти (MTRR и / или PAT установлены на WB = тип памяти с обратной записью).
Логика, которая фиксирует хранилища из буфера хранилища в кэш данных L1 на современных процессорах Intel, обрабатывает любое хранилище любогоwidth до тех пор, пока он полностью содержится в одной 64-байтовой строке кэша.
Процессоры, отличные от x86, более ориентированные на слова (например, ARM), обычно используют чтение-изменение-запись кеша слова (4 или 8 байт) для обработки узких хранилищ.См. Существуют ли какие-либо современные процессоры, в которых хранилище кэшированных байтов на самом деле медленнее, чем хранилище слов? Но современные процессоры x86 расходуют транзисторы на то, чтобы сделать кэшированные хранилища байтов или невыровненные более широкие хранилища такими же эффективными, как и выровненные 8-байтовые.сохраняет в кеш.
с учетом ширины шины данных, равной ширине 64 бита
В современном x86 встроены контроллеры памяти, встроенные в ЦП.Эта шина DDR [1234] SDRAM имеет 64 строки данных, но одна команда чтения или записи инициирует пакет из 8 передач, передавая 64 байтов данных.(Не случайно 64 байта - это размер строки кэша для всех существующих процессоров x86.)
Для хранилища в области без кэширования (т. Е. Если процессор сконфигурирован для обработки этого адреса как не кэшируемого, даже если он поддерживаетсяDRAM), однобайтовое или другое узкое хранилище возможно с использованием сигналов байтовой маски DQM , которые сообщают памяти DRAM, какой из 8 байтов фактически должен быть сохранен из этой пакетной передачи.
(или, если это не поддерживается (что может иметь место) , контроллеру памяти, возможно, придется прочитать старое содержимое и объединить, а затем сохранить всю строку. В любом случае, 4-байтовый или 8-байтные куски не значимая единица здесь. Передача пакета DDR может быть сокращена, но только до 32 байтов по сравнению с 64. Я не думаю, что 8-байтовая выровненная запись на самом деле очень особенная для DRAMуровень гарантированно будет «атомарным» в ISA x86, хотя даже в не кэшируемых регионах MMIO.)
Сохранение в не кэшируемый регион MMIO приведет к PCIeтранзакция соответствующего размера, до 64 байт.
Внутри ядра ЦП шина между кешем данных и исполнительными блоками может иметь ширину 32 или 64 байта.(Или 16 байтов на текущем AMD).Передача строк кеша между L1d и L2 кешем также осуществляется по шине шириной 64 байта в Haswell и более поздних версиях.