Кэш – память и принципы ее организации, страница 6

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

Существует два основных способа обновления информации в оперативной памяти, которые гарантируют, что при любых изменениях в кэш-памяти, по соответствующим адресам  оперативной памяти, будут занесены новые текущие значения данных. Эти два способа определяют, как говорят, политику записи (WritePolicy) кэш-контроллера при операции записи измененной строки кэш-памяти в оперативную память.

Первый способ носит название WriteThrough (WT) – сквозная запись. Суть этого метода заключается в том, что информация записывается одновременно как в буфер кэш-памяти, так и в оперативную память. Таким образом, процессору при каждой операции записи приходится выполнять относительно длительную запись в основную память. Этот способ прост в реализации и легко обеспечивает целостность данных за счет постоянного совпадения копий данных в кэш-памяти и основной памяти. Но эта простота оборачивается низкой эффективностью записи. Существуют варианты этого алгоритма с применением отложенной буферированной записи, при которой данные в основную память переписываются через FIFO – буфер во время свободных тактов шины. Однако количество обращений к основной оперативной памяти можно сократить, если учесть, что записывать в нее копию блока целесообразно только в том случае, если содержимое его было изменено во время работы процессора но, согласно принципу LRU, соответствующую строку необходимо предоставить под новый блок информации. Это соображение и было положено в основу другой стратегии записи, обеспечивающей сохранение целостности данных.

Этот второй способ носит название WriteBack (WB) – обратная запись. При этом методе каждая строка, в которую была процессором произведена запись, отмечается как грязная (dirty) или модифицированная, т.е. измененная, и требующая замены в основной памяти. Это осуществляется путем занесения 1 в специальный бит модифицирования, который придается каждой строке, и о котором уже было упомянуто ранее. Только после передачи блока данных, содержащегося в этой строке, в основную память строка становится чистой (clean), ее бит модифицирования сбрасывается в 0, и она может быть использована для кэширования других блоков данных без нарушения целостности данных. Однако сама выгрузка модифицированного блока памяти в оперативную память может быть отложена до наступления крайней необходимости, например, при необходимости записи в эту строку нового блока информации в соответствии с правилами принципа LRU. Эта стратегия выгрузки блоков памяти из кэш-памяти в основную память обеспечивает более высокую производительность. Но за это приходится платить дополнительным объемом электронного оборудования. Правда, степень интеграции современной элементной базы существенно ослабляет влияние этого фактора.

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

В современных процессорах микроархитектур Nehalem и Sandy Bridge наборно-ассоциативная (множественно-ассоциативная) кэш-память широко используется в кэш-памятях как первого ( 8-ми канальный кэш L1 данных и 4-канальный кэш L1 команд), так и второго и третьего уровня (8-ми канальный кэш L2  и 16-ти канальный кэш L3).

          3. Кэш-память и эффективность программ.

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

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

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

          Рис.IV.5   Размещение данных в памяти системы.