Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / 8_Память КОНСПЕКТ.doc
Скачиваний:
49
Добавлен:
20.03.2015
Размер:
1.33 Mб
Скачать

7.4.4. Другие способы увеличения быстродействия

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

Буферизация записи

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

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

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

Упреждающая выборка

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

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

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

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

Процессор Intel Pentium 4 поддерживает и программную и аппаратную упре­ждающую выборку. У него имеются специальные команды, копирующие блок данных в кэш заданного уровня. Средства аппаратной упреждающей выборки ко­пируют данные в кэш второго уровня, используя специальный алгоритм, кото­рый позволяет определить, насколько интенсивно они использовались прежде.

Кэш без блокировок

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

Кэш, в котором обработка промахов и команд упреждающей выборки может от­кладываться, с тем чтобы процессор мог обратиться к имеющимся в нем данным, называется кэшем без блокировок (lockup-free). Поскольку кэш способен обрабо­тать за раз лишь один промах, в него должна быть включена схема для отслежива­ния остальных промахов, ожидающих очереди на обработку. Для этого нужны специальные регистры, в которых хранилась бы информация об отложенных про­махах. Кэши без блокировок впервые появились в 1980-х годах, в компьютерах серии Cyber, производившихся компанией Control Data.

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

Соседние файлы в папке Архитектура компьютеров