Влияет ли предварительная выборка на запись на одноядерную производительность?

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


person Joseph Garvin    schedule 22.08.2012    source источник


Ответы (2)


При прочих равных условиях Prefetch-Write не имеет преимуществ перед Prefetch-Read для строк, к которым имеет доступ только одно ядро. После любой предварительной выборки ядро ​​будет владеть линией в состоянии Эксклюзивное. При последующей записи строка переходит в состояние Изменено. Переход от эксклюзивного к измененному является бесплатным, поскольку по определению ни одно другое ядро ​​не имеет этой линии. Изменение состояния E-> M завершается локально без отслеживания.

Помните, что у ядер есть собственная логика аппаратной предварительной выборки. Доступ к линии может привести к тому, что ядро ​​автоматически захватит соседнюю линию (и). Если рядом находятся глобальные переменные или другие данные, система SMP может испытывать множество неожиданных перекрестных проверок.

person srking    schedule 22.08.2012

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

Или я что-то принципиальное упустил?

person Olof Forshell    schedule 09.09.2012
comment
Итак, вы говорите, что, поскольку предварительная выборка записи также будет действовать как обычная предварительная выборка, это может помочь? Возможно, вы правы. - person Joseph Garvin; 11.09.2012
comment
Все, что происходит между ЦП и ОЗУ, должно происходить через строку кэша. Если соответствующая строка кэша не загружена, то чтение или запись должны будут подождать, пока она не загрузится. - person Olof Forshell; 12.09.2012