Скачиваний:
74
Добавлен:
16.04.2013
Размер:
430.08 Кб
Скачать

4.4.6. Управление иерархией памяти и непротиворечивость

4.4.6.1 Иерархия памяти и подсказки

Инструкции доступа к памяти задают, обладают ли данные, к которым обращаются временным местоположением (temporal locality). Кроме того, инструкции доступа к памяти могут задавать, на какие уровни иерархии памяти влияет доступ. Это ведет к архитектурному представлению иерархии памяти (изображенному на рис.4.4) состоящему из нулевого или большего количества уровней кэша между файлами регистров и памятью, где каждый уровень может состоять из двух параллельных структур: временной структуры и не временной структуры. Заметим, что это представление применяется при доступе к данным, а не при доступе к инструкциям.

Временная структура

Уровень 1

Уровень 2

Уровень N

Временная структура

Не временная структура

Временная структура

Не временная структура

Файл регистров

Память

Не временная структура

Кэш

Рис.4.4. Иерархия памяти

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

Определены три механизма для управления размещением: подсказки (hints) местоположения, явные предзагрузки и неявные предзагрузки. Подсказки местоположения задаются с помощью инструкций загрузки, сохранения и явной предзагрузки (lfetch). Подсказки местоположения задают уровень иерархии (например, 1, 2,all). Доступ, который является временным относительно данного уровня иерархии, обрабатывается как временный относительно всех более низких уровней (имеющих больший номер). Доступ, который является не временным относительно данного уровня иерархии, обрабатывается как временной относительно всех более низких уровней. Обнаружение строки кэша ближе в иерархии, чем указано в подсказке, не понижает строку. Это позволяет точно управлять строками, использующимиlfetch,а затем и последующим сохранением того же уровня в иерархии с помощью использования загрузок и сохранений типа.nta. Например, указание.nt2подсказывает предзагрузке, что данные будут кэшированы на уровне 3. Последующие загрузки и сохранения могут указывать.ntaи оставлять данные на уровне 3.

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

Табл.4.18. Задание локальных подсказок для каждого класса инструкций

Мнемоника

Подсказка местоположения

Тип инструкции

Загрузка

Сохранение

lfetch, lfetch.fault

нет

Временное, уровень 1

х

х

х

nt1

Не временное, уровень 1

х

х

nt2

Не временное, уровень 2

х

nta

Не временное, все уровни

х

х

х

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

Временная структура

Не временная структура

Уровень 1

Уровень 2

Временная структура

Не временная структура

Уровень 3

Временная, уровень 1

Временная структура

Не временная структура

Невременная, уровень 2

Невременная, уровень 3

Невременная, все уровни

Кэш

Рис.4.5. Поддерживаемые пути размещения в иерархии памяти.

Явная предзагрузка определена в форме инструкции предзагрузки строки (lfetch, lfetch.fault). Инструкцииlfetchперемещают адресуемый байт памяти на место в иерархии памяти указанное подсказкой местоположения. Если строка уже находится на том самом или более высоком уровне иерархии, то никакого движения не происходит. Дляlfetch и lfetch.faultопределено и прямое значение и пост-инкрементрная регистровая форма. Инструкцияlfetch не вызывает никаких исключений, не влияет на поведение программы и может игнорироваться реализацией. Инструкция lfetch.faultвлияет на иерархию памяти точно также как иlfetch, но делает исключения так, как будто бы она является инструкцией загрузки одного байта.

Неявная предзагрузка основана на постинкременте адреса в инструкциях загрузки, сохранения, lfetch и lfetch.fault. Строка, содержащая постинкрементный адрес перемещается в иерархию памяти, основанную на подсказке местоположения в данной инструкции загрузки, сохранения,lfetch и lfetch.fault. Если строка уже находится на том же или более высоком уровне иерархии, то никакого перемещения не происходит. Неявная предзагрузка не вызывает никаких исключений, не влияет на поведение программы и может игнорироваться реализацией.

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

Для управления сбросом (flush) определены две инструкции:fc(flushcache) – сбросить кэш иfwb(flushwritebuffers) – сбросить буфера записи. Инструкцияfcаннулирует строку кэша на всех уровнях иерархии памяти. Если строка кэша не совместима с памятью, то она копируется в память перед аннулированием. Инструкцияfwbобеспечивает подсказку для сброса всех задержанных буферов записи в память (не происходит никакой индикации завершения).

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

Табл.4.19. Инструкции управления иерархией памяти и механизмы подсказок.

Мнемоника

Действие

окончания .nt1и.ntaдля загрузок

Подсказки, используемые загрузкой

окончание .ntaдля сохранений

Подсказки, используемые сохранением

предзагрузка строки с постинкрементной адресацией для загрузок и сохранений

Подсказка предзагрузки

lfetch, lfetch.faultс подсказками.nt1, .nt2и.nta

Строка предзагрузки

fc

Сбросить кэш

fwb

Сбросить буфер записи

Соседние файлы в папке M9