Современные процессоры обычно имеют буферы записи. Причина в том, что записи в первом приближении являются чистыми поглотителями. Обычно процессору не приходится ждать, пока магазин достигнет иерархии согласованной памяти, прежде чем он выполнит следующую команду.
(За исключением:. Очевидно, магазины не чистые раковины Позже чтения из написанного к ячейке памяти должна вернуть записанное значение, так что процессор должен подглядывать от записи буфера, и либо срыв чтения или переслать записанное значение)
Очевидно, что такой буфер (ы) имеет конечный размер, поэтому, когда буферы заполнены, следующий магазин в программе не может быть выполнен и останавливается, пока слот в буфере не станет доступным старый магазин становится архитектурно видимым.
Как правило, путь записи оставляет буфер, когда значение записывается в кеш (поскольку многие записи действительно быстро читаются, подумайте о стеке программы в качестве примера). Если запись только устанавливает часть кешины, остальная часть кешины должна оставаться неизменной, поэтому, следовательно, она должна быть загружена из иерархии памяти.
Есть способы, чтобы избежать загрузок старого cacheline, как не-временных магазины, пишет комбинирование памяти или cacheline-обнуление инструкции.
Невременные хранилища и память для записи объединяют смежные записи для заполнения всей строки в кеше, отправляя новую иерархию памяти в иерархию памяти, чтобы заменить старую.
POWER имеет инструкцию, которая обнуляет полную кеглину (dcbz
), что также снимает необходимость загрузки старого значения из памяти.
x86 с AVX512 имеет cacheline размера регистров, что свидетельствует о том, что выравниваются zmm
-зарегистрироваться магазин мог избежать загрузки старого cacheline (хотя я не знаю, делает ли это).
Обратите внимание, что многие из этих методов не согласуются с обычным порядком памяти соответствующих процессорных архитектур. Использование их может потребовать дополнительных ограждений/барьеров в многопоточной работе.
Если вы насыщаете свой буфер записи с помощью записи в частичные кегли, вы останавливаетесь до тех пор, пока строки кэша не будут введены из памяти. Возможно, вам удастся избежать этого, используя невременные хранилища и/или всегда записывая полные кегли. – EOF
Это звучит как «Ответ» на меня, EOF ... Что вы подразумеваете под «не временными магазинами» и т. Д. Похоже, у вас есть что сказать. **: -) ** –