О скорости выполнения операций в кэш-памяти

При обращениях к кэш-памяти в реальных программах преобладают обращения по чтению. Все обращения за командами являются обращениями по чтению, и большинство команд не пишут в оперативную память. Обычно операции записи составляют порядка 10% общего трафика оперативной памяти. Желание сделать общий случай более быстрым означает оптимизацию уровней кэш-памяти для выполнения операций чтения, однако при реализации высокопроизводительной обработки данных нельзя пренебрегать и скоростью операций записи.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: