Литература по когерентности кэша обычно относится только к буферам хранилища, но не к буферам чтения.И все же как-то нужны оба? - PullRequest
3 голосов
/ 09 мая 2019

Читая о моделях согласованности (а именно о TSO x86), авторы обычно прибегают к моделям, в которых есть несколько процессоров, связанные с ними буферы хранения и их частные кэши.

Если мое понимание верно, буферы хранилища могут быть описаны как очереди, в которые ЦП могут помещать любые инструкции хранилища, которые они хотят зафиксировать, в память. Итак, как следует из названия, они являются store буферами.

Но когда я читаю эти бумаги, они склонны говорить о взаимодействии нагрузок и хранилищ, с такими утверждениями, как «более поздняя загрузка может пройти более раннюю хранилище», что немного сбивает с толку, поскольку они почти кажутся говорящими, как будто в буфере хранения будет как загрузка, так и хранилище, если нет - верно?

Таким образом, должно быть также хранилище загрузки, о котором они (по крайней мере, явно) не говорят. Плюс, эти два должны быть как-то синхронизированы, чтобы оба знали, когда допустимо загрузить из памяти и зафиксировать в памяти - или я что-то упустил?

Кто-нибудь может пролить немного света на это?

EDIT:

Давайте рассмотрим абзац из раздела «Учебник по согласованности памяти и согласованности кэша»:

Чтобы понять реализацию атомных RMW в TSO, мы рассмотрим RMW в качестве груза сразу же следует за магазином. Нагрузочная часть RMW не может пропускать более ранние грузы из-за правил заказа TSO. Это на первый взгляд может показаться, что нагрузочная часть RMW может пройти раньше сохраняет в буфере записи, но это не разрешено законом. Если часть нагрузки RMW передает более ранний магазин, тогда часть магазина RMW будет Также необходимо передать более раннее хранилище, потому что RMW является атомной парой. Но поскольку магазины не могут передавать друг другу в TSO, нагрузка часть RMW также не может передать более раннее хранилище

точнее,

Загрузочная часть RMW не может выдерживать более ранние нагрузки из-за правил заказа TSO. На первый взгляд может показаться, что загружаемая часть RMW может передать ранее сохраненные данные в буфер записи

поэтому они ссылаются на нагрузки / хранилища, пересекающие друг друга в буфере записи (что, как я полагаю, совпадает с буфером хранилища?)

Спасибо

1 Ответ

4 голосов
/ 09 мая 2019

Да, буфер записи = буфер хранилища.

Они говорят о том, был ли атомарный RMW разделен на отдельную загрузку и сохранение, а буфер хранилища задержал другое хранилище (на отдельный адрес), так чтоэто было после загрузки, но все еще перед хранилищем.

Очевидно, что это сделало бы его неатомарным и нарушило бы требование, что все операции x86 с атомарным RMW также являются полными барьерами.(Префикс lock также подразумевает, что это тоже.)

Обычно читателю было бы трудно обнаружить это, но если бы «отдельный адрес» был смежным с атомным RMW, то, например, хранилище слов +RMW dword может быть замечен другим потоком, выполняющим 64-битную загрузку qword обоих как одну атомарную операцию.


re: вопрос заголовка:

Буферы загрузки не вызываютпереназначения.Они ждут данных, которые еще не прибыли;загрузка завершает «выполнение», когда она читает данные.

Буферы хранилища принципиально отличаются;они хранят данные в течение некоторого времени, прежде чем они становятся глобально видимыми.

Модель памяти TSO x86 может быть описана как последовательная согласованность + буфер хранилища (с пересылкой хранилища).См. Также x86 mfence и C ++ барьер памяти и комментарии к этому ответу для дальнейшего обсуждения того факта, что простое разрешение переупорядочения StoreLoad является , а не достаточным описанием для случаев, когда поток перезагружает данные, которые онтолько что сохраненный, особенно если загрузка частично перекрывается с недавними хранилищами, поэтому HW объединяет данные из буфера хранилища с данными из L1d, чтобы завершить загрузку до того, как хранилище станет глобально видимым.

Также обратите вниманиечто процессоры x86 спекулятивно переупорядочивают нагрузки (по крайней мере, это делает Intel), но сбивают неправильные спекуляции, чтобы сохранить модель памяти TSO без переупорядочения LoadLoad или LoadStore.Таким образом, процессоры должны отслеживать нагрузки по сравнению с упорядочением магазина.Intel называет объединенную структуру отслеживания хранилища и загрузки буфера «буфером порядка памяти» (MOB). См. Размер буферов магазина на оборудовании Intel?Что именно является буфером хранилища? для большего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...