Алгоритмы кэширования современных микропроцессоров

 

Рассмотрим память, как 2х уровневую структуру (верхнюю и нижнюю). Например, кэш 1го уровня и кэш 2го уровня.

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

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

Все алгоритмы делятся на 2 большие группы:

1 Физически не реализуемые (используют информацию о будущем обращении)

2 Физически реализуемые (используют историю процессора)

С помощью (1) можно оценить качество алгоритмов (2).

Физически не реализуемые

1 Алгоритм Михновского-Шора (сов. уч.): при каждом замещении удаляется строка, обращение к которой будет позже, чем к любой другой (реализуется минимально-возможная последовательность замещения) – МИН-алгоритм.

2 ОПТ (оптимальный) – известна вероятность обращения к строкам памяти. Замещается строка, вероятность обращения к которой не больше, чем к любой другой. Среднее число кэш промахов минимально.

 

Физически реализуемые

Алгоритмы выбора строки из кэш памяти.

1 Алгоритм случайного замещения (СЗ;Random)

2 Наиболее давно использованная (НДИ). Удаляется строка, к которой дольше всего не было обращения (LRU).

3 По времени первого появления (FIFO). Удаляется строка, появившаяся раньше всех.

4 LIFO (Last In First Out).

Существует группа алгоритмов, обладающих адаптивными свойствами.

 

1 Карабкающаяся строка

Все строки в КЭШе образуют некоторую последовательность, которая пронумерована. При каждом общении последовательность изменяется следующим образом.

St: j1, j2,…, jm–1, jm,…, jr

qt­ – номер строки основной памяти.

Строка, к которой обращаются меньше всего постепенно съезжает в конец и при промахе заменяется.

Это разновидность НДИ алгоритма.

 

2 Рабочий комплект (РК)

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

- модифицированные строки

- не модифицированные строки

Алгоритм: «Первый вышел из РК, первый удаляется из кэша». Предпочтение отдается 2ой очереди.


1.2 Зависимость по данным и переименование регистров при параллельной обработке

 

Возможность выполнения программы в измененной последовательности ограничивается 2мя ограничителями:

1. зависимость по управлению (ЗПУ) – наличие команд условных переходов;

2. зависимость по данным (ЗПД) – ограниченность ресурсов.

 

Переименование регистров (ЗПД)

 

Это архитектурная особенность, направленная на преодоление зависимости по данным.

Существует 4 зависимости:

1. RAR – чтение после чтения

2. RAW – чтение после записи

3. WAR – запись после чтения

4. WAW – запись после записи

Цель изучения зависимостей: распараллелить процессы, изменить последовательность команд для обеспечения более полной загрузки оборудования, повышение быстродействия.

Пример.

 
 


Move r3, r7

 

Lw r8, (r3)

 

Add r3, r3, 4

 

Lw r9, (r3)

 

Некоторые зависимости являются несущественными, например, зависимость RAR.

Зависимости WAR и WAW могут быть устранены.

Существенной является только 1 зависимость – RAW.

Причины возникновения лишних зависимостей:

1. неоптимальный программный код;

2. ограниченность ресурсов.

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

Логические ресурсы – те, которые определяют текст программы, физические – реально существующие в процессоре.

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

Существует несколько подходов решения программы, представленной в примере.

Имеется логический файл (набор регистров) и физический файл. Физический больше логического и при необходимости переименования из файла берется свободный регистр и в него заносится значение из программы.

 

Move r0, r7

Lw r8, (r0)

Add r1, r0, 4

Lw r9, (r1)


1.3 Принципы конвейеризации. Синхронный и асинхронный конвейер.

 

Рассмотрим процедуру рабочего цикла и последовательность действий для основных команд. Можно выделить 5 этапов рабочего цикла.

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

Конвейер – набор устройств, соединенных цепочкой так, что результат выполнения операций с выхода первого блока поступает на вход следующего блока.

Существуют различные виды конвейеров.

 

Синхронный конвейер операций

Он работает в принудительном темпе и существует единое время выполнения каждого этапа (время такта).

Время такта = времени выполнения самой сложной операции.

, где ti – время операции.

Продолжительность выполнения 2х смежный операции должна быть больше времени такта.

Этапы

 
 


1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5 6 7 8 9 10 такты

 

Рост производительности (теоретически) = количеству этапов (сколько этапов во столько раз возрастает)

Реальная производительность ниже. На это влияют 3 причины:

1. начальная загрузка и конечная выгрузка(пустые места в схеме)

2. разная длительность команд

3. наличие команд условного перехода (основная причина снижения производительности конвейерной обработки, с которой борются)

При выполнении условного перехода на 1 команду теряем 1 такт и т.д. При переходе на величину больше 5 команд получаем последовательную обработку.

Если устройство управления при выборе направления ветвления ожидает формирование признака результата предыдущей команды, то также происходит простой (в примере, формирование признака результата-6й такт, анализ признака-5й такт).

В первых микропроцессорах конвейер при появлении команд условного перехода просто останавливался.

В современных микропроцессорах вычислительный процесс не останавливается, выполняется спекулятивный переход (попытка сделать переход (угадать) с выгодой для себя), т.е. предсказание ветвлений.

 

Асинхронный конвейер операций

 

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

I – выборка участка программы

II – распаковка

III – выборка операндов (tп – время паузы)

IV – операции в АЛУ

V – запись результата

Паузы возникают из-за неготовности блоков (источника или приемника).

Принципы конвейеризации

Первоначально с точки зрения конвейера процессоры были скалярными, т.е. имели 1 конвейер. Начиная с процессора Pentium(5е поколение), у процессоров стало 2 конвейера.

Эти 2 конвейера неравнозначны (U и V).

U – главный конвейер (команды идут всегда).

По второй ветви идут только целочисленные операции, согласованно с основным.

При переходе к процессорам следующего 6го поколения подход к конвейеру изменился.

BTB0
BTB1
IFU0
IFU1
IFU2
ID0
ID1
ROB RD
RAT
RS

 

P0 P1 P2 P3 P4

 

ROB WB
RRF

Увеличилось число ступеней с 5 до 13.

Весь конвейер можно условно разбить на 3 большие части:

1. препроцессор – здесь программы выполняются в соответствии с программным кодом;

2. ядро с неупорядоченным исполнением – команды выполняются в порядке, удобном для максимальной загрузки устройств.

3. упорядочивающее выходное устройство – данные и результаты вычислений выгружаются в порядке, задаваемым программой.

BTB – блок предсказания ветвлений

IFU – блок выборки инструкции

ID – блок декодирования

ROB RD – переупорядочивающий буфер чтения

RAT – блок выделения ресурсов и переименования регистров

RS – станция резервирования

P – порты используемых устройств

ROB WB – переупорядочивающий буфер записи

RRF – буфер регистров

 

Блок предсказания ветвлений содержит информацию о выполненных ранее командах условного перехода.

Инструкции предварительно выбираются с помощью блока предвыборки большими блоками из памяти и предварительно декодируются.

Блок дешифрации за каждый такт работы конвейера может декодировать до 3х инструкций. Причем команда на языке ассемблера переводится в простые микрооперации µ-ops (u-ops), причем в 2х потоках могут декодироваться команды, содержащие 1 микрооперацию, а в третьем – 4 µ-ops. Такой подход характерен для RISC-архитектуры.

Простые команды, содержащие 1 микрооперацию: команды типа «регистр-регистр».

2 микрооперации: запись и простые команды чтения.

4 микрооперации: чтение, модификация, запись.


1.4 Защищенный режим 32-разрядных процессоров

 

ПР – процессор

ФП – физическая память

УК – указатель

СЕЛ – селектор

СМ – смещение

СФА – сумматор физического адреса

РД – регистр дескриптора

ФА – физический адрес

С – сегмент

ТДС – таблица дескриптора сегмента

ДС – дескриптор сегмента

РС – размер сегмента

БАС – базовый адрес сегмента

АС – атрибуты сегмента

 

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

Процессор имеет несколько таблиц дескрипторов:

- локальная (Local Description Table (LTD));

- глобальная (GDT);

- таблица прерываний (IDT).

С каждой из таблиц связан соответствующий регистр процессора.

Загрузка дескрипторов выполняется с помощью привилегированных команд операционной системы. Глобальная таблица содержит доступные всем задачи. Локальная – только собственные задачи.

Обычно 4х уровневую систему привилегий рисуют с помощью коелц защиты.

PL – уровень привилегий:

0 – ядро ОС;

1 – системные сервисы;

2 – расширения ОС;

3 – приложения.

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

Существует несколько элементов задачи уровня привилегий.

В регистре CS задается CPL – текущий уровень привилегий данной программы. Если CPL=0, то она может обращаться ко всем сегментам, описанным в глобальной таблице дескрипторов. Если он =3, то задача с самым низким уровнем привилегий.

Поле атрибутов сегмента содержит подполе DPL – поле привилегий дескриптора (все они занимают 2 бита (0-3)). Если DPL=0, то соответствующий дескриптор самый защищенный, к нему может обратиться задача с CPL=0. DPL=3 – обращаются все.

Привилегии селектора RPL – запрошенный уровень привилегии.

Существуют и другие уровни привилегий.

 

Переключение задач

Характерно для многозадачных систем.

Сохраняет состояние процессора и связь с предыдущей задачей и загружает состояние новой задачи.

Переключение задач происходит по инструкции межсегментного перехода и по прерыванию. В оперативной памяти имеется сегмент состояния задачи (TSS). В составе процессора имеется специальный регистр задач (RS). Он имеет селектор, который ссылается на дескриптор текущего TSS. При переключении задач достаточно загрузить новый селектор в регистр задачи.

 

Сегментация

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

Логический (виртуальный) состоит из селектора и эффективного адреса offset.

Линейный адрес образуется сложением базового адреса сегмента и смещения.

Физический получается из линейного после преобразования страничной переадресации.

ЭА – эффективный адрес

ЛОГ А – логический адрес

ЛА – линейный адрес

ФА – физический адрес

ВА – вычисление ЭА

СР – сегментный регистр

БС – блок сегментации

БСП – блок страничной переадресации

ФП – физическая память

ИДЛ (В) А – индекс дескриптора логического (виртуального) адреса

 

EA=Base+Index*Scale+Displ

В общем случае эффективный адрес вычисляется по этой формуле.

Displ – смещение – число, включенное в команду

Base – содержимое базового регистра. Обычно используется для адресации начала массива.

Index – содержимое индексного регистра (для выбора элемента массива)

Scale – размер элемента массива (множитель, задаваемый кодом).

Некоторые слагаемые в формуле могут отсутствовать.

 

Страничное управление памятью

Базовый механизм страничного управления использует 2х уровневую табличную трансляцию линейного адреса в физический.

 

КСТР – каталог страниц, ТСТР – таблица страниц, СТР ФП – страница физической памяти, АН – адрес начала, DIR – смещение

 

Для каждой задачи имеется регистр CR3, он хранит физический адрес каталога страниц. К этому адресу добавляется полк DIR из линейного адреса и мы обращаемся к определенной строке. В ней хранится адрес начала таблицы страниц. Складывая его с TABLE, получаем нужную строку таблицы, где находится базовый адрес страницы. Сложив его с offset выбираем нужную ячейку.

Недостаток – низкое быстродействие.

Обращение при каждой операции доступа к памяти к 2м таблицам, расположенным в памяти, существенно снижает производительность. Поэтому используется буфер ассоциативной трансляции (блок быстрой переадресации) (TLB). Он применяется для хранения интенсивно используемых строк таблицы. В первых 32х разрядных процессорах он хранил 32 строки. Он организован в виде 4х канальной наборно-ассоциативной кэш памяти. При этом получается коэффициент кэш попаданий 98%.

 

Режим виртуального 8086 (V86)

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

Все программы, выполняемые в режиме V86, имеют уровень привилегий 3, то есть минимальные привилегии (реальный режим подразумевает уровень привилегий 0). Таким образом, программы в V86 выполняются со всеми проверками защиты.


<== предыдущая лекция | следующая лекция ==>
Динамическая маршрутизация. | Числовая последовательность




Дата добавления: 2017-09-19; просмотров: 674;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.048 сек.