Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
20.03.2015
Размер:
1.37 Mб
Скачать

8.4.2. Частота попаданий и накладные расходы при промахах

Отличным показателем эффективности конкретной реализации иерархии памя­ти является частота попаданий при доступе к информации на разных уровнях ие­рархии. Напомним, что попаданием называется успешное обращение к данным в кэше. Отношение количества попаданий к общему количеству попыток доступа называется частотой попаданий, а отношение количества промахов к общему ко­личеству попыток доступа — частотой промахов.

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

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

Пример 8.2______________________________________________________________________

Теперь давайте рассмотрим влияние кэша на общую производительность компью­тера. Предположим, частота попаданий равна А, накладные расходы при промахе (то есть время доступа к информации в основной памяти) составляет M (нc), а вре­мя доступа к информации в кэше — С (нc). Среднее время доступа, каким оно представляется процессору, таково (параметры системы те же, что в примере 8.1):

tave = hC + (1 - h)M

Если у компьютера вообще нет кэша, то при наличии быстрого процессора и ти­пичной DRAM на каждое обращение к памяти для чтения данных уходит 10 так­тов. Предположим, что в компьютере имеется кэш с блоками по 8 слов и основная память с чередованием адресов. Тогда, как следует из раздела 8.3.4., на загрузку блока в кэш необходимо 17 тактов. Предположим, что 30 % команд в типичной программе выполняют чтение или запись данных. Это означает, что на каждые 100 выполненных команд приходится 130 обращений к памяти. Предположим, что частота попаданий в кэш составляет 0,95 для команд и 0,9 для данных, а также что накладные расходы при промахах операций чтения и записи одинаковы. Тогда приблизительная оценка повышения производительности в результате использо­вания кэша будет такой:

Время без кэша ________________________130х10_________

Время с кэшем = 100(0,95 х 1 + 0,05 х 17) + 30(0,9 х 1 + 0,1 х 17) = 5,04

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

100(0,95 х 1 + 0,05 х 17) + 30(0.9 х 1 + 0,1 х 17) = 1,98

130

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

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

Пример 8.3_________________________________________________________________

Предположим, у нас имеется один кэш, реализованный на микросхеме процессо­ра, и основная память на основе микросхем SDRAM. Мы также предполагаем, что тактовая частота системной шины в два раза меньше тактовой частоты про­цессора. Как и в примере 8.2, кэш состоит из блоков по 8 слов, и частота попада­ний в кэш составляет 0,95 для команд и 0,9 для данных. Временная диаграмма SDRAM такая же. Всего на пересылку блока требуется 15 тактов. Если тактовая частота про­цессора вчетверо выше, на пересылку блока из восьми слов между процессором и основной памятью уходит 60 тактов процессора. В схеме с блочной организацией на пересылку одного слова между процессором и осно­вой памятью требуется 9 тактов шины. Как видите, на доступ к одному слову основной памяти уходит 36 тактов процессора. И это не­смотря на то, что обращение к слову в кэше выполняется за один такт процессора! Вот что получается, если повторить вычисления из примера 8.2 для других ис­ходных данных:

Время без кэша_ = ________________130 х 36_________________ = 7,77

Время с кэшем 100(0,95 х 1 + 0,05 х 60) + 30(0,9 х 1 + 0,1 х 60)

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

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

Как же повысить частоту попаданий? Очевидно, это можно сделать путем уве­личения объема кэша, но не следует забывать, что при этом возрастет его стои­мость. Второй способ заключается в увеличении размера блока при неизменном общем размере кэша, что даст возможность полнее использовать свойство лока­лизации ссылок в пространстве. Если для вычислений необходимы все элементы большого блока, лучше всего загружать их в кэш одним большим массивом, а не по частям. При этом можно будет воспользоваться преимуществами параллель­ного доступа к данным в памяти с чередованием адресов. Но увеличение размера блока не может быть беспредельным, поскольку начиная с некоторого момента частота попаданий уже не только не повышается, но даже начинает снижаться. Если блок слишком велик, то, пока он находится в кэше, к некоторым его элемен­там вообще не выполняются обращения. Другими словами, чтобы достичь наи­высшей производительности, необходимо подобрать оптимальный размер блока. На практике чаще всего используются блоки размером от 16 до 128 байт.

Напоследок отметим, что способ сокращения накладных расходов промаха все-таки существует. Он заключается в использовании технологии сквозной за­грузки, применяемой при считывании в кэш новых блоков команд и данных. Суть ее состоит в следующем: вместо того чтобы ожидать пересылку из памяти всего блока, процессор должен продолжать свою работу, как только в кэше окажется не­обходимое слово.