Кэш-память.
Кэширование (кэш-память ) это способ совместного функционирования двух типов запоминающих устройств (ЗУ), отличающихся временем доступа, при котором за счет динамического копирования наиболее часто используемой информации из "медленного" ЗУ в "быстрое" ЗУ уменьшается среднее время доступа к данным.
Кэширование является универсальным методом для ускорения доступа к оперативной памяти, дискам, компакт дискам и другим ЗУ. Механизм кэш-памяти реализуется автоматически системными средствами.
Кэш-памятью , или кэшем называют не только способ организации работы двух типов запоминающих устройств, но и одно из этих устройств «быстрое» ЗУ. Оно стоит дороже и, как правило, имеет сравнительно небольшой объем.
Необходимость в кэш-памяти обусловлена следующим: чем выше быстродействие ЗУ, тем меньше его максимальный объем (ёмкость) и наоборот. При этом, чем выше быстродействие памяти, тем технически сложнее достигается и дороже обходится увеличение ее объема.
Память вычислительной машины представляет собой иерархию запоминающих устройств (ЗУ), отличающихся средним временем доступа к данным, объемом и стоимостью хранения одного бита (рис. 5.14).
Рис. 5.14. Иерархическая структура памяти
На самой верхней ступеньке иерархии находятся внутренние регистры процессора . Время доступа к регистрам зависит от быстродействия процессора и составляет несколько наносекунд. Общий объем регистров может составлять десятки или сотни байт.
Для повышения производительности при обмене данными между процессором и основной памятью используется быстродействующая память статического типа, называемая КЭШ-памятью . Быстродействие КЭШ-памяти выше быстродействия оперативной памяти. Как правило, в компьютерах используется два уровня КЭШ-памяти (Level 1 и Level 2). Объем КЭШ-памяти 1-го уровня составляет от нескольких десятков Кбайт до сотен Кбайт. Объем КЭШ-памяти 2-го уровня составляет от нескольких сотен Кбайт до нескольких Мбайт.
Оперативная или основная память служит для хранения программ и данных. Её быстродействие ниже, чем у КЭШ-памяти, а объем составляет от сотен Мбайт до нескольких Гбайт. Часть ОЗУ может использоваться как КЭШ для внешних запоминающих устройств.
Объем хранимой информации во внешнем запоминающем устройстве составляет:
0,7 Гбайт CD; 5…17 Гбайт DVD; 25…200 Гбайт Blu -ray ;
Сотни Гбайт жесткие диски;
Десятки Тбайт накопители на магнитной ленте (используются для резервного копирования информации).
Время доступа к данным для жестких дисков составляет порядка 10мс, для оптических дисков 50…100мс, для накопителей на магнитной ленте секунды или даже минуты, поскольку на них реализована память с последовательным доступом.
Таким образом, можно сделать вывод, что с увеличением быстродействия памяти (уменьшении времени доступа) увеличивается стоимость хранения данных в расчете на один бит. Использование КЭШ-памяти предоставляет собой компромиссное решение с целью увеличения производительности системы без резкого увеличения её стоимости.
Структура двухуровневой КЭШ-памяти микропроцессора показана на рис. 5.15. В микропроцессоре используется разделенная КЭШ-память 1 уровня для команд и для данных, что позволяет практически удвоить пропускную способность подсистемы памяти. Между КЭШ-памятью 1 уровня и оперативной памятью внутри корпуса микросхемы процессора располагается КЭШ-память 2 уровня. На материнской плате между КЭШ-памятью 2-го уровня и оперативной памятью может располагаться и КЭШ-память 3 уровня, но в большинстве персональных компьютеров она отсутствует. Обычно все содержимое КЭШ-памяти 1-го уровня находится в КЭШ-памяти 2-го уровня и т.д.
Рис. 5.15. Структура КЭШ-памяти микропроцессора
§5.4.2.Функционирование кэш-памяти.
Рассмотрим одну из возможных схем кэширования (рис. 5.16).
Содержимое КЭШ-памяти представляет собой совокупность записей обо всех загруженных в неё элементах данных из основной памяти. Каждая запись об элементе данных содержит:
Адрес элемента данных в основной памяти;
Значение элемента данных (данные);
Управляющую информацию, которая используется для реализации алгоритма замещения данных в кэше и обычно включает признак модификации и признак действительности данных.
Рис. 5.16. Схема функционирования КЭШ-памяти
При каждом обращении к основной памяти по физическому адресу просматривается содержимое кэш-памяти с целью определения, не находятся ли там нужные данные. КЭШ-память не является адресуемой, поэтому поиск нужных данных осуществляется по содержимому по взятому из запроса значению поля адреса в оперативной памяти. Далее возможен один из двух вариантов развития событий:
Если данные обнаруживаются в КЭШ-памяти, то произошло КЭШ-попадание (cash -hit ), данные из нее считываются и передаются источнику запроса;
Если нужные данные отсутствуют в КЭШ-памяти, то произошёл КЭШ-промах (cash -miss ), данные считываются из основной памяти, передаются источнику запроса и одновременно копируются в КЭШ-память.
Эффективность кэширования зависит от вероятности попадания в КЭШ.
Cреднее время доступа к данным t в системе с КЭШ-памятью:
где t 1 среднее время доступа к основной памяти;
t 2 среднее время доступа к КЭШ-памяти (t 2 < t 1 );
p вероятность КЭШ-попаданий.
Следовательно, среднее время доступа к данным линейно зависит от вероятности КЭШ-попаданий и может меняться от t 1 при p =0 до t 2 при p =1. Отсюда следует, что использование КЭШ-памяти имеет смысл при высокой вероятности КЭШ-попаданий.
В реальных системах вероятность попадания в кэш превышает 90 %. Такое высокое значение вероятности объясняется использованием таких объективных свойств данных, как временная и пространственная локальность.
Временная локальность . Если произошло обращение по некоторому адресу, то следующее обращение по этому же адресу с большой вероятностью произойдет в ближайшее время.
Основываясь на свойстве временной локальности, данные, только что считанные из основной памяти, размещают в запоминающем устройстве быстрого доступа, предполагая, что скоро они опять понадобятся. В начале работы системы, кэш-память еще пуста и почти каждый запрос к основной памяти выполняется «по полной программе»: просмотр кэша, констатация промаха, чтение данных из основной памяти, передача результата источнику запроса и копирование данных в кэш. Постепенно происходит заполнение кэша часто используемыми данными.
Пространственная локальность . Если произошло обращение по некоторому адресу, то с высокой степенью вероятности в ближайшее время произойдет обращение к соседним адресам.
Свойство пространственной локальности также используется для увеличения вероятности кэш-попадания: как правило, в кэш-память считывается не один информационный элемент, к которому произошло обращение, а целый блок данных, расположенных в основной памяти в непосредственной близости с данным элементом. Поскольку при выполнении программы очень высока вероятность, что команды выбираются из памяти последовательно одна за другой из соседних ячеек, то имеет смысл загружать в кэш-память целый фрагмент программы. Аналогично если программа ведет обработку некоторого массива данных, то ее работу можно ускорить, загрузив в кэш часть или даже весь массив данных. При этом учитывается высокая вероятность того, что значительное число обращений к памяти будет выполняться к адресам массива данных.
В процессе работы содержимое кэш-памяти постоянно обновляется, а значит, время от времени данные из нее должны вытесняться. Вытеснение означает объявление соответствующей области кэш-памяти свободной (сброс бита действительности). Если вытесняемые данные за время нахождения в кэше были модифицированы, в дополнение к этому происходит копирование данных в основную память.
Алгоритм замены данных в кэш-памяти существенно влияет на ее эффективность. В идеале такой алгоритм должен, во-первых, быть максимально быстрым, чтобы не замедлять работу кэш-памяти, а во-вторых, обеспечивать максимально возможную вероятность кэш-попаданий.
Наличие в системе двух копий данных в основной памяти и в КЭШ-памяти порождает проблему согласования данных , для решения которой используется два основных подхода: сквозная и обратная запись.
Сквозная запись (write through ). При каждом запросе к основной памяти (при чтении и записи) просматривается КЭШ. Если данные в КЭШ отсутствуют, то запись выполняется только в основную память, если присутствуют, то запись выполняется одновременно в КЭШ и основную память.
Обратная запись (write back ). Если данные в КЭШ отсутствуют, то запись выполняется только в основную память. В противном случае запись выполняется только в КЭШ память, но при этом устанавливается признак модификации данных, который при вытеснении данных из КЭШ указывает на то, что эти данные необходимо переписать в основную память.
Иными словами, при сквозной записи данные в КЭШ и в основной памяти обновляются одновременно. При обратной записи обновляются только данные в КЭШ, обновление основной памяти происходит только при вытеснении данных из КЭШ.
С быстрым доступом, где хранится часть данных с другого носителя с более медленным доступом;
Кэш-память процессора
Если кэш-память располагается между микропроцессором и оперативной памятью, при обращении процессора к памяти сначала производится поиск необходимых данных в кэш-памяти, выполняющей функции буфера между процессором и оперативной памятью. Так как в большинстве случаев эти данные из оперативной памяти предварительно перекачиваются в кэш-память, а время доступа в нее существенно ниже, чем непосредственно в оперативную память, общее время доступа к памяти сокращается. Изготовляется такая кэш-память как правило на базе микросхем типа SRAM . Кэш-памятью комплектуется большинство современных центральных процессоров, начиная с Intel 80386 (первоначально кэш-память располагалась не на самом процессоре как сейчас, а на материнской или на процессорной плате).
Различают следующие виды кэш-памяти процессора:
- Cache L1 - «кэш-память первого уровня»: промежуточная сверхоперативная память, как правило находящаяся на самом кристалле процессора, в которой размещаются наиболее часто используемые данные. Работает на частоте процессора. Время доступа к этой памяти существенно меньше, чем к данным в основной оперативной памяти. Этим достигается ускорение работы процессора. Из-за ограничений в размерах кристалла процессора и высокого быстродействия этой памяти она имеет небольшую емкость - всего несколько десятков килобайт.
- Cache L2 - «кэш-память второго уровня»: промежуточная сверхоперативная память, имеющая быстродействие ниже памяти первого уровня, но выше основной оперативной памяти. Ее размер обычно составляет от нескольких сотен килобайт до нескольких мегабайт. Она может выполняться как на том же кристалле, что и процессор, так и в виде отдельных микросхем. В RISC-процессорах зачастую используется L3-кэш и кэш более высоких порядков.
- Cache L3 - «кэш-память третьего уровня»: промежуточная сверхоперативная память, имеющая быстродействие ниже памяти второго уровня, но выше основной оперативной памяти. Ее размер обычно составляет от одного до нескольких мегабайт. Используется, главным образом, в серверных процессорах (см. Intel Xeon MP). Встречается кэш-память и более высоких уровней (при этом быстродействие памяти каждого последующего уровня меньше каждого предыдущего уровня).
- D-Cache - сверхоперативная память, используемая для хранения инструкций процессора.
Кэширование жесткого диска
Большинство жестких дисков оснащены собственной кэш-памятью размером от нескольких кмлобайт до нескольких мегабайт (в современных жестких дисках - 2, 4, 8, 16 или 32 Мб). Дисковая кэш-память (disk cache), или кэш-память жестского диска - принцип построения кэш-памяти на основе динамического ОЗУ (см. DRAM), хранящем наиболее часто используемые команды и данные, доступ к которым производится из внешней памяти. Принцип кэширования жесткого диска во многом похож на принцип кэширования, используемый для оперативной динамической памяти, хотя способы доступа к диску и памяти сильно различаются. Если время доступа к любой из ячеек оперативной памяти имеет примерно одинаковое для данного компьютера значение, то время доступа к различным блокам информации на винчестере в общем случае будет различным. Во-первых, нужно затратить некоторое время, чтобы магнитная головка записи-чтения подошла к искомой дорожке. Во-вторых, поскольку при движении головка вибрирует, то необходимо время, чтобы она успокоилась. В-третьих, требуется время, чтобы головка нашла искомый сектор.
При обращении к оперативной памяти могут читаться или записываться только несколько отдельных байтов, в то время как доступ к диску всегда происходит секторами. Если размер сектора в случае использования любой версии DOS составляет 512 байт, то наименьший размер кэш-памяти также должен быть 512 байт. Методы кэширования, используемые для оперативной памяти, применяются и для кэширования информации, хранимой на жестких дисках. Поскольку винчестер является блочно-ориентированным устройством ввода-вывода, то данные передаются блоками определенной длины. Кэш-память диска заполняется не только требуемым сектором, но и секторами, непосредственно следующими за ним, так как известно, что в большинстве случаев взаимосвязанные данные хранятся в соседних секторах. Этот метод известен также как метод опережающего чтения (Read Ahead). При работе с многозадачными системами выгодно иметь винчестер с мультисегментной кэш-памятью, которая для каждой из задач отводит свою часть кэша (сегмент). В адаптивной мультисегментной кэш-памяти для повышения производительности число и размеры сегментов могут изменяться.
Другие виды кэш-памяти
Значительная часть устройств внешней памяти (внешние жесткие диски, приводы CD и DVD), а также периферийные устройства (принтер, сканер) обладают небольшим объемом кэш-памяти (в основном 2, 4, 8 либо 16 Мб), что позволяет увеличить скорость доступа к данным.
Аннотация: На лекции рассматривается упрощенная модель процессора, составляющие его компоненты. Рассматривается многоуровневая модель памяти, использование регистров и оперативной памяти, механизм упреждающей выборки, предсказание переходов. Конвейер. Векторные инструкции. Многоядерность и параллельное выполнение инструкций. Место и роль компилятора в процессе создания эффективного приложения.
Презентацию к лекции Вы можете скачать .
Упрощенная модель процессора
Дополнительная информация:
Прототипом схемы служит отчасти описание архитектуры фон Неймана, которая имеет следующие принципы:
- Принцип двоичности
- Принцип программного управления
- Принцип однородности памяти
- Принцип адресуемости памяти
- Принцип последовательного программного управления
- Принцип условного перехода
Чтобы легче было понять, что из себя представляет современная вычислительная система , надо рассматривать ее в развитии. Поэтому я здесь привел самую простую схему, которая приходит в голову. По сути дела, эта упрощенная модель. У нас существует некое устройство управления внутри процессора, арифметико-логическое устройство , системные регистры, системная шина , которая позволяет вести обмен между устройством управления и другими устройствами, память и периферийные устройства. Устройство управления получает инструкции, делает их дешифрацию, управляет арифметико-логическим устройством, осуществляет пересылку данных между регистрами процессора, памятью , периферийными устройствами.
Упрощенная модель процессора
- устройство управления ( Control Unit , CU)
- арифметико-логическое устройство ( Arithmetic and Logic Unit , ALU )
- системные регистры
- системная шина (Front Side Bus, FSB )
- память
- периферийные устройства
Устройство управления (CU):
- выполняет дешифрацию инструкций, поступающих из памяти компьютера.
- управляет ALU .
- осуществляет пересылку данных между регистрами ЦП, памятью, периферийными устройствами.
Арифметико-логическое устройство:
- позволяет производить арифметические и логические операции над системными регистрами.
Системные регистры:
- определенный участок памяти внутри ЦП, используемый для промежуточного хранения информации, обрабатываемой процессором.
Системная шина:
- используется для пересылки данных между ЦП и памятью, а также между ЦП и периферийными устройствами.
Арифметико-логическое устройство состоит из различных электронных компонент , позволяющих производить операции над системными регистрами. Системные регистры – это некие участки в памяти, внутри центрального процессора, используемые для хранения промежуточных результатов, обрабатываемых процессором. Системная шина используется для пересылки данных между центральным процессором и памятью, а также между центральным процессором и периферийными устройствами.
Высокая производительность МП (микропроцессора)– один из ключевых факторов в конкурентной борьбе производителей процессоров.
Производительность процессора напрямую связана с количеством работы, вычислений, которые он может выполнить за единицу времени.
Очень условно:
Производительность = Кол-во инструкций / Время
Мы будем рассматривать производительность процессоров на базе архитектур IA32 и IA32e. (IA32 with EM64T ).
Факторы влияющие на производительность процессора:
- Тактовая частота процессора.
- Объем адресуемой памяти и скорость доступа к внешней памяти.
- Скорость выполнения и набор инструкций.
- Использование внутренней памяти, регистров.
- Качество конвейеризации .
- Качество упреждающей выборки.
- Суперскалярность .
- Наличие векторных инструкций.
- Многоядерность.
Что такое производительность ? Сложно дать однозначное определение производительности. Можно формально привязать его к процессору – сколько, инструкций за единицу времени может выполнять тот или иной процессор . Но проще дать сравнительное определение – взять два процессора и тот, который выполняет некий набор инструкций быстрее, тот более производительный. То есть, очень условно, можно сказать, что производительность – это количество инструкций на время выполнения . Мы здесь в основном будем исследовать те микропроцессорные архитектуры, которые выпускает Intel, то есть архитектуры IA32, которые сейчас называются Intel 64. Это архитектуры, которые с одной стороны поддерживает старые инструкции из набора IA32, с другой стороны имеют EM64T – это некое расширение, которое позволяет использовать 64 битные адреса, т.е. адресовать большие размеры памяти, а также включает в себя какие-то полезные дополнения, типа увеличенного количества системных регистров, увеличенное количество векторных регистров.
Какие факторы влияют на производительность ? Перечислим все, которые приходят в голову. Это:
- Скорость выполнения инструкций, полнота базового набора инструкций.
- Использование внутренней памяти регистров.
- Качество конвейеризации .
- Качество предсказания переходов.
- Качество упреждающей выборки.
- Суперскалярность .
- Векторизация , использование векторных инструкций.
- Параллелизация и многоядерность.
Тактовая частота
Процессор состоит из компонент, срабатывающих в разное время и в нем существует таймер, который обеспечивает синхронизацию, посылая периодические импульсы. Его частота и называется тактовой частотой процессора.
Объем адресуемой памяти
Тактовая частота.
Поскольку процессор имеет много различных электронных компонент , которые работают независимо, то для того, чтобы синхронизировать их работу, чтобы они знали, в какой момент надо начать работать, когда нужно выполнить свою работу и ждать, существует таймер , который посылает синхроимпульс. Частота, с которой посылается синхроимпульс – и есть тактовая частота процессора. Есть устройства, которые успевают две операции выполнить за это время, тем не менее, к этому синхроимпульсу работа процессора привязана, и, можно сказать, что если мы эту частоту увеличим, то мы заставим все эти микросхемы работать с большим напряжением сил и меньше простаивать.
Объем адресуемой памяти и скорость доступа к памяти.
Объем памяти - необходимо, чтобы памяти хватало для нашей программы и наших данных. То есть, технология EM64T позволяет адресовать огромное количество памяти и на данный момент вопрос с тем, что нам не хватает адресуемой памяти не стоит.
Поскольку на эти факторы разработчики в общем случае не имеют возможности влиять, то я только упоминаю о них.
Скорость выполнения и набор инструкций
Производительность зависит от того, насколько качественно реализованы инструкции, насколько полно базовый набор инструкций покрывает все возможные задачи.
CISC,RISC (complex, reduced instruction set computing)
Современные процессоры Intel® представляют собой гибрид CISC и RISC процессоров, перед исполнением преобразуют CISC инструкции в более простой набор RISC инструкций.
Скорость выполнения инструкций и полнота базового набора инструкций.
По сути дела, когда архитекторы проектируют процессоры, они постоянно работают с целью улучшить его производительность . Одной из их задач является сбор статистики, для определения, какие инструкции или последовательности инструкций являются ключевыми с точки зрения производительности. Пытаясь улучшить производительность , архитекторы пытаются самые горячие инструкции сделать быстрее, для каких-то наборов инструкций сделать специальную инструкцию, которая заменит этот набор и будет работать эффективнее. От архитектуры к архитектуре изменяются характеристики инструкций, появляются новые инструкции, которые позволяют добиться лучшей производительности. Т.е. можно считать что от архитектуры к архитектуре базовый набор инструкций постоянно совершенствуется и расширяется. Но если вы не указываете на каких архитектурах будет выполняться ваша программа , то в вашем приложении будет задействован некий умолчательный набор инструкций, который поддерживают все последние микропроцессоры. Т.е. наилучшей производительности мы можем добиться только если будем четко специфицировать тот микропроцессор , на котором будет выполняться задача.
Использование регистров и оперативной памяти
Время доступа к регистрам наименьшее, поэтому кол-во доступных регистров влияет на производительность микропроцессора.
Вытеснение регистров ( register spilling ) – из-за недостаточного кол-ва регистров велик обмен между регистрами и стеком приложения.
С ростом производительности процессоров возникла проблема, связанная с тем, что скорость доступа к внешней памяти стала ниже скорости вычислений.
Существуют две характеристики для описания свойств памяти:
- Время отклика ( latency ) – число циклов процессора необходимых для передачи единицы данных из памяти.
- Пропускная способность ( bandwidth ) – количество элементов данных которые могут быть отправлены процессору из памяти за один цикл.
Две возможные стратегии для ускорения быстродействия– уменьшение времени отклика или упреждающий запрос нужной памяти.
Использование регистров и оперативной памяти.
Регистры – самые быстрые элементы памяти, они находятся непосредственно на ядре, и доступ к ним практически мгновенный. Если ваша программа делает какие-то вычисления, хотелось бы, чтобы все промежуточные данные хранились на регистрах. Понятно, что это невозможно. Одна из возможных проблем производительности– это проблема вытеснения регистров. Когда вы под каким-нибудь анализатором производительности смотрите на ассемблерный код, вы видите, что у вас очень много движения со стека в регистры и обратно выгрузка регистров на стек . Стоит вопрос – как оптимизировать код так, чтобы самые горячие адреса, самые горячие промежуточные данные, лежали именно на системных регистрах.
Следующая часть памяти – это обычная оперативная память . С ростом производительности процессоров стало ясно, что самым узким местом производительности является доступ к оперативной памяти. Для того, чтобы добраться до оперативной памяти, нужны сотня, а то и две сотни тактов процессора. То есть, запросив какую-то ячейку памяти в оперативной памяти, мы будем ждать двести тактов, а процессор будет простаивать.
Существует две характеристики для описания свойств памяти – это время отклика, то есть число циклов процессора, необходимое для передачи единицы данных из памяти, и пропускная способность - сколько элементов данных могут быть отправлены процессором из памяти за один цикл. Встретившись с проблемой, что у нас узким местом является доступ к памяти, мы можем решать эту проблему двумя путями – либо уменьшением времени отклика, либо делать упреждающие запросы нужной памяти. То есть, в данный момент нам значение какой-то переменной неинтересно, но мы знаем, что оно скоро нам понадобится, и мы его уже запрашиваем.
Кэширование
Кэш-память служит для уменьшения времени доступа к данным.
Для этого блоки оперативной памяти отображаются в более быструю кэш-память.
Если адрес памяти находится в кэше – происходит "попадание" и скорость получения данных значительно увеличивается.
В противном случае – "промах" (cache miss)
В этом случае блок оперативной памяти считывается в кэш-память за один или несколько циклов шины, называемых заполнением строки кэш-памяти.
Можно выделить следующие виды кэш-памяти:
- полностью ассоциативная кэш-память (каждый блок может отображаться в любое место кэша)
- память с прямым отображением (каждый блок может отображаться в одно место)
- гибридные варианты (секторная память, память с множественно-ассоциативным доступом)
Множественно-ассоциативный доступ – по младшим разрядам определяется строка кэша, куда может отображаться данная память, но в этой строке может находиться только несколько слов основной памяти, выбор из которых проводится на ассоциативной основе.
Качество использования кэша – ключевое условие быстродействия.
Дополнительная информация: в современных IA32 системах размер кэш-линии 64 байта.
Уменьшение времени доступа было достигнуто введением кэш -памяти. Кэш - память – это буферная память , находящаяся между оперативной памятью и микропроцессором. Она реализована на ядре, то есть доступ к ней гораздо быстрее чем к обычной памяти, но она намного дороже, поэтому при разработке микроархитектуры нужно найти точный баланс между ценой и производительностью. Если вы посмотрите на описания предлагаемых в продаже процессоров, вы увидите, что всегда в описании пишется, сколько кэша памяти того или иного уровня на данном процессоре есть. Эта цифра серьезно влияет на цену данного изделия. Кэш - память устроена так, что обычная память отображается на кэш - память , отображение идет блоками. Вы, запрашивая в оперативной памяти какой-то адрес , делаете проверку, отображен ли этот адрес в кэш -памяти. Если этот адрес уже есть в кэш -памяти, то вы экономите время на обращение к памяти. Вы считываете эту информацию из быстрой памяти, и у вас время отклика существенно уменьшается, если же этого адреса в кэш -памяти нет, то мы должны обратиться к обычной памяти, чтобы этот необходимый нам адрес вместе с каким-то блоком, в котором он находится, отобразился в эту кэш - память .
Существуют разные реализации кэш -памяти. Бывает полностью ассоциативная кэш - память , когда каждый блок может отображаться в любое место кэша. Существует память с прямым отображением, когда каждый блок может отображаться в одно место , также существуют различные гибридные варианты – например кэш с множественно-ассоциативным доступом. В чем разница? Разница во времени и сложности проверки на наличие нужного адреса в кэш -памяти. Предположим, что нам нужен определенный адрес . В случае с ассоциативной памятью нам нужно проверить весь кэш – убедиться, что этого адреса в кэше нет. В случае с прямым отображением нам нужно проверить только одну ячейку. В случае с гибридными вариантами, например, когда используется кэш с множественно-ассоциативным доступом, нам нужно проверить, к примеру, четыре или восемь ячеек. То есть, задача определить есть ли адрес кэша – тоже важна. Качество использования кэша – важное условие быстродействия. Если нам удастся написать программу так, чтобы как можно чаще те данные, с которыми мы собирались работать, находились в кэше, то такая программа будет работать гораздо быстрее.
Характерные времена отклика при обращении к кэш памяти для Nehalem i7:
- L1 - latency 4
- L2 - latency 11
- L3 - latency 38
Время отклика для оперативной памяти > 100
Упреждающий механизм доступа к памяти реализован при помощи механизма упреждающей выборки (hardware prefetching ).
Есть специальный набор инструкций, позволяющий побудить процессор загрузить в кэш память расположенную по определенному адресу (software prefetching ).
Для примера возьмем наш последний процессор Nehalem: i7.
Здесь мы имеем не просто кэш , а некий иерархический кэш . Долгое время он был двухуровневый, в современной системе Nehalem он трехуровневый – совсем немного очень быстрого кэша, чуть побольше кэша второго уровня и достаточно большое количество кэша третьего уровня. При этом, эта система построена так, что если какой-то адрес находится в кэше первого уровня, он автоматически находится во втором и в третьем уровнях. Это и есть иерархическая система. Для кэша первого уровня задержка – 4 такта, для второго – 11, третьего – 38 и время отклика оперативной памяти – больше 100 тактов процессора.
Кэш-память
Кэш-память представляет собой быстродействующее ЗУ, размещенное на одном кристалле с ЦП или внешнее по отношению к ЦП. Кэш служит высокоскоростным буфером между ЦП и относительно медленной основной памятью. Идея кэш-памяти основана на прогнозировании наиболее вероятных обращений ЦП к оперативной памяти. В основу такого подхода положен принцип временной и пространственной локальности программы.
Если ЦП обратился к какому-либо объекту оперативной памяти, с высокой долей вероятности ЦП вскоре снова обратится к этому объекту. Примером этой ситуации может быть код или данные в циклах. Эта концепция описывается принципом временной локальности, в соответствии с которым часто используемые объекты оперативной памяти должны быть "ближе" к ЦП (в кэше).
Для согласования содержимого кэш-памяти и оперативной памяти используют три метода записи:
· сквозная запись (write through) - одновременно с кэш-памятью обновляется оперативная память.
· буферизованная сквозная запись (buffered write through) - информация задерживается в кэш-буфере перед записью в оперативную память и переписывается в оперативную память в те циклы, когда ЦП к ней не обращается.
· обратная запись (write back) - используется бит изменения в поле тега, и строка переписывается в оперативную память только в том случае, если бит изменения равен 1.
Как правило, все методы записи, кроме сквозной, позволяют для увеличения производительности откладывать и группировать операции записи в оперативную память.
В структуре кэш-памяти выделяют два типа блоков данных:
· память отображения данных (собственно сами данные, дублированные из оперативной памяти);
· память тегов (признаки, указывающие на расположение кэшированных данных в оперативной памяти).
Пространство памяти отображения данных в кэше разбивается на строки - блоки фиксированной длины (например, 32, 64 или 128 байт). Каждая строка кэша может содержать непрерывный выровненный блок байт из оперативной памяти. Какой именно блок оперативной памяти отображен на данную строку кэша, определяется тегом строки и алгоритмом отображения. По алгоритмам отображения оперативной памяти в кэш выделяют три типа кэш-памяти:
· полностью ассоциативный кэш;
· кэш прямого отображения;
· множественный ассоциативный кэш.
Для полностью ассоциативного кэша характерно, что кэш-контроллер может поместить любой блок оперативной памяти в любую строку кэш-памяти (рис. Полностью ассоциативный кэш 8х8 для 10-битного адреса ). В этом случае физический адрес разбивается на две части: смещение в блоке (строке кэша) и номер блока. При помещении блока в кэш номер блока сохраняется в теге соответствующей строки. Когда ЦП обращается к кэшу за необходимым блоком, кэш-промах будет обнаружен только после сравнения тегов всех строк с номером блока.
Одно из основных достоинств данного способа отображения - хорошая утилизация оперативной памяти, т.к. нет ограничений на то, какой блок может быть отображен на ту или иную строку кэш-памяти. К недостаткам следует отнести сложную аппаратную реализацию этого способа, требующую большого количества схемотехники (в основном компараторов), что приводит к увеличению времени доступа к такому кэшу и увеличению его стоимости.
Рис. Полностью ассоциативный кэш 8х8 для 10-битного адреса
Альтернативный способ отображения оперативной памяти в кэш - это кэш прямого отображения (или одновходовый ассоциативный кэш). В этом случае адрес памяти (номер блока) однозначно определяет строку кэша, в которую будет помещен данный блок. Физический адрес разбивается на три части: смещение в блоке (строке кэша), номер строки кэша и тег. Тот или иной блок будет всегда помещаться в строго определенную строку кэша, при необходимости заменяя собой хранящийся там другой блок. Когда ЦП обращается к кэшу за необходимым блоком, для определения удачного обращения или кэш-промаха достаточно проверить тег лишь одной строки.
Очевидными преимуществами данного алгоритма являются простота и дешевизна реализации. К недостаткам следует отнести низкую эффективность такого кэша из-за вероятных частых перезагрузок строк. Например, при обращении к каждой 64-й ячейке памяти в системе на рис.Кэш прямого отображения 8х8 для 10-битного адреса кэш-контроллер будет вынужден постоянно перегружать одну и ту же строку кэш-памяти, совершенно не задействовав остальные.
Рис. Кэш прямого отображения 8х8 для 10-битного адреса
Несмотря на очевидные недостатки, данная технология нашла успешное применение, например, в МП Motorola MC68020, для организации кэша инструкций первого уровня (). В данном микропроцессоре реализован кэш прямого отображения из 64 строк по 4 байт. Тег строки, кроме 24 бит, задающих адрес кэшированного блока, содержит бит значимости, определяющий действительность строки (если бит значимости 0, данная строка считается недействительной и не вызовет кэш-попадания). Обращения к данным не кэшируются.
Рис. Схема организации кэш-памяти в МП Motorola MC68020
Компромиссным вариантом между первыми двумя алгоритмами является множественный ассоциативный кэш или частично-ассоциативный кэш (). При этом способе организации кэш-памяти строки объединяются в группы, в которые могут входить 2, 4, : строк. В соответствии с количеством строк в таких группах различают 2-входовый, 4-входовый и т.п. ассоциативный кэш. При обращении к памяти физический адрес разбивается на три части: смещение в блоке (строке кэша), номер группы (набора) и тег. Блок памяти, адрес которого соответствует определенной группе, может быть размещен в любой строке этой группы, и в теге строки размещается соответствующее значение. Очевидно, что в рамках выбранной группы соблюдается принцип ассоциативности. С другой стороны, тот или иной блок может попасть только в строго определенную группу, что перекликается с принципом организации кэша прямого отображения. Для того чтобы процессор смог идентифицировать кэш-промах, ему надо будет проверить теги лишь одной группы (2/4/8/: строк).
Рис. Двухвходовый ассоциативный кэш 8х8 для 10-битного адреса
Данный алгоритм отображения сочетает достоинства как полностью ассоциативного кэша (хорошая утилизация памяти, высокая скорость), так и кэша прямого доступа (простота и дешевизна), лишь незначительно уступая по этим характеристикам исходным алгоритмам. Именно поэтому множественный ассоциативный кэш наиболее широко распространен (табл. Характеристики подсистемы кэш-памяти у ЦП IA-32).
Таблица. Характеристики подсистемы кэш-памяти у ЦП IA-32
Примечания: В Intel-486 используется единый кэш команд и данных первого уровня. В Pentium Pro L1 кэш данных - 8 Кбайт 2-входовый ассоциативный, в остальных моделях P6 - 16 Кбайт 4-входовый ассоциативный. В Pentium 4 вместо L1 кэша команд используется L1 кэш микроопераций (кэш трассы).
Для организации кэш-памяти можно использовать принстонскую архитектуру (смешанный кэш для команд и данных, например, в Intel-486). Это очевидное (и неизбежное для фон-неймановских систем с внешней по отношению к ЦП кэш-памятью) решение не всегда бывает самым эффективным. Разделение кэш-памяти на кэш команд и кэш данных (кэш гарвардской архитектуры) позволяет повысить эффективность работы кэша по следующим соображениям:
· многие современные процессоры имеют конвейерную архитектуру, при которой блоки конвейера работают параллельно. Таким образом, выборка команды и доступ к данным команды осуществляется на разных этапах конвейера, а использование раздельной кэш-памяти позволяет выполнять эти операции параллельно.
· кэш команд может быть реализован только для чтения, следовательно, не требует реализации никаких алгоритмов обратной записи, что делает этот кэш проще, дешевле и быстрее.
Именно поэтому все последние модели IA-32, начиная с Pentium, для организации кэш-памяти первого уровня используют гарвардскую архитектуру.
Критерием эффективной работы кэша можно считать уменьшение среднего времени доступа к памяти по сравнению с системой без кэш-памяти. В таком случае среднее время доступа можно оценить следующим образом:
Tср = (Thit x Rhit) + (Tmiss x (1 Rhit))
где Thit - время доступа к кэш-памяти в случае попадания (включает время на идентификацию промаха или попадания), Tmiss - время, необходимое на загрузку блока из основной памяти в строку кэша в случае кэш-промаха и последующую доставку запрошенных данных в процессор, Rhit - частота попаданий.
Очевидно, что чем ближе значение Rhit к 1, тем ближе значение Tср к Thit. Частота попаданий определяется в основном архитектурой кэш-памяти и ее объемом. Влияние наличия и отсутствия кэш-памяти и ее объема на рост производительности ЦП показано в табл. Размер и эффективность кэш-памяти
Таблица. Размер и эффективность кэш-памяти
Стратегия размещения.
На сложность этого механизма существенное влияние оказывает
стратегия размещения, определяющая, в какое место кэш-памяти
следует поместить каждый блок из основной памяти.
В зависимости от способа размещения данных основной памяти в кэш-памяти существует три типа кэш-памяти:
· кэш с прямым отображением (размещением);
· полностью ассоциативный кэш;
· множественный ассоциативный кэш или частично-ассоциативный.
Кэш с прямым отображением
(размещением) является самым
простым типом буфера. Адрес памяти однозначно определяет строку
кэша, в которую будет помещен блок информации. При этом предпо-
лагается, что оперативная память разбита на блоки и каждому та-
кому блоку в буфере отводится всего одна строка. Это простой и недорогой в реализации способ отображения. Основной его недостаток – жесткое закрепление за определенными блоками ОП одной строки в кэше. Поэтому, если программа поочередно обращается к словам из двух различных блоков, отображаемых на одну и ту же строку кэш-памяти, постоянно будет происходить обновление данной строки и вероятность попадания будет низкой.
Кэш с полностью ассоциативным отображением позволяет преодолеть недостаток прямого, разрешая загрузку любого блока ОП в любую строку кэш-памяти. Логика управления выделяет в адресе ОП два поля: поле тега и поле слова. Поле тега совпадает с адресом блока ОП. Для проверки наличия копии блока в кэш-памяти, логика управления кэша должна одновременно проверить теги всех строк на совпадение с полем тега адреса. Ассоциативное отображение обеспечивает гибкость при выборе строки для вновь записываемого блока. Принципиальный недостаток этого способа – в необходимости использования дорогой ассоциативной памяти.
Множественно-ассоциативный тип или частично-ассоциативный тип отображения – это один из возможных компромиссов, сочетающий достоинства прямого и ассоциативного способов. Кэш-память (и тегов и данных) разбивается на некоторое количество модулей. Зависимость между модулем и блоками ОП такая же жесткая, как и при прямом отображении. А вот размещение блоков по строкам модуля произвольное и для поиска нужной строки в пределах модуля используется ассоциативный принцип. Этот способ отображения наиболее широко распространен в современных микропроцессорах.
Отображение секторов ОП в кэш-памяти.
Данный тип отображения применяется во всех современных ЭВМ и состоит в том, что вся ОП разбивается на секторы, состоящие из фиксированного числа последовательных блоков. Кэш-память также разбивается на секторы, содержащие такое же количество строк. Расположение блоков в секторе ОП и секторе кэша полностью совпадает. Отображение сектора на кэш-память осуществляется ассоциативно, те любой сектор из ОП может быть помещен в любой сектор кэша. Таким образом, в процессе работы АЛУ обращается в поисках очередной команды к ОП, в результате чего, в кэш загружается(в случае отсутствия там блока, содержащего эту команду), целый сектор информации из ОП, причем по принципу локальности, за счет этого достигается значительное увеличение быстродействия системы.
Иерархическая модель кэш-памяти
Как правило, кэш-память имеет многоуровневую архитектуру. Например, в компьютере с 32 Кбайт внутренней (в ядре ЦП) и 1 Мбайт внешней (в корпусе ЦП или на системной плате) кэш-памяти первая будет считаться кэш-памятью 1-го уровня (L1), а вторая - кэш-памятью 2-го уровня (L2). В современных серверных системах количество уровней кэш-памяти может доходить до четырех, хотя наиболее часто используется двух- или трехуровневая схема.
В некоторых процессорных архитектурах кэш-память 1-го уровня разделена на кэш команд (InstructionCache, I-cache) и кэш данных (DataCache, D-cache), причем необязательно одинаковых размеров. С точки зрения схемотехники проще и дешевле проектировать раздельные I-cache и D-cache: выборку команд проводит I-box, а выборку данных - Е-box и F-box, хотя в обоих случаях задействуются А-box и С-box. Все эти блоки велики, и обеспечить им одновременный и быстрый доступ к одному кэшу проблематично. Кроме того, это неизбежно потребовало бы увеличения количества портов доступа, что также усложняет задачу проектирования.
Так как I-cache и D-cache должны обеспечивать очень низкие задержки при доступе (это справедливо для любого кэша L1), приходится жертвовать их объемом - обычно он составляет от 16 до 32 Кбайт. Ведь чем меньше размер кэша, тем легче добиться низких задержек при доступе.
Кэш-память 2-го уровня, как правило, унифицирована, т. е. может содержать как команды, так и данные. Если она встроена в ядро ЦП, то говорят о S-cache (SecondaryCache, вторичный кэш), в противном случае - о B-cache (BackupCache, резервный кэш). В современных серверных ЦП объем S-cache составляет от одного до нескольких мегабайт, aB-cache - до 64 Мбайт. Если дизайн ЦП предусматривает наличие встроенной кэш-памяти 3-го уровня, то ее именуют T-cache (TernaryCache, третичный кэш). Как правило, каждый последующий уровень кэш-памяти медленнее, но больше предыдущего по объему. Если в системе присутствует B-cache (как последний уровень модели кэш-памяти), то он может контролироваться как ЦП, так и набором системной логики.
Если в момент выполнения некоторой команды в регистрах не окажется данных для нее, то они будут затребованы из ближайшего уровня кэш-памяти, т. е. из D-cache. В случае их отсутствия в D-Cache запрос направляется в S-cache и т. д. В худшем случае данные будут доставлены непосредственно из памяти. Впрочем, возможен и еще более печальный вариант, когда подсистема управления виртуальной памятью операционной системы (ОС) успевает вытеснить их в файл подкачки на жесткий диск. В случае доставки из оперативной памяти потери времени на получение нужных данных могут составлять от десятков до сотен тактов ЦП, а в случае нахождения данных на жестком диске речь уже может идти о миллионах тактов.
Ассоциативность кэш-памяти
Одна из фундаментальных характеристик кэш-памяти - уровень ассоциативности - отображает ее логическую сегментацию. Дело в том, что последовательный перебор всех строк кэша в поисках необходимых данных потребовал бы десятков тактов и свел бы на нет весь выигрыш от использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жестко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска. С каждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти: например, n-канальная ассоциативность (n-waysetassociative) обозначает, что информация по некоторому адресу оперативной памяти может храниться в п мест кэш-памяти.
Выбор места может проводиться по различным алгоритмам, среди которых чаще всего используются принципы замещения LRU (LeastRecentlyUsed, замещается запись, запрошенная в последний раз наиболее давно) и LFU (LeastFrequentlyUsed, запись, наименее часто запрашиваемая), хотя существуют и модификации этих принципов. Например, полностью ассоциативная кэшпамять (fullyassociative), в которой информация, находящаяся по произвольному адресу в оперативной памяти, может быть размещена в произвольной строке. Другой вариант - прямое отображение (directmapping), при котором информация, которая находится по произвольному адресу в оперативной памяти, может быть размещена только в одном месте кэш-памяти. Естественно, этот вариант обеспечивает наибольшее быстродействие, так как при проверке наличия информации контроллеру придется "заглянуть" лишь в одну строку кэша, но и наименее эффективен, поскольку при записи контроллер не будет выбирать "оптимальное" место. При одинаковом объеме кэша схема с полной ассоциативностью будет наименее быстрой, но наиболее эффективной.
Полностью ассоциативный кэш встречается на практике, но, как правило, у него очень небольшой объем. Например, в ЦП Cyrix 6x86 использовалось 256 байт такого кэша для команд перед унифицированным 16-или 64-Кбайт кэшем L1. Часто полноассоциативную схему применяют при проектировании TLB (о них будет рассказано ниже), кэшей адресов переходов, буферов чтения-записи и т. д. Как правило, уровни ассоциативности I-cache и D-cache довольно низки (до четырех каналов) - их увеличение нецелесообразно, поскольку приводит к увеличению задержек доступа и в итоге негативно отражается на производительности. В качестве некоторой компенсации увеличивают ассоциативность S-cache (обычно до 16 каналов), так как задержки при доступе к этому кэшу неважны. Например, согласно результатам исследований часто используемых целочисленных задач, у IntelPentiumIII 16 Кбайт четырехканального D-cache было достаточно для покрытия около 93% запросов, а 16-Кбайт четырехканального I-cache - 99% запросов.
Размер строки и тега кэш-памяти
Немаловажная характеристика кэш-памяти - размер строки. Как правило, на одну строку полагается одна запись адреса (так называемый тег), которая указывает, какому адресу в оперативной памяти соответствует данная линия. Очевидно, что нумерация отдельных байтов нецелесообразна, поскольку в этом случае объем служебной информации в кэше в несколько раз превысит объем самих данных. Поэтому один тег обычно полагается на одну строку, размер которой обычно 32 или 64 байта (реально существующий максимум 1024 байта), и эквивалентен четырем (иногда восьми) разрядностям системной шины данных. Кроме того, каждая строка кэш-памяти сопровождается некоторой информацией для обеспечения отказоустойчивости: одним или несколькими битами контроля четности (parity) или восемью и более байтами обнаружения и коррекции ошибок (ЕСС, ErrorCheckingandCorrecting), хотя в массовых решениях часто не используют ни того, ни другого.
Размер тега кэш-памяти зависит от трех основных факторов: объема кэш-памяти, максимального кэшируемого объема оперативной памяти, а также ассоциативности кэш-памяти. Математически этот размер рассчитывается по формуле:
Stag=log2(Smem*A/Scache),
где Stag - размер одного тега кэш-памяти, в битах; Smem - максимальный кэшируемый объем оперативной памяти, в байтах; Scache - объем кэш-памяти, в байтах; А - ассоциативность кэш-памяти, в каналах.
Отсюда следует, что для системы с 1-Гбайт оперативной памятью и 1-Мбайт кэш-памятью с двухканальной ассоциативностью потребуется 11 бит для каждого тега. Примечательно, что собственно размер строки кэш-памяти никак не влияет на размер тега, но обратно пропорционально влияет на количество тегов. Следует понимать, что размер строки кэш-памяти не имеет смысла делать меньше разрядности системной шины данных, но многократное увеличение размера приведет к чрезмерному засорению кэш-памяти ненужной информацией и излишней нагрузке на системную шину и шину памяти. Кроме того, максимально кэшируемый объем кэш-памяти не обязан соответствовать максимально возможному устанавливаемому объему оперативной памяти в системе. Если возникнет ситуация, когда оперативной памяти окажется больше, чем может быть кэшировано, то в кэш-памяти будет присутствовать информация только из нижнего сегмента оперативной памяти. Именно такой была ситуация с платформой Socket7/Super7. Наборы микросхем для этой платформы позволяли использовать большие объемы оперативной памяти (от 256 Мбайт до 1 Гбайт), в то время как кэшируемый объем часто был ограничен первыми 64 Мбайт (речь идет о B-cache, находящемся на системной плате) по причине использования дешевых 8-бит микросхем теговой SRAM (2 бита из которых резервировалось под указатели действительности и измененности строки). Это приводило к ощутимому падению производительности.
Какая информация содержится в тегах кэш-памяти? Это информация об адресах, но как можно точно отобразить расположение строки кэш-памяти на всем пространстве кэшируемого объема оперативной памяти, используя столь незначительное количество адресных битов? Это понятие является фундаментальным в понимании принципов функционирования кэш-памяти. Рассмотрим предыдущий пример, с 11-бит тегами. Учитывая логическое сегментирование благодаря двухканальной ассоциативности, можно рассматривать данную кэш-память как состоящую из двух независимых сегментов по 512 Кбайт каждый. Представим оперативную память как состоящую из "страниц" по 512 Кбайт каждая - их будет соответственно 2048 штук. Далее, Iog2 (2048) = 11 (основание логарифма равно 2, так как возможны только два логических состояния каждого бита). Это означает, что фактически тег - не номер отдельной строки кэш-памяти, а номер "страницы" памяти, на которую отображается та или иная строка. Другими словами, в пределах "страницы" сохраняется прямое соответствие ее "строк" с соответствующими строками кэш-памяти, т. е. п-я строка кэш-памяти соответствует n-й "строке" данной "страницы" оперативной памяти.
Рассмотрим механизм работы кэш-памяти разных видов ассоциативности. Допустим, имеется абстрактная модель с восемью строками кэш-памяти и 64 эквивалентными строками оперативной памяти. Требуется поместить в кэш строку 9 оперативной памяти (заметим, что все строки нумеруются от нуля и по возрастающей). В модели с прямым отображением эта строка может занять только одно место: 9 mod 8=1 (вычисление остатка от деления нацело), т. е. место строки 1. Если взять модель с двухканальной ассоциативностью, то эта строка может занять одно из двух мест: 9 mod 4=1, т. е. строку 1 любого канала (сегмента). Полноассоциативная модель предоставляет свободу для размещения, и данная строка может занять место любой из восьми имеющихся. Другими словами, фактически имеется 8 каналов, каждый из которых состоит из 1 строки.
Ни одна из вышеуказанных моделей не позволит, разумеется, поместить в кэш больше строк, чем он физически в состоянии разместить, они лишь предлагают различные варианты, различающиеся балансом эффективности использования кэша и скорости доступа к нему.
Типы подключения кэш-памяти
Количество портов чтения-записи кэш-памяти - показатель того, сколько одновременных операций чтения-записи может быть обработано. Хотя жестких требований и нет, определенное соответствие набору функциональных устройств ЦП должно прослеживаться, так как отсутствие свободного порта во время исполнения команды приведет к вынужденному простою.
Существует два основных способа подключения кэшпамяти к ЦП для чтения: сквозной и побочный (Look-Through и Look-Aside). Суть первого в том, что при необходимости данные сначала запрашиваются у контроллера кэш-памяти самого высокого уровня, который проверяет состояние подключенных тегов и возвращает либо нужную информацию, либо отрицательный ответ, и в этом случае запрос перенаправляется в более низкий уровень иерархии кэш-памяти или в оперативную память. При реализации второго способа чтения запрос одновременно направляется как кэш-контроллеру самого высокого уровня, так и остальным кэш-контроллерам и контроллеру оперативной памяти. Недостаток первого способа очевиден: при отсутствии информации в кэше высокого уровня приходится повторять запрос, и время простоя ЦП увеличивается. Недостаток второго подхода - высокая избыточность операций и, как следствие, "засорение" внутренних шин ЦП и системной шины ненужной информацией. Логично предположить, что если для кэшей L1 оптимальна сквозная схема, то для T-cache или B-cache побочная схема может оказаться более выгодной. Для S-cache выбор неоднозначен.
Различают также локальный и удаленный кэш. Локальным называют кэш, находящийся либо в ядре ЦП, либо на той же кремниевой подложке или в корпусе ЦП, удаленным - размещенный на системной плате. Соответственно локальным кэшем управляет контроллер в ядре ЦП, а удаленным - НМС системной платы. Локальный кэш с точки зрения быстродействия предпочтительнее, так как интерфейс к удаленному кэшу обычно мультиплексируется с системной шиной. С одной стороны, когда другой ЦП захватывает общую системную шину или какой-либо периферийный контроллер обращается к памяти напрямую, удаленный кэш может оказаться временно недоступным. С другой - такой кэш легче использовать в многопроцессорных системах.
Существуют два распространенных способа записи в кэш: сквозной (Write-Through) и обратной (Write-Back) записи. В первом случае информация одновременно сохраняется как в текущий, так и в более низкий уровень иерархии кэш-памяти (или прямо в оперативную память при отсутствии такового). Во втором - данные сохраняются только в текущем уровне кэш-памяти, при этом возникает ситуация, когда информация в кэше и оперативной памяти различается, причем последняя становится устаревшей. Для того чтобы при сбросе кэша информация не была необратимо потеряна, к каждой строке кэша добавляется "грязный" бит (dirtybit, иначе известный как modified). Он нужен для обозначения того, соответствует ли информация в кэше информации в оперативной памяти, и следует ли ее записать в память при сбросе кэша.
Также следует упомянуть способ резервирования записи (writeallocation). При записи данных в оперативную память часто возникает ситуация, когда записываемые данные могут скоро понадобиться, и тогда их придется довольно долго подгружать. Резервирование записи позволяет частично решить эту проблему: данные записываются не в оперативную память, а в кэш. Строка кэша, вместо которой записываются данные, полностью выгружается в оперативную память. Так как вновь записанных данных обычно недостаточно для формирования полной строки кэша, из оперативной памяти запрашивается недостающая информация. Когда она получена, новая строка записывается, и тег обновляется. Определенных преимуществ или недостатков такой подход не имеет - иногда это может дать незначительный прирост производительности, но также и привести к засорению кэша ненужной информацией.
Увеличение кэша и тестирование INEL & AMD
Первичная причина увеличения объема встроенного кэша может заключаться в том, что кэш-память в современных процессорах работает на той же скорости, что и сам процессор. Частота процессора в этом случае никак не меньше 3200 MГц. Больший объем кэша позволяет процессору держать большие части кода готовыми к выполнению. Такая архитектура процессоров сфокусирована на уменьшении задержек, связанных с простоем процессора в ожидании данных. Современные программы, в том числе игровые, используют большие части кода, который необходимо извлекать из системной памяти по первому требованию процессора. Уменьшение промежутков времени, уходящих на передачу данных от памяти к процессору, - это надежный метод увеличения производительности приложений, требующих интенсивного взаимодействия с памятью. Кэш L3 имеет немного более высокое время ожидания, чем L 1 и 2, это вполне естественно. Хоть он и медленнее, но все-таки он значительно более быстрый, чем обычная память. Не все приложения выигрывают от увеличения объема или скорости кэш-памяти. Это сильно зависит от природы приложения.
Если большой объем встроенного кэша - это хорошо, тогда что же удерживало Intel и AMD от этой стратегии ранее? Простым ответом является высокая себестоимость такого решения. Резервирование пространства для кэша очень дорого. Стандартный 3.2GHzNorthwood содержит 55 миллионов транзисторов. Добавляя 2048 КБ кэша L3, Intel идет на увеличение количества транзисторов до 167 миллионов. Простой математический расчет покажет нам, что EE - один из самых дорогих процессоров.
Сайт AnandTech провел сравнительное тестирование двух систем, каждая из которых содержала два процессора – IntelXeon 3,6 ГГц в одном случае и AMDOpteron 250 (2,4 ГГц) – в другом. Тестирование проводилось для приложений ColdFusionMX 6.1, PHP 4.3.9, и Microsoft .NET 1.1. Конфигурации выглядели следующим образом:
Dual Opteron 250;
2 ГБ DDR PC3200 (Kingston KRX3200AK2);
СистемнаяплатаTyanK8W;
Dual Xeon 3.6 ГГц;
МатеринскаяплатаIntelSE7520AF2;
ОС Windows 2003 Server Web Edition (32 бит);
1 жесткий IDE 40 ГБ 7200 rpm, кэш 8 МБ
На приложениях ColdFusion и PHP, не оптимизированных под ту или иную архитектуру, чуть быстрее (2,5-3%) оказались Opteron’ы, зато тест с.NET продемонстрировал последовательную приверженность Microsoft платформе Intel, что позволило паре Xeon’ов вырваться вперед на 8%. Вывод вполне очевиден: используя ПО Microsoft для веб-приложений, есть смысл выбрать процессоры Intel, в других случаях несколько лучшим выбором будет AMD.
Вывод
Анализ изложенного выше материала позволяет сделать заключение, что в соответствии с каноническими теориями, современные производители широко используют кэш-память при построении новейших процессоров. Во многом, их превосходные характеристики по быстродействию достигаются именно благодаря применению кэш-памяти второго и даже третьего уровня. Этот факт подтверждает теоретические выкладки Гарвардского университета о том, что ввиду действия принципа локальности информации в современных компьютерах применение кэш-памяти смешанного типа позволяет добиться превосходных результатов в производительности процессоров и снижает частоту необходимых обращений к основной памяти.
Налицо широкие перспективы дальнейшего применения кэш-памяти в машинах нового поколения, однако существующая проблематика невозможности бесконечного увеличения кэша, а также высокая себестоимость изготовления кэша на одном кристалле с процессором, ставит перед конструкторами вопросы о некоем качественном, а не количественном видоизменении или скачке в принципах, либо огранизации кэш-памяти в процессорах будущего.
К данной работе были использованы материалы:
1. http :// www . intuit . ru / department / hardware / csorg /9/2. html
---- 9. Лекция: Организация памяти вычислительной системы
2. Э.Танненбаум,Современные операционные системы, Питер 2002.1024 с.
3. Р.Столлинз Операционные системы. М.: Вильямз, 2002. – 600 с.
4. В.Г.Олифер, Н.А.Олифер Сетевые операционные системы. Питер, 2001.- 554 с.
Оперативная память
Важной характеристикой компьютера является величина его оперативной памяти.
Оперативную память сокращенно называют ОЗУ - О перативное З апоминающее У стройство (или по-английски RAM - R andom A ccess M emory - память с произвольным доступом). Оперативная память служит для того, чтобы хранить всю информацию, с которой работает компьютер. Любая программа, с которой мы собираемся работать, записывается или как говорят "загружается" в оперативную память, и в памяти хранятся все данные и результаты вычислений, которые производятся процессором во время выполнения программы. Объем оперативной памяти влияет на скорость работы компьютера. Если объем памяти невелик, то для хранения промежуточных данных при работе программы, процессор удаляет некоторые, не нужные при данной операции, модули программы из оперативной памяти, затем удаленные модули вновь записываются в память. Все эти операции увеличивают время выполнения программ. Если оперативная память имеет достаточный объем, то никаких лишних операций процессор не производит и компьютер работает быстрее. Для работы с современным программным обеспечением компьютеры должны иметь минимальный объем оперативной памяти 32 Мб.
Информация в оперативной памяти сохраняется, пока включен компьютер.
Для ускорения операций с памятью компьютера используется быстрая кэш-память. В кэш-память записывается та часть информации оперативной памяти, которая изменяется в данный момент. Процессор прогнозирует последующие шаги при выполнении программы и заранее записывает информацию, которая для них потребуется в кэш-память. Таким образом уменьшается время поиска информации в памяти и увеличивается скорость выполнения программы.
Кэш-память бывает двух видов - внешняя и внутренняя.
Внешняя кэш-память служит для ускорения работы с оперативной памятью и реализована отдельными микросхемами.
В настоящее время используется внешняя кэш-память от 1 Мб.
Внутренняя кэш-память служит для ускорения работы с регистрами процессора и находится внутри процессора.
Внутренняя кэш-память впервые появилась в процессорах 80486. В этих процессорах внутренняя кэш-память была 8 Кб, в первых процессорах Pentium внутренняя кэш-память была от 16 Кб.
В настоящее время внутренняя кэш-память имеет два уровня - кэш 1-го уровня и кэш 2-го уровня.
В кэше 1-го уровня хранятся инструкции и данные, в кэше 2-го уровня - только данные. Кэш 2-го уровня имеет больший объем, чем кэш 1-го уровня.
BIOS - (Base Input-Output System) Базовая система ввода - вывода, проводящая первоначальные операции для включения компьютера.
При включении питания BIOS тестирует состояние компьютера и его элементов и затем передает управление компьютером центральному процессору.
BIOS реализована отдельной микросхемой, расположенной на системной плате.
Порты - это разъемы на задней панели системного блока компьютера, которые служат для соединения с компьютером периферийных устройств, таких как монитор, клавиатура, мышка, принтер, сканер, и т.д.
На иллюстрации область расположения портов выделена розовой линией.
Существуют следующие основные типы портов:
· Параллельный порт
· Последовательный порт