Имеет ли значение локальность памяти для записи? - PullRequest
1 голос
/ 13 декабря 2011

Если я записываю значения в память, а не читаю их снова, это оказывает какое-либо влияние на производительность, если области памяти не являются смежными? (т.е. не в кеше записи)

Может ли процессор записывать их в память в фоновом режиме, когда у него есть такая возможность, или это вызывает проблемы с кешем?

1 Ответ

4 голосов
/ 21 февраля 2012

Большинство кешей в процессорах, с которыми были знакомы, имеют обратную запись, что означает, что записи не распространяются на следующий уровень иерархии памяти до тех пор, пока не возникнет конкуренция за пространство кеша, и что-то должно быть очищено. Если вы делаете одну случайную запись, вы вряд ли увидите какое-либо влияние на производительность, но если вы сделаете непрерывную случайную запись, вы обнаружите, что ее производительность будет значительно ниже, чем при последовательной записи.

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

Я бы порекомендовал написать собственную программу для проверки этого. Выделите память намного больше, чем ваш кэш последнего уровня, и время одинакового числа случайных и последовательных 32-битных записей. Могу поспорить, вы найдете случайные записи где-то между 1/8 и 1/4 так же быстро, как и последовательные.

Другим фактором для ВАС является относительный баланс случайных записей в другие вычисления, которые не обращаются к памяти. Если они редки, да, они покраснеют в фоновом режиме. Только когда они станут узким местом, вы заметите снижение производительности. Та же проблема возникает с последовательными записями, но не так сильно.

...