Академический Документы
Профессиональный Документы
Культура Документы
КОМПЬЮТЕРА
И ПРОЕКТИРОВАНИЕ КОМПЬЮТЕРНЫХ СИСТЕМ
ЧЕТВЕРТОЕ ИЗДАНИЕ
Д. ПАТТЕРСОН
ДЖ. ХЕННЕССИ
С ^П П ТЕ Р
С Е Р И Я
НЛПССИНП C0IT1PUTER SCIENCE
О ^П П ТЕ Р
Davi d A. Pa t t e r s o n
John L. He nne s s y
COMPUTER
ORGANIZATION
AND DESIGN
4th Edi t i on
E L S E V IE R
HARCCMKR COmPUTER SCIENCE
АРХИТЕКТУРА
КОМПЬЮТЕРА
И ПРОЕКТИРОВАНИЕ КОМПЬЮТЕРНЫХ СИСТЕМ
ЧЕТВЕРТОЕ И З Д А Н И Е
Е ^ П П Т Е Р
Москва • Санкт-Петербург ■Нижний Новгород • Воронеж
Ростов-иа-Дону ■Екатеринбург ■Самара ■Новосибирск
Киев • Харьков ■Минск
2012
ЬЫ . 32.973 2-02
УШ 004 3
ГСО
Паттерсон Д ., ЖаттевтЩш.
П20 Архитектура ш ш м я а р а ■ ц ю огпфование компьютерных систем. Классика
Computers S d e e e i 4 - е ш т — СПБ.. Питер, 2012. — 784 с.: ил.
Права на издание получены по соглашению с Elsevier Inc. Все права защищены. Никакая часть данной книги не
может быть воафоизеедена а какой бы то ни было форме без письменного разрешения владельцев авторских
прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как
надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство ие
может гарантировать абсолютную точность и полноту приводимых сведений и ие несет ответственности за
возможные ошибки, связанные с использованием книги
Предисловие ............................................................................................................................ 9
П р е д и с л о в и е .................................................................................................. 9
Об этой книге
Мы уверены, что обучение в сфере науки и техники компьютерной обработки
данных должно отражать текущее состояние дел и давать введение в принципы,
формирующие информационные технологии. Мы также полагаем, что читатели
в любой специализированной области компьютерной обработки данных должны
понимать организационные парадигмы, определяющие возможности, производи
тельность и, в конечном счете, успех компьютерных систем.
Современная компьютерная технология требует от профессионалов любой
компьютерной специальности умения разбираться как в аппаратном, так и в про
граммном обеспечении. Взаимодействие аппаратного и программного обеспечения
на множестве уровней также предлагает структуру для понимания фундаменталь
ных основ вычислительной техники. Независимо от того, чем вы интересуетесь:
оборудованием или программным обеспечением, информатикой или электрони
кой. — в компьютерной организации и конструировании используются одни и те
же основные идеи. Поэтому в данной книге акценты расставлены на демонстрации
взаимоотношений между аппаратным и программным обеспечением и на кон
центрации вашего внимания на концепциях, положенных в основу современных
компьютеров.
Недавний скачок от однопроцессорных систем к многоядерным микропроцес
сорам подтверждает разумность такого подхода, выбранного еще в первом издании.
Программисты, конечно, могли бы проигнорировать тот или иной совет и всецело
положиться на разработчиков компьютеров, но для создателей компиляторов
и проектировщиков микросхем эти времена закончились. Чтобы программы ра
ботали быстрее, они должны использовать параллельную обработку. Хотя целью
позволить программистам работать, даже ничего не подозревая о параллельной
природе исходного оборудования, задались многие исследователи, на реализацию
этой мечты уйдут долгие годы. Мы считаем, что по крайней мере в следующем
десятилетии большинству программистов придется разбираться в интерфейсе
аппаратного и программного обеспечения, если они хотят добиться эффективного
выполнения программ на параллельных компьютерах.
10 Предисловие
Аудитория читателей этой книги включает тех, кто имеет небольшой опыт
в программировании на ассемблере или в разработке алгоритмов и нуждается
в понимании основ компьютерной организации, а также тех, кто уже имеет опреде
ленную подготовку в программировании на ассемблере и в разработке алгоритмов
и собирается изучить вопросы конструирования компьютера или разобраться в том,
как работает система и почему она работает именно таким образом.
О других книгах
Некоторые читатели уже знакомы с книгой «Computer Architecture: A Quantitative
Approach», которую часто называют «Хеннесси и Паттерсон». (Эту же книгу, в свою
очередь, часто называют «Паттерсон и Хеннесси».) Причиной, побудившей нас на
писать предыдущую книг)', было желание дать описание принципов компьютерной
архитектуры с использованием незыблемых основных технических принципов
и количественных соотношений стоимости—производительности. Чтобы создать
атмосферу реальных конструкций, мы использовали подход, сочетающий примеры
и оценки, основанные на изучении коммерческих систем. Наша цель заключалась
в демонстрации того, что компьютерную архитектуру можно изучить, используя не
описательный подход, а количественные методологии. Книга была предназначена
для настоящего компьютерного профессионала, желающего получить детальное
представление о компьютерах.
Большинство читателей згой книги не собирались становиться разработчиками
компьютеров. И тем не менее производительность и снижение энергопотребления
будущих программных систем будут сильно зависеть от того, насколько хорошо
разработчики программного обеспечения понимают основные технологии работы
компьютерного оборудования в той или иной системе. Поэтому твердое знание ос
нов, представляемых в данной книге, будет необходимо создателям компиляторов,
разработчикам операционных систем, программистам баз данных и большинству
других разработчиков программного обеспечения. Аналогичным образом и кон
структорам оборудования следует четко понимать влияние результатов их работы
на работу прикладных программ.
Мы понимали, что эта книга должна была представлять собой нечто большее,
чем подгруппа материалов из «Computer Architecture», и весь материал книги
тщательно пересмотрен и соответствует интересам разнообразной аудитории чита
телей. Мы настолько были довольны результатами своей работы, что пересмотрели
последующие издания «Computer Architecture», чтобы удалить из них основную
часть вводного материала.
того, чтобы читатель мог разглядеть лес, а не множество деревьев. Раздел «Само
проверка» помогает читателям убедиться в усвоении материала.
Поддержка преподавателей
Мы собрали большое количество вспомогательного материала, помогающего пре
подавателям вести курс с использованием данной книги. Реш ения упражнений,
короткие тесты по главам, иллюстрации из книги, примечания и слайды для лекций
и другие материалы можно получить у издателя. Более подробную информацию
можно найти на веб-сайте textbooks.elsevier.com/9780123744937.
Заключительные комментарии
Если вы прочитаете раздел благодарностей, то увидите, что мы прошли длинный
путь исправления ошибок. Поскольку книга не раз переиздавалась, у нас была воз
можность внести множество поправок.
Это издание отмечено перерывом в долговременном сотрудничестве между Хен
несси и Паттерсоном, начавшемся в 1989 году. К сожалению, должность президента
в одном из самых больших в мире университетов не позволила Хеннесси прини
мать активное участие в работе над новым,изданием. Оставшийся в одиночестве
автор почувствовал себя жонглером, всегда выступавшим с партнером, которого
внезапно вытолкнули на манеж для сольного выступления. Следовательно, люди,
упомянутые в разделе благодарностей, и коллеги из Беркли сыграли еще более
значительную роль в формировании содержимого данной книги. Тем не менее на
сей раз ответственность за весь материал, который вы собираетесь читать, несет
только один автор.
Дэвид А. Паттерсон
От издательства
Ваши замечания, предложения и вопросы отправляйте по адресу электронной по
чты comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
Подробную информацию о наших книгах вы найдете на веб-сайте издательства
http://www.piter.com.
Глава 1
Компьютерные абстракции
и технологии
1.1. Введение
Добро пожаловать в эту книгу! Мы рады представившейся возможности по
делиться с вами темн возвышенными чувствами, которые вызывают у нас мир
компьютерных систем. В этом мире нет места скуке и застою и новые идеи не
прячут под сукно, напротив! Компьютеры являются продуктом невероятно бурно
развивающейся индустрии информационных технологий, все направления кото
рой составляют почти 10% валового национального продукта США и все расчеты
в которой отчасти строятся на ускоренном совершенствовании компьютерных
технологий, обещанном законом Мура. Эта весьма необычная индустрия погло
щает инновации на одном дыхании. За последние 25 лет было создано множество
новых компьютеров, чье появление представлялось не иначе как революционными
переворотами в компьютерной индустрии, и недолговечность этих революций
обусловливалась лишь тем, что кто-то другой создавал еще более передовой ком
пьютер.
Эта инновационная гонка, начало которой было положено созданием электрон
ных вычислительных машин в конце 40-х годов прошлого века, привела к бес
прецедентным успехам. Если бы, к примеру, транспортная индустрия развивалась
такими же темпами, сегодня мы смогли бы добраться из Нью-Йорка до Лондона
примерно за секунду, заплатив за это всего несколько центов. Представьте на мгно
вение, как подобное усовершенствование могло бы изменить жизнь человечества:
можно было бы жить на Таити, работать в Сан-Франциско, а по вечерам выбираться
в Москву, посмотреть балет в Большом театре, - вы только оцените последствия
такого изменения!
Компьютеры привели цивилизацию к третьей, информационной революции, ко
торая встала в один ряд с промышленной и сельскохозяйственной. Преумножение
интеллектуальной мощи и расширение возможностей человечества в этой сфере
сстсс гвенным образом отразились на его повседневной жизни, изменив способы
1.1. Введение 19
Компонент аппаратного или про Как этот компонент влияет Где освещается
граммного обеспечения на производительность эта тема?
Алгоритм Определяет как количество инструк В других книгах!
ций на уровне исходных кодов, так и
количество выполняемых операций
ввода-вывода
Языки программирования, компиля Определяют количество инструкций Главы 2 и 3
торы и архитектура компьютера для каждой инструкции
на уровне исходного кода
Процессор и система памяти Определяют скорость выполнения Главы 4, 5 и 7
инструкций
Система веода-выеода (оборудова Определяет, насколько быстро Глава 6
ние и операционная система) могут быть выполнены операции
ввода-вывода
Самопроверка
Подразделы Сачопроверка предназначены для того, чтобы помочь читателям оце
нить, насколько ими усвоены основные понятия, представленные в главе, и убе
диться в том, что им понятны значения этих понятий. Некоторые вопросы этих
подразделов требуют простых ответов, но часть из них предназначена для обсуж
дения в группе. Ответы на конкретные вопросы могут быть найдены в конце главы.
Вопросы подраздела Самопроверка появляются только в конце раздела, н если вы
уверены в том, что усвоили весь материал, их можно пропустить.
1. В разделе 1.1 показано, что количество встроенных процессоров, проданных
в каждом году, существенно превышает количество проданных процессоров
для настольных компьютеров. Мох<ете ли вы подтвердить или опровергнуть
это наблюдение на основе своего собственного опыта? Попробуйте подсчитать
количество встроенных процессоров в своем доме. Как это количество соотно
сится с количеством настольных компьютеров в вашем доме?
1 Как уже упоминалось, на производительность программы влияет как про
граммное, так и аппаратное обеспечение. Можете ли вы привести примеры,
когда главной причиной снижения производительности стаю что-нибудь из
нижеперечисленного?
26 Глава 1. Компьютерные абстрил и » и технологии
♦ Выбранный алгоритм
♦ Язык программироидння или компилятор
♦ Операционная система
♦ Процессор
♦ Система и устройства ввода-вывода
на С, C++, Java или Visual Basic, в инструкции, которые может выполнять обору
дование. Учитывая сложность современных языков программирования и простоту
инструкций, выполняемых оборудованием, транслятор языка высокого уровня
в инструкции оборудования представляет собой весьма непростую программу.
Краткий обзор процесса трансляции будет дан в этой главе, а более подробно этот
вопрос будет рассмотрен в главе 2.
Прикладные программы
Системные программы
Оборудование
(аппаратное
обеспечение!
(системное программное
обеспечение)
(прикладное программное
обеспечение)
I
Компилятор
Программа swap;
на языке muli $2, $5,4
ассемблера add $2. $4,$2
(для MPPS- lw $15,0($2)
процессора) lw $16,4($2)
SW $16,0($2)
sw $15,4($2)
jr $31
„L
Ассемблер
Доичная 00000000101000010000000000011000
программа 00000000000110000001100000100001
на машинном 1000110001 юооюоооооооооооооооо
языке 1000I 1001111001000000000000001оо
(для MIPS- 101011001111001ооооооооооооооооо
процессора) 10101100011000100000000000000100
00000011111000000000000000001000
Вас. 1.3. Программа на языке С компилируется а программу на языке ассемблера, а эа-
шт ассемблируется а двоичный машинный язык. Хотя здесь показана двухэтапная транс-
авам с языка высокого уровня в двоичный машинный язык, некоторые компиляторы исключают
Фамежуточный этап и выдают двоичный машинный код напрямую. Более подробно эти языки
и такая программа будут рассмотрены в главе 2
Самое важное
К пяти классическим компонентам компьютера относятся: устройства ввода,
вывода, память, операционный блок и блок управления, причем два последних
компонента иногда объединяются и называются процессором. На рис. 1.4 пока
зана стандартная структура компьютера. Эта структура не зависит от технологии
изготовления оборудования: любую часть любого компьютера из прошлого или
настоящего можно отнести к одной из этих пяти категорий. Чтобы помочь вам
постоянно держать перед глазами эту структуру, пять компонентов компьютера
показаны на первых страницах каждой из следующих глав, с выделением той
части, которой посвящена конкретная глава.
Интерфейс
Анатомия мыши
Идея мыши пришла мне в голову во время слуша
ний на компьютерной конференции. Речь доклад
чика была настолько скучной, что я размечтался
и придумал это устройство.
Д уг Энгельбарт
Благодаря дисплею я посадил самолет на палубу
движущегося авианосца, видел, как ядерная ча
стица попадала в электростатическую ловушку,
летал на ракете с околосветовой скоростью и на
блюдал за компьютером, раскрывающим самые
сокровенные детали своей работы.
Ливан Сазерленд, *отец» компьютерной графи
ки, американский ученый, 1984 год
Хотя сегодня многие пользователи воспринимают мышь как нечто само собой
разумеющееся, идея использования такого указывающего устройства, как мышь,
впервые была продемонстрирована в качестве исследовательского прототипа Дугам
Энгельбартом (Doug Engelbart) в 19G7 году.
Компьютер Alto, вдохновивший на создание всех рабочих станций, а также
операционных систем Macintosh и Windows, включал мышь как указывающее
устройство еще в 1973 году. В 90-е годы прошлого века мышью и новым пользова
тельским интерфейсом на основе графических дисплеев обзавелись все настольные
компьютеры.
Самая первая мышь была электромеханической, в ней использовался большой
шар, перекатывающийся по поверхности. При этом счетчики координат х н у на
ращивали свои значения. Скорость приращения показателя каждого счетчика
говорила о том, насколько быстро перемещалась мышь.
На смену электромеханическим мышам практически повсеместно пришли более
новые, оптические мыши. Эти устройства по своей сути являются миниатюрными
оптическими процессорами, включающими светодиод, обеспечивающий подсвет
ку, крошечную черно-белую камеру и простой оптический процессор. Светодиод
подсвечивает поверхность под мышью, камера благодаря этой подсветке делает
1500 снимков в секунду. Последовательные снимки отправляются оптическому
процессору, который сравнивает изображения и определяет, в какую сторону
и насколько быстро была перемещена мышь. Замена электромеханической мыши
электрооптической является примером типичного явления, когда удешевление
и повышение надежности электроники приводит к тому, что чисто электронные
решения заменяют устаревшие электромеханические технологии. Чуть позже будет
показан еще один пример —флэш-память.
Пиксел
Наименьший отдельный элемент изобра
жения. В состав экранов входят от несколь
ких сотен тысяч до нескольких миллионов
пикселов, сведенных е матрицу,
1.3. Что скрывается под крышкой корпуса компьютера 35
Буфер кадра
Vo
V,
Х0 X,
Рис. 1 .6 . Каждая координата в буфере кадра, показанном слева, определяет оттенок
тонки с соответствующей координатой для растрового сканирующего ЭЛТ-дисплея, по
казанного справа. Пиксел (ХО, Y0) содержит конфигурацию битов 0011, определяющую более
светлый тон, чем конфигурация битов 1101 в пикселе (X I, Y1)
Рис. 1.7. Внутреннее устройство ноутбука с рис. 1.5. Коробка с белой наклейкой с ле
вого края — это жесткий диск на 100 Гбайт с интерфейсом SATA, а коробка с правого края —
DVD-привод. Пространство между ними — это место для аккумулятора ноутбука. Неболыио<
пространство чуть выше аккумуляторного отсека предназначено для DIMM-модулей памяти. Ш
рис. 1.8 изображение DIMM-модулей, вставляемых снизу, дано крупным планом. Выше аккуму
ляторного отсека и DVD-привода находится печатная плата (плата ПК), называемая материнской
которая содержит основную часть электронной начинки компьютера Ява круглых предмет!
в верхней части фотографии - это вентиляторы в корпусах. Процессор — это большой выпуклы!;
прямоугольный объект, расположенный чуть ниже левото вентилятора,
фотография любезно предоставлена администрацией сайта OtherWorldComputing.com
1.3. Что скрывается под крышкой корпуса компьютера 37
Рис. 1.8. увеличенный фрагмент ноутбуке, на котором видны модули памяти. Основная
память состоит из одного или нескольких небольших модулей, показанных в левой части фото
графии. Пространство для аккумулятора расположено справа. DRAM-чипы установлены на
платах (называемых D IM M -модулями — от dual inline memory modules — модули памяти с двух
рядным расположением выводов), а затем вставлены в контактные колодки.
Фотография любезно предоставлена администрацией сайта OtherWorldComputing.com
Ишмвиимй Н р«у
im B S S IC ?&?"'
12в ратр|>диый блок
арифметики
с плавающей точкой
Етлок Кми
Кэш да н н ы х
ПСМВ уровня
5} Общий ИМЯ
у р о в н я L1
L2 Ядро 2
кэш Блок б ло* 512
уровня м спопиения
Ж ЕГ Кбайт
Блок
и з в л е ч е н и я - ц е - Кэыик-
Ц 2 Мбайт кодирояати струкций
M TW HM B у с о в и я L1
Северный мост
Ядро 4 Ядро 3
эоиэмадител*-
■КМ. ИИ И ИГ ■■ ■V-*
ран1и0
ттпи
ДДНЬЬА
Самое важное
Как аппаратное, так и программное обеспечение состоит из иерархических уров
ней, и каждый уровень скрывает подробности от вышестоящего уровня. Этот
принцип абстракции является способом справиться со сложностью компьютерных
систем, как для разработчиков аппаратной части, так и для разработчиков про
граммного обеспечения. Ключевым интерфейсом между уровнями абстракции
является архитектура набора инструкций — интерфейс между аппаратурой и низ
коуровневым программным обеспечением. Этот абстрактный интерфейс позво
ляет многим реализациям, разным по стоимости и производительности, работать
с одинаковым программным обеспечением.
с обеих сторон покрыты материалом для магнитной записи, похожим на тот матери
ал, который используется в магнитофонных кассетах или видеолентах. Для чтения
и записи информации на жестком диске имеется подвижный элемент, содержащий
небольшую электромагнитную катушку, называемую головкой итения-записи,
которая находится непосредственно над поверхностью. Весь привод постоянно
находится в закрытом состоянии, что позволяет контролировать состояние его
внутренней среды и что, в свою очередь, позволяет головкам диска быть ближе
к поверхности диска.
Диаметр жестких дисков сегодня варьируется более чем в три раза, от одного
до трех с половиной дюймов. С годами диаметр уменьшался. Новые форм-факторы
дисков понадобились всем устройствам: рабочим станциям, серверам, персональ
ным компьютерам, ноутбукам, КПК и цифро
вым видеокамерам. Обычно самые большие
Гигабайт
диски обладают самой высокой производитель
Обычно в одном гигабайте насчитывается
ностью, а самые маленькие имеют самую низ 1 073 741 824 (210) байт, хотя эта величина
кую стоимость. При этом стоимость хранения для некоторых систем связи и вторичных
одного гигабайта данных имеет разное значе систем хранения данных переопределена
и означает 1 000 000 000 (10е) байт. Анало
ние. Хотя большинство жестких дисков, как гично этому, в зависимости от контекста
и тот диск, что показан на рис. 1.7, находятся мегабайт может означать либо 2?с, либо
внутри компьютеров, могут быть также жесткие 101- байт,
42 Глава 1. Компьютерные абстракции и технологии
Самопроверка
♦ Полупроводниковая DRAM-память и дисковый накопитель существенно от
личаются друг от друга. Опишите основные отличия по каждой из следующих
характеристик: энергозависимости, времени доступа к данным и стоимости.
1.4. Производительность
Оценить производительность компьютера бывает довольно непросто. Разнообразие
и сложность современных программных систем в сочетании с широким спектром
технологий улучшения производительности, применяемых разработчиками обо
рудования, сделали оценку производительности еще сложнее.
При выборе компьютера из нескольких разных моделей производительность
считается весьма важным свойством. Покупателям, а следовательно и разработчи
кам, важна точность оценки и сравнения различных компьютеров. Знают об этом
и продавцы компьютеров. Зачастую продавцам хочется представить компьютер
в наилучшем свете, независимо от того, отвечает ли он запросам потребителя. По
этому при выборе компьютера нужно знать, как наилучшим образом определить
уровень производительности и какие ограничения существуют при измерении
производительности.
Год онедреиия
Рис. 1.11. Рост емкости DRAM-чипое. Значения по оси Y выражены в килобитах. Произво
дители DRAM вчетверо увеличивали емкость каждые три года — 60% в год на протяжении
20 лет. В последние годы темпы роста снизились и стали близки к удвоению емкости каждые
два-три года
Определение производительности
Что мы имеем в виду, когда говорим, что один компьютер по сравнению с другим
обладает более высокой производительностью? Хотя этот вопрос может показаться
очень простым, приводимая здесь аналогия с пассажирами самолетов показывает,
насколько коварен может быть вопрос о производительности. В табл. 1.2 показа
ны обычные пассажирские самолеты, а также их крейсерская скорость, дальность
и вместимость. Если нужно узнать, какой из самолетов, перечисленных в таблице,
обладает лучшей производительностью, сначала следует определить само понятие
48 Глава 1. Компьютерные абстракции и технологии
Пропускная
Крейсерская
Дальность, способность,
Самолет Вместимость скорость,
миль пассажиров х
миль в нас
Упражнение
Пропускная способность н время отклика
К чему приведут следующие изменения в компьютерной системе: к увеличению пропускной
способности, уменьшению времени отклика или и к тому и к другому?
• Замена процессора более быстродействующим.
• Добавление процессоров к системе, которая использует несколько процессоров для раз
деления задач, например для проведения поиска во Всемирной паутине.
Ответ
Уменьшение времени отклика почти всегда увеличивает пропускную способность. Следо
вательно, в первом случае улучшатся как показатели времени отклика, так и показатели
пропускной способности. Во втором случае ни одна из задач не будет выполняться быстрее,
следовательно, повысится только пропускная способность.
Но если бы во втором случае время, требуемое на обработку, было сопоставимо с пропускной
способностью, система могла бы заставить запросы выстроиться в очередь. В таком случае
повышение пропускной способности могло бы также улучшить время отклика, поскольку
оно уменьшило бы время ожидания в очереди. Таким образом, на многих реально существу
ющих компьютерных системах изменение одного показателя - либо времени выполнения,
либо пропускной способности зачастую влечет за собой изменение и другого показателя.
1 1
---------------------------- > -----------------------------.
Время выполнения v Время выполнения у
мы будем использовать фразу <Хя п раз быстрее, чем Y* или использовать равно
ценную фразу «Скорость X в я раз больше скорости Y», что означает:
Производительность..
---------------------------- = и.
Производительность.,
Упражнение
Относительная производительность
Если компьютер А выполняет программу за 10 секунд, а компьютер В выполняет ту же про
грамму за 15 секунд, то насколько А быстрее В?
Ответ
Мы знаем, что А в л раз быстрее, чем В, если:
Производительность Л Время выполнения 8
Производительность fl Время выполнения ,
тИ
и А поэтому в 1,5 раза быст рее, чем В.
означает, что
Производителыюсть.
------------- — ----------- “ ■= Производительностьд
Оценка производительности
Оценочным критерием компьютерной производительности является время: ком
пьютер. выполняющий тот же объем работы за меньшее время, является более
быстрым. Время выполнения программы оценивается в секундах, затраченных на ее
выполнение. Но время может быть определено и другими способами, в зависимо
сти от того, что берется в расчет. Наиболее простые —время выполнения процесса,
вре.мя отклика или общее затраченное время. Эти понятия означают полное время,
затраченное на выполнение задачи, включая обращения к диску, обращения к памя
ти, работу устройств ввода-вывода, издержки, связанные с работой операционной
системы, то есть все, на что потрачено время.
Но компьютеры часто работают в режиме разделения времени, и процессор
может работать над выполнением сразу нескольких программ. В таких случаях
система может стремиться не к минимизации общего времени, затраченного на
выполнение одной программы, а к оптимизации пропускной способности. Поэто
му часто возникает потребность в проведении черты между общим затраченным
временем и временем работы процессора в наших интересах. Время выполнения
задачи центральным процессором (CPU execution time), или просто процессорное
время (CPU time), которое учитывает это различие, это время, которое централь
ный процессор затрачивает на работу над этой задачей, оно включает время ожи
дания операций ввода-вывода или время, затраченное на выполнение других
программ. (Но при этом следует помнить, что время отклика, ожидаемое пользо
вателем, будет общим затраченным временем, а не процессорным временем.) Про
цессорное время может и дальше делиться на процессорное время, затраченное на
программу и называемое процессорным време
нем пользователя (user CPU time), и на про
цессорное время, затраченное на выполнение Время выполнения задачи
центральным процессором (CPU
операционной системой задач в интересах про
EXECUTION TIME)
граммы, называемое процессорным временем Также называется процессорным временем
системы (system CPU time). Провести четкую (CPU time). Фактическое время, затрачен
черту между процессорным временем системы ное центральным процессором на выпол
нение конкретной задачи
и пользователя довольно трудно, поскольку за
частую трудно отнести активность операцион Процессорное время пользователя
ной системы к той или иной пользовательской (user CPU time)
программе, трудности вызываются также и Время центрального процессора, затра
ченное на саму программу.
функциональными особенностями разных опе
рационных систем. Процессорное время системы (system
Чтобы быть последовательными, мы сохра CPU time)
Время центральною процессора, затра
ним различие между производительностью, ченное о операционной системе на выпол
основанной на общем затраченном времени, нение задач, связанных с выполнением
и производительностью, основанной на времени программы
52 Глава 1. Компьютерные абстракции и технологии
Самопроверка
1. Предположим, что нам известно, что работа приложения, использующего
и клиентский настольный компьютер, и удаленный сервер, ограничивается
производительностью сети. Скажите, что происходит при улучшении одной
лишь пропускной способности? А при улучшении как времени отклика, так
и пропускной способности? Или вообще не происходит никаких изменений?
1. Между клиентом и сервером добавлен еще один сетевой канал, повышающий
общую пропускную способность сети и сокращающий время ожидания до
ступа к сети (поскольку теперь уже имеется два канала).
2. Улучшено качество сетевого программного обеспечения, благодаря чему со
кратилась задержка в сетевых линиях связи, но не повысилась пропускная
способность сети.
3. Увеличен объем оперативной памяти компьютера.
2. Компьютер С работает в четыре раза быстрее компьютера В, который выполняет
заданное приложение за 28 секунд. Сколько времени займет выполнение этого
же приложения на компьютере С?
Упражнение
Повышение производительности
Интересующая нас программа выполняется на компьютере А, имеющем тактовую частоту
2 ГГц, за 10 секунд. Мы стараемся помочь разработчику компьютеров создать компьютер В.
который выполнял бы эту программу за 6 секунд. Этот разработчик определил, что соот
ветствующее повышение тактовой частоты вполне допустимо, но это повышение повлияет
на всю остальную конструкцию центрального процессора и компьютеру В на выполнение
программы потребуется в 1,2 раза больше тактовых циклов, чем компьютеру А. Какую так
товую частоту следует заказать разработчику компьютеров?
Ответ
Сначала давайте определим количество циклов, необходимых программе на компьютере А:
Количество тактовых циклов процессора.
Процессорное время . -------------------------------------------------------
Гактовая частота 4
Количество тактовых циклов процессора ,
10 секунд --------------------------------------------------- —А
2x10s циклов в секунду
Чтобы выполнить программу за 6 секунд, компьютер В должен иметь вдвое большую так
товую частоту, чем компьютер А
Упражнение
Использование уравнения производительности
Предположим, что есть две реализации одной и той же архитектуры набора команд. У ком
пьютера А продолжительность тактового цикла равна 250 пс, значение СР1 для некой
программы равно 2,0, а у компьютера В продолжительность тактового цикла равна 500 пс,
значение CPI для той же программы равно 1,2. Какой из компьютеров будет быстрее для
данной программы и насколько?
Ответ
Мы знаем, что любой компьютер при каждом запуске программы выполняет одно и то же
количество инструкций, обозначим это количество буквой /. Сначала определим количество
тактовых циклов процессора для каждого компьютера:
Количество тактовых циклов процессора, “ / * 2,0
Количество тактовых циклов процессора,, - / * 1,2.
Теперь мы можем вычислить процессорное время для каждого компьютера:
Процессорное время, - Количество тактовых циклов процессора, к
* продолжительность тактового цикла - / к 2,0 к 250 пс = 500 к /пс.
И точно так же для В:
Процессорное время,, х J х 1,2 х 500 пс - 600 /пс.
Совершенно очевидно, что компьютер Л работает быстрее. Насколько быстрее, позволяет
определить соотношение показателей времени выполнения;
Производительность процессора, Время в ы п о л н е н и я 600x/ nc
Производи гсльность процессорай Время выполненияg 500 х /пс
Можно сделать вывод, что для данной программы компьютер А в 1,2 рала быстрее компью
тера В.
56 Глава 1. Компьютерные абстракции и технологии
Эти формулы особенно удобны тем, что в них использованы три ключевых
фактора, влияющих на производительность. Мы можем использовать эти формулы
для сравнения двух различных реализаций или
Количество инструкций
количество инструкций, выполненных по Л™ оценки альтернативной конструкции, если
программе. знаем, как она влияет на эти три параметра.
Упражнение
Сравнение кодовых сегментов
Разработчик компилятора пытается принять решение относительно двух кодовых после
довательностей для конкретного компьютера. Разработчики аппаратуры предоставили
следующие факты:
ответ
Для последовательности 1 выполняется 2 + I + 2 - 5 инструкций. Для последовательности 2
выполняется 4 * 1 +•1 = 6 инструкций. Стало быть, для последовательности 1 выполняется
меньше инструкций.
Для определения общего количества тактовых циклов для каждой последовательности
можно применить формулу зависимости количества тактовых циклов процессора от коли
чества инструкций и СР1:
Я
Количество тактовых циклов процессоров = £ (6 7 7 , х С ).
г»1
Она дает нам следующий результат:
Количество тактовых циклов процессора, - (2 * 1) + (1 * 2) + (2 * 3) - 2 -*■2 + 6 ™
10 циклов.
Количество тактовых циклов процессора, = (4 * 1) + (1 х 2 ) + (1 хЗ) - 4 + 2 + 3 =
9 циклов.
Таким образом, последовательность 2 выполняется быстрее, несмотря даже на то, что для
нее выполняется на одну инструкцию больше. Поскольку выполнение кодовой последо
вательности 2 требует меньше общего количества тактовых циклов, но использует больше
инструкций, она должна иметь меньший показатель CPI. Значения CPI могут быть вычис
лены следующим образом:
Количество тактовых циклов процессора
CPI
Количество инструкций
Количество тактовых циклов процессора, Ю
ОТ, Z0.
Количество инструкций, 5
Количество тактовых циклов процессора, 9
СР12 1,5.
Количество инструкций, 6
Самое важное
В табл. 1.3 приведены основные оценочные показатели, используемые в ком
пьютере на различных уровнях, и единицы их измерения в кадетом конкретном
случае. Как эти факторы объединяются для получения времени выполнения,
измеряемого в секундах на программу, можно увидеть в следующей формуле:
Время - Количество секу нд на программу =
- Количество инструкций на программу х
х Количество тактовых циклов на инструкцию *
х Количество секунд на тактовый цикл.
должно сравниваться как количество инструкций, так и CPI, даже если использу
ется одна и та же тактовая частота. В конце этой главы приведены упражнения по
вычислению последовательности улучшений компьютера и компилятора, влияю
щих на тактовую частоту, CPI и количество инструкций. В разделе 1.8 будет рас
смотрена общая оценка производительности, не учитывающая все условия и поэто
му способная ввести вас в заблуждение.
Аппаратный
На что влияет? Как влияет?
компонент
Алгоритм На количество Алгоритм определяет количество инструкций, не
инструкций и, обходимых для выполнения исходной программы,
возможно, на а следовательно, и количество выполняемых процес
CPI сором инструкций. Алгоритм может также влиять на
CPI за счет предпочтения более медленных или бо
лее быстрых инструкций. Например, если алгоритм
использует больше операций с плавающей точкой,
это может привести к более высокому CPI.
Язык программиро На количество Язык программирования, естественно, влияет на
вания инструкций и количество инструкций, поскольку инструкции языка
на CPI транслируются в инструкции процессора, определя
ющие общее количество выполняемых инструкций.
Язык, е силу своих свойств, может также влиять на
CPI: например, язык с мощной поддержкой абстрак
ций данных (х примеру. Java) может потребовать
применения опосредованных вызовов, использую
щих более затратные, с точки зрения CPI, инструк
ции.
Компилятор На количество Эффективность работы компилятора влияет и на
инструкций и количество инструкций, и на среднее количество так
на CPI тов, приходящееся на одну инструкцию, поскольку
компилятор определяет ход трансляции инструкций
языка в инструкции процессора. Компилятор может
играть весьма сложную роль и осуществлять ком
плексное воздействие на CPI.
Архитектура набора На количество Архитектура набора команд воздействует на все
команд инструкций, на три аспекта производительности центрального
тактовую часто процессора, поскольку она влияет на инструкции,
ту и на CPI необходимые для выполняемой функции, на количе
ство циклов, необходимое для выполнения каждой
инструкции, и, о общем, на тактовую частоту про
цессора.
60 Глава 1. Компьютерные абстракции и технологии
Самопроверка
Некое приложение, написанное на языке Java, выполняется на настольном ком
пьютере за 15 секунд. Новый выпуск компилятора Java требует только 0,6 инструк
ции, генерировавшейся старым компилятором. Но, к сожалению, он повышает
показатель CPI в 1,1 раза. Каково ожидаемое ускорение выполнения программы
при использовании нового компилятора? Выберите правильный ответ из трех
приведенных ниже:
. 15x0,6
а ) --------- 8,2 с;
U
б) 15x0,6x1,1 - 9 ,9 с;
15x1,1
в) 27,5 с.
0,6
IX
с
5
с
1
к
Iс.
I-
с
С
Как можно было увеличить тактовую частоту в 1000 раз при увеличении потре
бляемой мощности в 30 раз? Потребляемая мощность может быть снижена за счет
снижения напряжения питания, что и происходило с появлением каждого нового
поколения технологии, а потребляемая мощность зависит от квадрата напряжения.
Обычно напряжение с появлением каждого нового поколения с нижалось на 15%.
За 20 лет напряжение питания снизилось с 5 до 1 В, поэтому потребляемая мощ
ность возросла лишь в 30 раз.
Упражнение
Относительная потребляемая мощность
Предположим, что идет разработка нового, более простого процессора, имеющего емкостную
нагрузку, составляющую 85% от емкостной нагрузки более сложного старого процессора.
Далее предположим, что у него имеется регулируемое напряжение питания, позволяющее
уменьшить напряжение по сравнению с прежним процессором на 15%. что приводит к 15%
снижению частоты. Как это повлияет на динамическую мощность?
Ответ
Мощностьм
Мощность^
_ (Емкостная нагрузка х 0,85) х (Напряжение х 0,85) х (Частота переключения х 0,85)
Емкостная нагрузка х Напряжение х Частота переключения
100
10
0
1978 1980 1982 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2006
Рис. 1.13. Прирост производительности процессоров с середины 19 8 0-х годов. В этом графике за точку отсчета взята производи
тельность компьютера VAX 11/780, оцененная с помощью контрольных задач SPECint (см. раздел 1.8). До середины 1980-х годов прирост
производительности процессоров зависел в основном от совершенствования технологий и составлял в среднем 25% в год. Увеличение с тех
нремен прироста производительности до почти 52% можно отнести на счет более совершенных архитектурных и организационных находок.
До 2002 года эю т годовой прирост производительности примерно был равен семи условным единицам. Производительность вычислений,
ориентированных на работу с числами с плавающей точкой, увеличивалась еще быстрее. Начиная с 2002 года ограничения, связанные с по
требляемой мощностью, доступностью распараллеливания на уровне инструкций и большого времени ожидания при обращении к памяти,
привели к замедлению прироста производительности монопроцессора до примерно 20% в год
1.6. Коренное изменение: переход от одного к нескольким процессорам 65
CIZ) Реаак
От 20 до 40
этапов обработки
Соединение □ НПИ
Тестер
пластины Реэак
с корпусом □ □HDD вафель
□□□□
□ □
Пае. 1.14. Процесс производства чипов. После нарезки из кремниевого кристалла необрабо
танные вафли проходят от 20 до 40 этапов для получения вафель со сформированной структурой
<см. рис 1.15). Вафли с нанесенной структурой проверяются тестером и на них помечаются
годные области. Затем вафля разрезается на пластины (см. рис. 1.15). На этом рисунке из одной
вафли получается 20 пластин, 17 из которых проходят проверку. (Крестик означает негодную
пластину.) Выход годных пластин в данном случае равен 17/20, или 85%, Затем годные пластины
соединяются с корпусами и проверяются еще раз перед поставкой изделий в корпусах потреби
телям. Эта финальная проверка выявила наличие одного плохого изделия
- Г ‘ |0;ггч;
K i'... ;. гг,. ^
^ а а ь й в в г г ... ^ ^
Г- ^
г .аВРЯИт г? г- г
I лп го п- it л . 3ДО±с: 1Ш
m w w fTrtu ti на ffi’
Щ Ш •[ Ш Ш Ш Г
Pmc . 1.15. 12-дюймовая (300 мм) вафля, состоящая из чипов AMD Opteron Х2, предше
ственников чипов Opteron Х4 (Courtesy AMD). Количество пластин на вафлю при 100% выходе
годной продукции равно 117. Несколько десятков частично закругленных чипов на границе вафли
являются негодными; их появление обусловлено тем. что проще создавать прямоугольные маски
для обработки кремния. Для этой пластины используется 90-нанометровая технология, то есть
самые маленькие транзисторы имеют размер примерно 90 нм (настоящие транзисторы меньше,
чем на этой фотографии)
70 Глава 1. Компьютерные абстракции и технологии
Выход ---------------------------------------------------------------------------
(1 + (Дефектов на площадь х Площадь пластины/2))2
Первое уравнение вывести несложно. Второе является приблизительным, поскольку
в нем не учтена площадь рядом с границей крутой вафли, на которой не помещаются
прямоугольные пластины (см. рис. 1.15). Последнее уравнение основано на эмпири
ческих предположениях, касающихся коэффициента выхода готовой продукции на
предприятиях по изготовлению интегральных микросхем, использует коэффициент,
связанный с числом важных этапов обработки.
Следовательно, в зависимости от уровня дефектности и размера пластины и вафли
стоимость обычно не имеет линейной зависимости от площади пластины.
метол обычно связан с тем, что при оценке компьютера используется набор кон
трольных задач —программ, специально подобранных для опенки производитель
ности. Контрольные задачи формируют рабочую нагрузку, которая, в соответствии
с надеждами пользователя, сможет предугадать реальную рабочую нагрузку.
Для создания стандартного набора контрольных задач для современных ком
пьютерных систем многими продавцами компьютеров финансируется и поддер
живается 1>бъединенная группа по оценке производительности вычислительных
систем — SPEC (System Performance Evaluation Cooperative). В 1989 году SPEC
начата свою деятельность с того, что солдата набор контрольных задач, предназна
ченных для оценки производительности процессоров (который сейчас называется
SPEC89), развитие которого прошло через пять поколений. Набор, относящийся
к самому последнему поколению — SPEC CPU2006, состоит из 12 контрольных
задач по работе с целыми числами (CINT2006) и 17 контрольных задач но работе
с числами с плавающей точкой (CFP2006). Контрольные задачи по работе с целы
ми числами варьируются от частей компилятора языка С, шахматных программ
и до имитатора квантового компьютера. Контрольные задачи по работе с числами
с плавающей точкой включают коды регулярных сеток для моделирования мето
дом конечных элементов, коды метода частиц дтя задач молекулярной динамики,
и редкие колы линейной алгебры для решения задач гидрогазодинамики.
В табл. 1.4 дано описание объединенных контрольных задач SPEC, и времени
их выполнения на процессоре Optcron Х4, а также показаны множители, опреде
ляющие это время выполнения: количество инструкций, CPI и время тактового
цикла. Обратите внимание па то, что показатели CPI различаются в 13 раз.
Чтобы упростить продажу компьютеров, группа SPEC решила выдавать отчет
в виде одного числа, являющегося результатом выполнения всех 12 контрольных
задач по работе с целыми числами. Оценки времени выполнения сначала норма
лизуются путем деления времени выполнения на эталонном процессоре на время
выполнения оцениваемого компьютера; эта нормализация дает оценку, называемую
SPECratio. преимущество которой в том, что более высокие числовые результаты
свидетельствуют о более высокой производительности (то есть, SPECratio является
величиной, обратной времени выполнения). Показатель CINT2006 или CFP2006
является суммарной оценкой, полученной пу
тем извлечения среднего геометрического по
казателей SPECratio. Рабочая нагрузка
Набор программ, запускаемых на компью
тере, который представлен либо существу
Уточнение. Когда два компьютера сравниваются ющей коллекцией приложений, использу
при помощи показателей SPECratio. использует емых пользователем, либо составлен из
ся среднее геометрическое, поскольку оно дает реальных программ, примерно соответ
одни и те же относительные ответы, независи ствующих такой коллекции. В 1 ипичной
мо от того, какой компьютер используется для рабочей на' руэке определяются как сами
нормализации результатов. Если бы усреднение программы, так и частота их использова
значений нормализованных показателей време ния.
ни выполнения проводилось с использованием Контрольная задача (BENCHMARK)
среднего арифметического, результаты разли Программа, отобранная для использова
чались бы в зависимости от того компьютера, ния при сравнении производительности
который выбирался бы в качестве эталона. компьютеров.
72 Глава 1. Компьютерные абстракции и технологии
Ю% 23 066 180
эч 0 141
Самопроверка
Основным фактором в определении стоимости интефатьной микросхемы является
объем выпуска. Какими нижеперечисленными причинами объясняется, почему
чип, выпушенный более крупной партией, должен стоить дешевле?
1. При больших объемах выпуска производственный процесс может быть настроен
на конкретную конструкцию, увеличивая процент выхода годной продукции.
2. На крупную партию приходится меньший объем конструкторских работ, чем
на мелкую.
3. Маски, используемые для производства чипов, стоят дорого, поэтому их стои
мость, приходящаяся на один чип, при больших объемах выпуска снижается.
4. Стоимость конструкторских разработок высока и сильно зависит от объема
производства, поэтому стоимость одной пластины с производством больших
партий изделий снижается.
5. Пластины крупносерийных партий обычно меньше по размеру, чем пластины
мелкосерийных партий, и поэтому у них более высокий выход годной продук
ции на вафлю.
Потреб
Потреб Потреб Потреб
Пиковая Потреб Потреб Потребле ление
Произво Всего ление ление ление
Микро Тактовая производи ление ление ние при
дитель "Двр/ при 50% при 10% при
процессор частота тельность при 100% при 50% при 10% за активном
сервера гнезд загрузке / загрузке / активном
(ssj_ops) загрузке загрузке грузке простое /
100% 100% простое
100%
НР Xeon Е5440 8/2 3.0 Гц 30В.022 269 W 227 W 84% 174 W 65% 160W 59%
Dell Хеоп Е5440 8/2 2,8 Гц 305,413 276 W 230 W 83% 173 W 63% 157 W 57%
Fujitsu Xeon Е3220 4/1 2,4 Гц 143.742 132W 110W 83% 85W 65% 80 W 60%
Seimens
78 Глава 1. Компьютерные абстракции и технологии
Самопроверка
Оценочный показатель Компьютер А Компьютер В
Количество инструкций 10 миллиардов 8 миллиардов
Тактовая частота 4 ГГц 4 ГГц
CPI 1,0 1,1
Самое важное
Единственным верным и безупречным оценочным показателем производитель
ности является время выполнения. Было предложено и востребовано множество
других оценочных показателей. Безупречность некоторых из них подвергалась
сомнению с самого начала, поскольку они не отражали время выполнения,
применение других, пригодных только при вполне определенных условиях,
расширялось и переносилось за пределы этих условий или осуществлялось без
дополнительных уточнений, позволяющих допустить их применение.
80 Глава 1. Компьютерные абстракции и технологии
1.10. Упражнения
Предоставлены Хавьером Бругейра
Упражнение 1.1
Найдите слово или фразу из представленного списка, наиболее соответствующую
писанию в приведенных ниже задачах. Используйте при ответах номера, стоящие
слева от слова. Каждый из ответов должен использоваться только один раз.
1.1.1 12] <1.1> Компьютеры, используемые для решения серьезных задач, до
ступ к которым осуществляется обычно через сеть.
1.1.2 [2] <1.1> 10,5или 2и байт.
1.1.3 [2] <1.1> Компьютеры, состоящие из нескольких сотен или тысяч про
цессоров и терабайтов памяти.
1.1.4 (2] <1.1> Сегодня зга сфера применения относится к области научной
фантастики.
1.1.5 [2] <1.1 > Тип памяти, который называется памятью с произвольным до
ступом.
1.1.6 [2] <1.1> Часть компьютера, называемая центральным процессорным
устройством.
1.1.7 [2] <1.1> Тысячи процессоров, формирующие большой кластер.
1.1.8 [2] <1.1> Микропроцессор, содержащий несколько процессоров на одном
и том же чипе.
1.1.9 [2] <1.1> Настольный компьютер без экрана или клавиатуры, доступ
к которому обычно осуществляется по сети.
1.1.10 [2| <1.1> Самый распространенный в настоящее время класс компью
теров, которые запускают одно приложение или один набор взаимосвязанных
приложений.
1.1.1112)<1.1> Специальный язык, используемый для описания компонентов
оборудования.
1.1.12 [2] <1.1> Персональный компьютер, предоставляющий неплохую произ
водительность отдельно взятому пользователю при умеренной стоимости.
1.1.13 [2] <1 2> Программа, транслирующая инструкции на языке высокого
уровня в инструкции языка ассемблера.
1.1.14 [2] <1 ,2> Программа, транслирующая символьные инструкции в двоич
ные инструкции.
1.1.15 [2] <1.2> Язык высокого уровня для обработки бизнес-информации.
1.1.16 [2] <1 ,2> Язык двоичных цифр, попятный процессору.
1.1.17 [2] <1 ,2> Команды, которые может понять процессор.
1.1.18 [2 ]<1.2> Язык высокого уровня для научных вычислений.
1.1.19 [2] <1 .2> Символьное представление инструкций машины.
1.1.20 |2] <1.2> Интерфейс между пользовательской программой и оборудо
ванием, предоставляющий множество различных служб и контрольных функций.
1.1.21 [2] <1 .2> Программное обеспечение или программы, разработанные
пользователями.
1.1.22 [2] <1.2> Двоичный разряд (со значением 0 или 1).
1.1.23 [2] <1.2> Уровень программного обеспечения (операционная система
и компиляторы), который находится между прикладным программным обеспече
нием и оборудованием.
1.1.24 [2] <1.2> Язык высокого уровня, используемый для написания прило
жений и системного программного обеспечения.
1.1.25 [2] <1.2> Переносимый язык, состоящий из слов и алгебраических вы
ражений, которые перед запуском на компьютере должны быть переведены на
язык ассемблера.
1.1.26 f2| <1.2> 10IJ или 240 байт.
1.10. Упражнения 83
У п р а ж н е н и е 1.2
1.2.1 [ 10] <1.3> Каким должен быть размер (в байтах) буфера кадра цветного дис
плея, использующего по 8 бит для каждого из основных цветов (красного, зеленого,
синего) на пиксел и имеющего разрешение экрана 1280 к 800 пикселов?
1.2.2 [5] <1.3> Если у компьютера имеется 2 Гбайт оперативной памяти и если
предположить, что в ней не будет содержаться никакая другая информация, то
сколько кадров она может вместить?
1.2.3 |5] <1.3> Если компьютеру, подключенному к сети Ethernet с пропускной
способностью в 1 гигабит в секунду, нужно передать файл объемом 256 Кбайт, то
сколько это займет времени?
1.2.4 [5] <1.3> Если предположить, что кэш-память в десять раз быстрее DRAM-
памяти. которая, в свою очередь, в 100 000 раз быстрее памяти на магнитном диске,
а флэш-память в 1000 раз быстрее памяти на магнитном диске, то сколько времени
займет чтение файла из DRAM-памяти, с диска и с флэш-памяти, если чтение этого
файла с кэш-памяти занимает 2 мкс?
У п р а ж н е н и е 1 .3
Предположим, что три разных процессора: PI, Р2 и РЗ - выполняют один и тот же
набор инструкции, имея при этом тактовые частоты и показатели CPI, указанные
в таблице:
1.3.5 [5] <1.4> Определите тактовую частоту процессора Р2, которая сравняет
показатели времени работы с показателями процессора Р1.
1.3.6 [5|< 1 4> Определите количество инструкций для процессора Р2, которое
его время до процессора РЗ.
У п р а ж н е н и е 1.4
Рассмотрим две различные реализации одной и той же архитектуры набора ин
струкций.
Существует четыре класса инструкций: А, В, С и D. Тактовые частоты и CPI
каждой реализации показаны в таблице:
Тактовая
CPI класс А СР1 класс В CPI класс С CPI класс D
частота
Р1 1,5 ГГц 1 2 3 4
Р2 2 ГГц 2 2 2 2
У п р а ж н е н и е 1.5
Рассмотрим две различные реализации Р1 и Р2 одного и того же набора инструкций.
Инструкции в наборе относятся к одному из пяти классов (А, В, С, D и Е).
Тактовая частота каждой реализации и ее показатель СР1 для каждого класса по
казаны в таблице:
1.10. Упражнения 85
Число инструкций
1.5.4 [5] <1 А> Предположим, что вычисления осуществляются за один так
товый цикл, инструкции загрузки и сохранения требуют по 10 тактовых циклов,
з ветвление осуществляется за 3 тактовых цикла. Определите время выполнения
каждой программы на M IPS-процессоре с тактовой частотой 3 ГГц.
1.5.5 (5) <1.4> Предположим, что вычисления осуществляются за один так
товый цикл, инструкции загрузки и сохранения требуют по 2 тактовых цикла,
а ветвление осуществляется за 3 тактовых никла. Определите время выполнения
каждой программы на МIPS-процессоре с тактовой частотой 3 ГГц.
1.5.6 [5J <1 ,4> Предположим, что вычисления осуществляются за один так
товый цикл, инструкции загрузки и сохранения требуют по 2 тактовых цикла,
j ветвление осуществляется за 3 тактовых цикла. Каким тогда будет ускорение
выполнения программы, если количество инструкций вычисления удастся со
кратить в два раза?
86 Глава 1. Компьютерные абстракции и технологии
У п р а ж н е н и е 1 .6
Компиляторы могут окалывать существенное влияние на производительность при
ложений на отдельно взятом процессоре. В этом упражнении будет исследоваться
влияние компиляторов на время выполнения.
Компилятор А Компилятор В
I 6.1 [5] <1 4> Для одной и той же программы использовались два разных
компилятора. В расположенной выше таблице показано время выполнения двух
программ, полученных на выходе разных компиляторов. Определите средний пока
затель CPI для каждой программы при условии, что продолжительность тактового
цикла процессора составляет 1 нс.
1.6.2 [5] <1.4> При средних показателях CPI, определенных в упражнении 1.6.1,
скомпилированные программы запускаются на двух разных процессорах. Если
время выполнения на двух процессорах одно и то же, то на сколько выше такто
вая частота процессора, на котором запущен код, выданный компилятором А, по
сравнению с тактовой частотой процессора, на котором запущен код, выданный
компилятором В?
1.6.3 |5) <1.4> Разработан новый компилятор, который выдает только 600 мил
лионов инструкций и имеет средний показатель CPI 1,1. Каким будет ускорение
при использовании этого нового компилятора по сравнению с использованием
компиляторов Л или В на исходном процессоре из упражнения 1.6.1?
Рассмотрим две разные реализации одного и того же набора инструкций: Р1
и Р2. В этом наборе существует пять классов инструкций (А, В, С, D и Е). Про
цессор Р1 имеет тактовую частоту14 ГГц, а процессор Р2 имеет тактовую частоту
6 ГГц. Среднее количество циклов для каждого класса инструкций для Р1 и Р2
перечислено в таблице:
Е Б 4
1.10. Упражнения 87
У п р а ж н е н и е 1 .7
В таблице показано увеличение тактовой частоты и потребляемой мощности вось
ми поколений процессоров Intel за 28 лет:
Процессор Тактовая частота Потребляемая мощность
80286(1982) 12,5 МГц 3,3 Вт
80386(1985) 16 МГц 4,1 Вт
80486(1989) 25 МГц 4,9 Вт
Pentium (1993) 66 МГц 10.1 Вт
Pentium Pro (1997) 200 МГц 29.1 Вт
Pentium 4 Willamette (2001) 2 ГГц 75.3 Вт
Pentium 4 Prescott (2004) 2 ГГц 103 вт
Core 2 Ketsfield (2007) 2.667 ГГц 95 Вт
У п р а ж н е н и е 1 .8
Предположим, что нами разработаны новые версии процессора со следующими
характеристиками:
Емкостное сопро
Напряжение питания Тактовая частота Площадь
тивление
1 1/2 2-..г
У п р а ж н е н и е 1 .9
Хотя основным источником рассеиваемой мощности в CMOS является динамиче
ское энергопотребление, статическое энергопотребление формируется за счет тока
утечки: V к Чем меньше размеры элементов чипа, тем более существенным
является статическое энергопотребление. Предположим, что имеются данные по
1.10. Упражнения 89
1.9.1 [5] <1 ,5> Определите процентное отношение от всей рассеиваемой мощ
ности, приходящееся на статическое энергопотребление.
1.9.2 [5] <1.5> Если статическое энергопотребление зависит от тока утечки,
Р - V* I , определите ток утечки для каждой технологии.
1.9.3 [5] <1 .5> Определите соотношение статического и динамического энер
гопотребления для каждой технологии.
Теперь рассмотрим динамическую рассеиваемую мощность различных версий
заданного процессора для трех различных напряжений питания согласно следую
щем таблице:
1.9.4 [5| <1 ,5> Определите статическое энергопотребление для каждой версии
при напряжении питания 0,8 В, приняв за коэффициент соотношения статического
и динамического энергопотребления значение 0,6.
1.9.5 [5] <1.5> Определите ток утечки для каждой версии при напряжении
питания 0,8 В.
1.9.6 [10] <1.5> Определите наибольшее значение двух токов утечки при напря
жениях питания 1,0 В и 1,2 В, приняв за коэффициент соотношения статического
и динамического энергопотребления значение 1,7.
У п р а ж н е н и е 1 .1 0
В таблице показано распределение инструкций заданного приложения, ныполня-
- мого на 1, 2, 4 или 8 процессорах. Используя эти данные, вы будете исследовать
ускорение работы приложений на параллельных процессорах:
Арифм.
Загр./
сохран.
Ветвле
ния
Арифм.
CPI
З агр ./
сохран.
Ветвле
ния
4 640 320 64 1 4 2
8 320 160 32 1 4 2
90 Глава 1. Компьютерные абстракции и технологии
8 600 500 32 1 13 2
1.10.4 [10] <1.4, 1.6> Предположим, что тактовая частота равна 3 ГГц, тогда
каким будет время выполнения программы с использованием 1,2,4 или 8 ядер?
1.10.5 [10] < 1.5,1.6> Предположим, что потребляемая мощность процессорного
ядра может быть описана следующим уравнением:
5 0 мА
Мощность = ---------Напряжение питания,
МГц
1.10. Упражнения 91
в котором частота измеряется в гигагерцах. Таким образом, при частоте 5 ГГц на
пряжение питания будет равно 1,4 В. Определите потребляемую мощность при
Выполнении программы на 1,2,4 и 8 ядрах, предполагая, что каждое ядро работает
на тактовой частоте 3 ГГц. Таким же образом определите энергопотребление при
выполнении программы на 1,2,4 или 8 ядрах, предполагая, что каждое ядро рабо
тает на частоте 500 МГц.
1.10.6 [10] < 1 .5 ,1.6> Определите затраты энергии при выполнении программы
на 1, 2, 4 и 8 ядрах, предполагая что каждое ядро имеет тактовую частоту 3 ГГц
и 500 МГц. Воспользуйтесь уравнением потребляемой мощности из упражнения
1.10.5.
У п р а ж н е н и е 1.11
В следующей таблице даны сведения для разных процессоров:
T1 Т2 тз Т4
Упражнение 1.12
В следующей таблице показаны результаты выполнения контрольных задач
SPEC2006 на процессоре AMD Barcelona:
Количество ин
Название Время выполнения (с) Эталонное время (с)
струкций к 10*
а peri 2118 500 9770
б mef 336 1200 9120
1.12.4 [5) <1 .7> Определите увеличение процессорного времени при увеличе
нии количества инструкций контрольных задач на 10%. которое не оказало ника
кого влияния на СР1.
1.12.5 [5] <1.7> Определите увеличение процессорного времени при увеличе
нии количества инструкций контрольных задач на 10% и увеличении показателя
CPI н а 5%.
1.12.6 [5) <1.7> Определите изменение SPECratio для изменений, описанных
в упражнении 1.12.5.
Упражнение 1.13
Предположим, что мы разрабатываем новую версию процессора AMD Barcelona
с тактовой частотой 4 ГГц. Мы добавили к набору новые инструкции, но при этом
сократили их общее количество на 15% от тех значений, которые были показаны
для каждой контрольной задачи в упражнении 1.12. Полученное время выполнения
показано в таблице:
Упражнение 1.14
В разделе 1.8 рассматривалось заблуждение, касающееся использования для оценки
производительности подгруппы уравнений производительности. Чтобы проил
люстрировать это положение, рассмотрим следующие данные по выполнению на
разных процессорах заданной последовательности из 10е инструкций:
Упражнение 1.15
Еще одно заблуждение, упомянутое в разделе 1.8, заключается в ожидании увели
чения общей производительности компьютера за счет улучшения только одной
из его компонент. Такое может произойти, но не всегда. Рассмотрим компьютер,
выполняющий программы с процессорными временами, приведенными таблице:
Целочислен
Инстр. с плав, Инструкции Инструкции Общее
ные
точкой эагр ./со хр . ветвления время
инструкции
а 35 с 85 с 50 с 30 с 200 с
б 50 с 80 с 50 с 30 с 210с
1.15.1 [5] <1.8> На сколько сократится общее время, если время для операций
с плавающей точкой будет сокращено на 20%?
1.15.2 [5] <1.8> Н асколько сократится время выполнения целочисленных
операций, если общее время сократится на 20%?
1.15.3 [5] <1.8> Может ли общее время сократиться на 20% за счет сокращения
одного только времени на выполнение инструкций ветвления?
В следующей таблице показано распределение инструкций по типам для каж
дого процессора при выполнении заданного приложения на различном количестве
процессоров:
Кол-во Инстр. Цело- Инстр. CPI CPI CPI
Инстр. CPI
процес с плав, числ. з а гр ./ (с плав, (цело- (э а гр ./
ветвл. (ветвл.)
соров точкой инстр. сохр. точкой) числ.) сохр.)
а 1 560 х 10* 2000 х ю * 1280 х 10* 256 х 10* 1 1 4 2
б 8 80 х 10* 240 х 10* 160 х 10” 32 х 10* 1 1 4 2
1.15.4 [ 10] <1.8> На сколько нужно улучшить показатель CPI для инструкций
с плавающей точкой, если требуется, чтобы программа работала в два раза быстрее?
1.15.5 (10] <1.8> На сколько нужно улучшить показатель CPI для инструк
ций загрузки-сохранения, если требуется, чтобы программа работала в два раза
быстрее?
1.15.6 [5] <1.8> На сколько сократится время выполнения программы, если
показатель СР1 для целочисленных инструкций и инструкций с плавающей точ
кой сократится на 40%. а показатель СР1 для инструкций загрузки-сохранения
и инструкций ветвления сократится на 30%?
У п р а ж н е н и е 1. 1 6
Кт е одно заблуждение, касающееся выполнения профамм на многопроцессорных
системах, заключается в ожидании повышения производительности за счет сокра
щения времени выполнения только части подпрограмм. В таблице показано время
выполнения пяти подпрограмм, запущенных на разном количестве процессоров.
1.16.1 (10] <1.8> Определите общее время выполнения и степень его сокраще
ния. если время выполнения подпрограмм Л, С и Е будет сокращено на 15%.
1.16.2 [10] <1.8> На сколько сократится общее время, если время выполнения
подпрограммы В сократится на 10%?
1.16.3 [10] <1.8> На сколько сократится общее время, если время выполнения
подпрофаммы D сократится на 10%?
Время выполнения в многопроцессорной системе может быть разбито на время
вычисления подпрограмм плюс время, затрачиваемое на обмен данными между
процессорами (время маршрутизации). Рассмофим показатели времени выполне
но! и времени маршрутизации, представленные в таблице. В данном случае время
маршрутизации является важным компонентом общего времени.
2 20 78 9 65 4 11
4 12 44 4 34 2 13
Г ”
8 1 23 3 19 3 17
16 4 13 1 10 2 22
32 2 5 1 5 1 23
64 1 3 0,5 1 1 26
96 Глава 1. Компьютерные абстракции и технологии
2.1. Введение
Чтобы управлять компьютерным оборудованием, нужно говорить на его языке.
Слова компьютерного языка называются инструкциями, а его словарь называется
98 Глава 2. Инструкции: язык компьютера
add а . Ь. с
нен тому, что такое «переменная*, оставив это для следующего раздела.)
Сумма четырех переменных получается в результате выполнения следующей
последовательности инструкций:
т* а. Ь. с # Сунна Ь и с поиеяаесся в а
r id a. a. d # Теперь в а буд ет сунна Ь. с и d
:Jd а. а. е # А теперь в а б уд ет сунна b. с, d и е.
Операнды MIPS
Название Пример Комментарии
Категория
Инструкции Пример Значение Комментарии
инструкций
load byte lb $s1,20($s2) Ss1 = Memory [$s2 + 20) Байт из памяти в ре
(загрузка гистр
байта)
load byte Ibu $s1.20($s2) Ss1 = Memory[$s2 + 20) Байт из памяти в ре
unsigned гистр
(загрузка
байта без
знака)
store byte Sb $s1,20($s2) Memory[$s2 + 20] * $s1 Байт из регистра
(сохранение в память
байта)
load linked II $s1,20($s2) $st = Memory[$s2 + 20) Загрузка слова
word в качестве первой
(загрузка половины атомарного
связанного обмена
слова)
store condi sc $s1,20($s2) Memory[$s2+20]=$s1; Сохранение слова
tion. word $s1=0 или 1 в качестве второй
(сохранение половины атомарного
условного обмена
слова)
load upper lui Ss 1,20 $st = 2 0 * 2 " Загрузка константы
immed. в верхние 16 раз
(непосред рядов
ственная
загрузка
в верхние
разряды)
Логические and and $s1 = $s2 & $s3 Трехрегистровые
(И) $s1,Ss2,$s3 операнды;
поразрядное И
or or $s1.$s2,Ss3 $s1 = $s2 | $s3 Трехрегистровые
(ИЛИ) операнды;
поразрядное ИЛИ
пот nor Ss1 ■ - ($s2 | $s3) Трехрегистровые
(исключаю $s1,$s2,$s3 операнды;
щее ИЛИ) поразрядное исклю
чающее ИЛИ
and immedi andi $s1,$s2.20 Ssl = $s2 & 20 Поразрядное И реги
ate стра и константы
(непосред
ственное
.И»)
or immediate orl Ss1,$s2,20 $s t = $s2 I 20 Поразрядное ИЛИ
(непосред регистра и константы
ственное
.ИЛИ»)
102 Глава 2. Инструкции: язык компьютера
Категория
Инструкции Пример Значение Комментарии
инструкций
shift left logi sll $s1,$s2,10 Sst = $s2 « 10 Сдвиг влево на кон
cal станту
(логический
сдвиг влево)
shift right srl Ss!,$s2.10 Ssl = $ s 2 > > 10 Сдвиг вправо на
logical константу
(логический
сдвиг впра
во)
Условного branch on beq $s1,$s2,25 if (Ssl == $s2) go to Тест на равенство;
ветвления equal P C + 4 + 100 ветвление, связанное
(ветвление со счетчиком команд
при равен
стве)
branch on not bne Ss1,$s2,25 if (S s ll- $ s2)goto Тест на неравенство,
equal PC ♦ 4 + 100 ветвление, связанное
(ветвление со счетчиком команд
при нера
венстве)
set on less sit $s1,$s2,$s3 if (Ss2 < $s3) Ssl = 1; Сравнение -меньше
than (уста else Ssl = 0 чем»; для beq, bne
новить, если
меньше чем)
set on less situ $s1,Ss2,$s3 if (Ss2 < $s3) Ssl = 1; Сравнение -меньше
than un else Ssl > 0 чем» без знака
signed
(установить,
если мень
ше, чем без
знака)
set less than slti Ssl ,$s2,20 if ($s2 < 20) Ssl = 1; Сравнение -меньше
immediate else $s 1 = 0 чем» с константой
(установить,
если непо
средственно
меньше чем)
set less than sltiu $sl,$s2 20 if (Ss2 < 20) Ss1 = 1; Сравнение -меньше
immediate else Ssl = 0 чем» с константой,
unsigned без знака
(установить,
если непо
средственно
меньше, чем
без знака)
2.2. Операции, осуществляемые компьютерным оборудованием 103
Категория
Инструкции Пример Значение Комментарии
инструкций
Безуслов jump 1 2500 go to 10000 Переход no указанно
ного пере- (перейти) му адресу
хода
jump register jr Sra go to $ra Для переключения:
(перейти по возвращение из про
регистру) цедуры
jump and link jal 2500 $ra = PC 4; go to Для вызова проце
(меренги 10000 дуры
и сделать
ссылку)
Ответ
МIPS-инструкция работает с двумя исходными операндами и помещает результат в один
целевой операнд. Следовательно, две простые инструкции, показанные выше, компилиру
ются в следующие две инструкции языка ассемблера MIPS:
ado а. о с
sub d. а. е
Упражнение
Компиляция сложной инструкции на языке С в MIPS-код
В относительно сложной инструкции содержится пять переменных —f, g, и, i и ,j:
Г - (д + И) - (1 ♦ j):
Каким будет итог работы С-компилятора?
104 Глава 2. Инструкции: язык компьютера
Самопроверка
В каком языке профаммиронании потребуется больше строк кода для отдельно
взятой функции? Выстройте указанные ниже языки в нужном порядке.
1. Java.
1. С.
2. Язык ассемблера MIPS.
Упражнение
Компиляции присваивания на языке С с использованием регистров
Задача связывания переменных программы с регистрами возлагается на компилятор. Возь
мем. к примеру, инструкцию присваивания из нашего
прежнего примера:
Слово
f - (g ♦ h) - (1 ♦ j); ! Естественная единица размера памяти
Переменные f, g, h,' и j назначаются соответственно в компьютере, обычно это группа из 32 раз
регистрам $s0, Ssl, »$2, Is3 и $s4. Как будет выглядеть рядов. соответствующая размеру регистра
MIPS-код, полученный в результате компиляции? в MIPS-архитектуре.
106 Глава 2. Инструкции: язык компьютера
Ответ
Откомпилированная программа очень похожа на предыдущий пример, за исключением
того, что мы заменяем переменные именами упомянутых ранее регистров и дополнительно
используем два временных регистра. StO и $tl, которые соответствуют показанным выше
временным переменным:
add StO.Ssl.Ss2 # регистр StO содержи- g + h
аос Stl.Ss3.$s4 # регистр $tl содержит i + j
sub SsO.StO.Stl # f получает значение StO - S tl. которое равно (g + h)-(i + j )
Операнды памяти
В языках программирования имеются, как в этих примерах, простые переменные,
содержащие элементы данных, но есть также и более сложные структуры дан
ных, например массивы. Эти сложные структуры данных могут содержать боль
ше элементов данных, чем количество регистров в компьютерах. Как компьютер
может представить такие крупные структуры и получить к ним доступ?
Вспомним пять компонентов компьютера, которые были представлены в главе 1
и повторно показаны в начале данной главы. Процессор может хранить в регистрах
только небольшой объем данных, но компьютерная память содержит миллиарды
элементов данных. Следовательно, структуры данных (массивы и структуры)
хранятся в памяти.
Как ранее объяснялось, арифметические операции проводится в M IPS-
инструкииях только с регистрами, следовательно, М IPS-ассемблер должен вклю
чать инструкции, переносящие данные между памятью и регистрами. Такие ин
струкции называются инструкциям и переноса данных. Д ля доступа к слову
в памяти инструкции нужно предоставить адрес памяти. Память — это просто
большой одномерный массив, в котором адрес ведет себя как индекс этого массива,
начинаясь с 0. Например, на рис. 2.1 третий элемент данных имеет адрес 2. а значе
ние элемента Метогу(2] равно 10.
3 100
2 10
1 101
0 1
Адрес Данные
Процессор Память
Рис. 2 .1 . Адреса и содержимое памяти по этим адресам. Если бы эти элементы были сло
нами, данные адреса были бы неправильным и, поскольку в MIPS обычно используется байтовая
адресация, где каждое слово представлено четырьмя байтами На рис. 2.2 показана адресация
памяти для последовательной пословной адресации
2.3. Операнды компьютерного оборудования 107
Упражнение
Компиляция присваивания, когда операнд находится в памяти
Предположим, что А —массив из 100 слов, и компилятор, как и раньше, связал переменные
3 и h с регистрами Ssl и Ss2. Также предположим, что стартовый, юти базовый, адрес массива
ааходится в регистре $$3. Откомпилируйте эту инструкцию присваивания на языке С:
д • Л * А[8];
Отпет
Хотя в этой инструкции присваивания содержится всего одна операция, один из операндов
находится в памяти, поэтому сначала нужно перенести А[8] в регистр. Адресом этого эле
мента массива является сумма балы массива А, которая находится в регистре Js3, и номера
выбранного элемента В. Данные должны быть помещены во временный регистр, чтобы их
можно было использовать в следующей инструкции, На основе схемы, изображенной на
рис. 2.1, первой инструкцией, выданной компилятором, будет
l w St0.8(*s3) # Вревеиный регистр StO получает А(8]
(Далее мы слегка подправим эту инструкцию, но пока будем пользоваться этой упрощенной
версией.) Следующая инструкция может работать со значением ПО (которое равно А[8]),
поскольку это регистр. Инструкция должна прибавить значение h (содержащееся в Js2) к
48] (НО) и поместить сумму в регистр, соответствующий переменной g (которая связана
с Ssl):
add Ssl.$s2.StO # g • h + A(8]
Константа в инструкции переноса данных (8) называется смещением (offset), а регистр, при
бавляемый для формирования адреса (Ss3), называется базовым регистром (base register).
*л*иг/л«*«*г**?**«»•лмчмчдоэ*.;
Интерфейс аппаратного и программного обеспечения
Кроме связывания переменных с регистрами, компилятор распределяет для струк
тур данных вроде массивов место в памяти. Затем компилятор может поместить со
ответствующий стартовый адрес в инструкции
переноса данных. Инструкция переноса данных
Команда, которая перемещает данные
Поскольку но многих программах применяются между памятью и per истрами.
восьмибитные байты, большинство архитектур
Адрес
осуществляют адресацию отдельных байтов. Значение, используемое для описания ме
Поэтому адрес слова соответствует адресу од стоположения конкретного элемента дан
ного из четырех байтов этого слова, а адреса ных в массиве памяти.
108 Глава 2. Инструкции: язык компьютера
Процессор Память
Рис. 2 .2 . Реальная адресация памяти я MIPS и содержимое памяти для этих слов. Из
мененные адреса выделены, чтобы отличаться от тех, что были показаны на рис. 2.1. Поскольку
в MIPS адресуется каждый байт, адреса слов кратны четырем: в слове содержится 4 байта
1 Точнее, при использовании адресации big-endian сами байты слова в памяти располагаются
в обратном порядке: старший байт имеет меньший адрес (который и является адресом
слова), а младший —имеет наибольший адрес (адрес слова + 3 для 32-разрЯДНОГОслова).
Примеч. ред.
2.3. Операнды компьютерного оборудования 109
Упражнение
Компиляция с использованием загрузки и сохранения
Предположим, что переменная ь связана с регистром »$2, а базовый адрес массива А хранится
в регистре ИЗ. Какой код МIPS-ассемблера будет создан для следующей инструкции при
сваивания на языке С?
АС123 ■ h ♦ А[8];
Ответ
Хотя в С-инструкции прописана только одна операция, теперь два операнда находятся
в памяти, поэтому нам нужны дополнительные MIPS-инструкции. Первые две инструкции
такие же, как и в предыдущем примере, за исключением того, что на этот рал в инструкции
загрузки слова для выбора А[8) используется правильное смещение для байтовой адресации
я инструкция add помещает сумму в регистр КО:
1и $tO,32(Js3) # Вречемньй регистр НО получает А[8]
add JtO.$s2.HO # Зреиемньй регистр НО получает h + А18]
Заключительная инструкция сохраняет сумму в А[12], используя в качестве смещения 48
(4 к 12) и в качестве базового регистра ИЗ.
$ш H0,48($s3) # Сохранение h ♦ А[8] в АС12]
Самопроверка
Говоря о важности регистров, как можно оценить темпы увеличения количества
регистров на чипе?
1. Как очень высокие: их количество увеличивалось согласно закону Мура, кото
рый предсказал удвоение количества транзисторов на чипе каждые 18 месяцев.
2. Как оцень низкие: поскольку программы обычно распространяются на языке
компьютера, архитектура набора команд обладает высокой инерционностью,
и поэтому количество регистров увеличивается только с вводом в действие
нового набора инструкций.
2.4. Числа со знаком и без знака 111
Уточнение. Хотя регистры MIPS в этой книге представлены как 32-разрядные, су
ществует и 64-разрядная версия набора инструкций MIPS, имеющая тридцать два
64-разрядных регистра. Чтобы не создавать путаницы, официально разные наборы на
зываются MIPS-32 и MIPS-64. В данной главе будет использоваться поднабор MIPS-32.
пень основания. Для десятичных чисел мы будем использовать нижний индекс 10,
а для двоичных — 2. Например,
1011г
представляет собой
(1 * 2J) + (0 * 2г) + (1 * 2') + (1 * 2%
- <1 * 8) + <0 * 4) + ( 1 * 2 ) + (1 * 1)10
- (8 + 0 + 2 ♦ 1)„
30 29 2 в |г7 26 25
24|23 22 21 20 • 19 16 17 1б| 15
14 13 « |и 10
9 В| 7 6 5 4 |з 2 1 0 |
г 1
о
о
0 0 1 0 1 1
О
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
о
0 0
(32 разряда)
1111 1111 1111 1111 1111 1111 1111 1101, - 4 294 967 293|е
1111 1111 1111 1111 1111 1111 1111 1110, ^ 4 294 967 294|f
1111 1111 1111 1111 1111 1111 1111 l l l l j - 4 294 967 295„
То есть 32-разрядные двоичные числа могут быть представлены в понятиях
двоичного значения, умноженного на степень числа 2 (здесь хi означает t-тый бит
числа .г):
(х31 к 2Э|) + (дгЗО * 230) + (д:29 х 2я ) + . . . + (х1 х 2’) + (лО х 2°)
Следует помнить, что комбинации двоичных разрядов, представленные выше,
это всего лишь представления чисел. На самом деле числа имеют бесконечное
количество цифр, почти все из которых представлены нулем, за исключением
всего нескольких самых правых цифр. Просто обычно лидирующие нули не по
казываются.
Может быть разработано оборудование,
Младший бит предназначенное для сложения, вычитания, ум
Самый правый разряд MIPS-слова. ножения и деления этих комбинаций двоичных
Старший бит разрядов. Если число, являющееся результатом
Самый левый разряд MIPS-cnoea. таких операций, не может быть представлено
2.4. Числа со знаком и без знака 113
ш iin п и i n i н и п и i n i h o i , = -з,с
л: п и п и н и п и п и п н н ю , - -2„
ДЛ. 1111 11111111 1111 1111 1111 1101, - -1„
У двоичного дополнения есть одно отрицательное число. 2 147 483 648)0, у ко
торого нет соответствующего положительного числа. Подобный дисбаланс также
был бедой невнимательного программиста, но использование знака и абсолютного
значения создавало проблемы как для программиста, так и для разработчика обо
рудования. В результате всего этого каждый современный компьютер использует
для представления чисел со знаками дополнение до двух.
Представление с дополнением до двух имеет то преимущество, что все отрица
тельные числа содержат единицу в старшем разряде. Следовательно, оборудованию
приходится проверять только этот бит, чтобы узнать, отрицательное данное число
или положительное (число нуль считается положительным). Этот разряд часто
называют маковым разрядом. Понимая назначение знакового разряда, мы можем
представить положительные и отрицательные 32-разрядиые числа в понятиях
значения разряда, умноженного на степень числа два:
( г 51 к - 2 31) + ( jc30 х 2 » ) + ( х » х 2 » ) + . . . ■*- ( * ' х 2 ') + (л * х 2°)
Упражнение
Перевод двоичных чисел в десятичные
Каково десятичное значение этого 32-разрядного числа с дополнением до двух?
1111 1111 1111 1111 1111 1111 1111 1100.
Ответ
•пражнение
Этвет
2 - 0000 0000 0000 ОООО ОООО ОООО ОООО 0010,
Инвертируйгс это число путем инвертирования битов и прибавления единицы;
1111 1111 1111 1111 1111 1111 1111 1101,
♦ Ц
- 1111 1111 1111 1111 1111 1111 1111 1110,
- Л
Чтеперь проделайте все в обратном направлении
1111 1111 1111 1111 1111 1111 1111 1110,.
начала инвертировав разряды, а потом прибавив единицу:
0000 0000 0000 0000 0000 0000 0000 0001 ,
♦ 1,
- 0000 0000 0000 ОООО 0000 0000 0000 0010,
Упражнение
Прием расширения знака
Преобразуйте 16-разрядную версию чисел 210и - 2 |3 в 32-разрядные двоичные числа.
Ответ
16-разрядная двоичная версия числа 2 имеет следующий вид:
0000 0000 0000 0010 , - 2„
Преобразование в 32-разрядное число осуществляется путем создания 16 копий значений
старшего разряда (0) и помещения их в левую половину слова. Правая половина слова
получает старое значение:
0000 0000 0000 0000 0000 0000 0000 001010 • 2„
Теперь инвертируем 16-разрядную версию числа 2, используя первый короткий прием. Итак,
0000 0000 0000 оою:
превращается в
1111 1111 1111 1101.
* 1»
- 1111 1111 1111 1110,
Создание 32-разрялной версии отрицательного числа означает копирование знакового раз
ряда 16 рал и помещение результата в левую часть:
1111 1111 1111 1111 1111 1111 1111 1 1 1 0 ,- -2|и
Краткие выводы
Главное, на что обращалось внимание в данном разделе, заключается в том, что
в компьютерном мире нам нужно представление как положительных, так и отри
цательных целых чисел, и, несмотря на все «за» и «против» различных вариантов,
с 1965 года стало преобладать дополнение до двух.
Самопроверка
Каким будет десятичное значение этого 64-разрядного числа с дополнением до
двух?
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1000.
2.4. Числа со знаком и без знака 117
1- -4,о
2- - 8 10
з- -1 б 10
4. 18 446 744 073 709 551 609,0
Упражнение
Трансляция инструкций ассемблера MIPS в инструкции машины
Давайте в качестве примера сделаем следующий шаг в освоении языка MIPS. Мы покажем
версию инструкции настоящего языка MIPS, выраженную в символьном виде
аХ StO.tsl.Ss2
сначала как комбинацию десятичных чисел, а затем как комбинацию двоичных чисел.
Ответ
17 18 8 0 32
Каждая из этих частей инструкции называется полем. Первое и последнее поля (которые
в данном случае содержат 0 и 32) в комбинации сообщают MIPS-компьютеру, что эта ин
струкция выполняет сложение. Второе поле предоставляет номер регистра, являющегося
для операции сложения первым операндом-источником (17 - Ssl), а грстьс поле предостав
ляет для сложения второй операнд-источник (18 - ts2). Четвертое поле содержит номер
регистра, получающего сумму (8 = КО). Пятое поле в данной инструкции нс используется,
поэтому оно установлено в нуль. Таким образом, данная инструкция складывает регистр tsl
с регистром $s2 и помещает сумму в регистр StO.
Эта инструкция может быть также представлена в виде полей не десятичных, а двоичных
чисел:
16 2 16 2 16 2 16 2
Ответ
Для ответа достаточно посмотреть в табл. 2.2 и одном направлении:
еса8 6420 16
4*1 >)>,
*' 1357 9bdf ,6
Поля MIPS
Чтобы их проще было рассматривать, полям MIPS присвоили имена:
ор re rt rd sham t fu n ct
6 разрядов 5 разрядов 5 разрядов 5 разрядов 5 разрядов 6 разрядов
цементов из массива или структуры данных, и зачастую она должна быть больше
•пела 32. Это 5-разрядное поле слишком мало для этих целей.
Получается, что у нас возник конфликт между желанием сохранить для всех
'нструкций одну и ту же длину и желанием иметь единый формат инструк-
:ин. Это подводит нас к заключительному принципу конструирования оборудо-
зания:
"оинцип конструирования 4: хорошая конструкция требует удачных компромиссов.
Константа или
ор rs rt
адрес
6 разрядов 5 разрядов 5 разрядов 16 разрядов
Упражнение
Ответ
ор rs rt rd address/sham t fu n ct
35 9 8 1200
0 18 8 8 0 32
43 9 8 1200
Инструкция lw инден тифицируется числом 35 (см. табл. 2.3) в первом поле (ор). Базо
вый регистр 9 (t tl ) указан во втором поле (rs), а регистр назначения 8 (StO) указан в тре
тьем поле (rt). Смещение для выбора А(300] (1200 = 300 * 4) находится в последнем пол
(address).
Следующая затем инструкция add указывается нулевым значением в нервом поле (ор) и чис
лом 32 в последнем поле (funct). Три регистровых операнда (18,8 и 8) находятся во игором.
третьем и четвертом полях и соответствуют регистрам Js2, НО и НО.
2.5. Представление инструкций в компьютере 123
{вструкция sw идентифицируется числом 43 в первом пате. Вся остальная часть этой по-
тедней инструкции идентична заключительной части инструкции Ы
Лоскольку 1200|0 = 0000 0100 1011 0000г двоичный эквивалент десятичной формы имеет
■едующий вид:
Таблица 2.4 содержит свод той части машинного языка MIPS, которая рас-
чатривалась в этом разделе. Как будет показано в главе 4, сходство двоичного
о с т а в л е н и я родственных инструкций упрощает оборудование. Такие сходства
лужат еще одним примером постоянства в Ml PS-архитектуре.
1 43 18 17 100 sw$s1,100($s2)
^*эмер 6 раз 5 раз 6 раз 5 раз 5 раз 6 раз Длина всех MIPS-
толя рядов рядов рядов рядов рядов рядов инструкций
32 разряда
^-формат R ор rs rt rd shamt fund Формат
арифметической
инструкции
-формат 1 ор rs rt адрес Формат инструк
ций переноса
данных
124 Глава 2. Инструкции: язык компьютера
Самое важное
Современные компьютеры построены на двух ключевых принципах:
1. Инструкции представляются числами.
2. Программы хранятся в памяти, чтобы их можно было считывать или запи
сывать как числа.
Эти принципы привели к концепции программы, хранящейся в памяти, изо
бретение которой выпустило компьютерного джинна из бутылки. Па рис. 2.3 по
казаны возможности этой концепции. В частности, в памяти могут содержаться
ис ходный код программы редактирования, соответствующий ему скомпилирован
ный машинный код для программы редактирования, текст, используемый ском
пилированной программой, и даже компилятор, генерирующий машинный кол.
Последствием того, что инструкции представлены в виде чисел, является
тот факт, что программы часто поставляются в виде файлов двоичных чисел.
Коммерческое значение этого факта заключается в том. что компьютеры могут
унаследовать готовое программное обеспечение, если они совместимы с суще
ствующим набором команд. Такая «совместимость на уровне двоичных кодов»
часто вынуждает промышленность ограничиваться небольшим количеством
архитектур набора инструкций.
Память —
{ Бухгалтерская программа
(машинный код)
г- —^ — —------- —— _ WW -I
{ Программа редактироеани
(машинный код) '
. -J
"|
С-компилятор
: (машинный код) (Я
Процессор L ■J
-|
! Платежные данные
г
-г.
I
Текст книги
I I I HZZUZZZZ
Исходный код на С
для программы
редактирования
Рис. 2.3. Концепция программы, хранящейся а памяти. Хранение программ в памяти по
зволяет компьютеру, выполняющему бухгалтерскую задачу, в мгновение ока стать компьютером
помогающим автору писать эту книгу. Это переключение происходит путем простой загрузки
в память программ и данных с последующей командой компьютеру приступить к выполнению
кода с заданного места. Обработка инструкций одинаковыми способами существенно упроща
ет как устройство памяти, так и программное обеспечение компыотернык систем. В частности,
технологии памяти, необходимой для данных, могут быть также использованы для программ
а программы, например компиляторы, могут транслировать код, записанный в том виде, который
наиболее удобен дли человека, в код, понятный компьютеру
2.6. Логические операции 125
Самопроверка
Какая из М IPS-инструкций здесь представлена? Выберите один из четырех вари
антов, показанных ниже.
ор Г8 rt rd shamt fu n d
0 8 9 10 0 34
Хотя первые компьютеры работали с целыми словами, вскоре стало понятно, что
было бы неплохо работать с полями разрядов внутри слова или даже с отдельными
разрядами. Одним из примеров такой операции является анализ символов внутри
слова, каждый из которых хранится в формате восьми разрядов (см. раздел 2.9).
Это привело к тому, что такие операции были добавлены к языкам программиро
вания и архитектурам наборов инструкций для того, чтобы кроме всего п роч ет
упростить запаковку и распаковку битов внутри слов. Эти инструкции назвали ло-
гическими операциями. В табл. 2.5 показаны логические операции в С, Java и MIPS.
Логические Операторы
Операторы языка С Инструкции MIPS
операции языка Java
Сдвиг влево « « Sll
Сдвиг вправо » >» srl
Поразрядное И & & and, andi
Поразрядное ИЛИ I I от, ori
Поразрядное НЕ - - nor
Кодировка инструкции si 1 представлена нулями как в поле ор, так и в поле fund,
поле rd содержит число 10 (регистр $t2), rt содержит число 16 (регистр SsO), а пате shamt
содержит число 4. Поле rs не используется и поэтому имеет нулевое значение.
Инструкция логического сдвига влево имеет дополнительное преимущество.
Сдвиг влево на i разрядов дает такой же результат, как и умножение на 2', точно
также как сдвиг разрядов десятичного числа на i позиций эквивалентен умножению
на 10'. Например, показанная ранее инструкция si 1 осуществила сдвиг на 4 разряда,
что дает такой же результат, что и умножение на 2* или на 16. Первая комбинация
разрядов, показанная выше, представляла число 9, а 9 к 16 = 144, что и является
значением второй комбинации разрядов.
Другой полезной операцией, изолирующей поля, является операция И (AND).
(Ее название написано большой буквой, чтобы не перепутать его с простым я з ы
ковым союзом.) Операция И является поразрядной и оставляет 1 в выдаваемом
результате только в том случае, если оба разряда операндов содержали 1. Например,
если регистр St2 содержит
0000 0000 0000 0000 0С00 1101 1100 оооо,.
а регистр Jtl содержит
0000 0000 0000 0000 ООП 1100 0000 0000,.
то после выполнения M IPS-инструкции
and St0.Stl.St2 # reg StO - reg Stl & reg St2
значением регистра StO станет число
0000 0000 0000 0000 0000 1100 0000 0000 ,
Как видите, операция И может применить комбинацию разрядов к набору раз-
рядов, заставляя появляться нули там, где нуль
И стоит в разряде комбинации. Такая комбинация
Логическая поразрядная операция, рабо разрядов в сочетании с операцией И традицион
тающая с двумя операндами и вычисляю
щая 1 только в том случае, если 1 имеется
но называется маской, носказьку, как настоящая
а обоих операндах. маска, «скрывает» часть разрядов.
2.6. Логические операции 127
Самопроверка
Какие операции могут изолировать поле в слове?
1. И
2. Сдвиг влево, за которым следует сдвиг вправо.
Упражнение
Компиляция управляющей структуры if-then-else в условные ветвления
В следующем фрагменте кода f, g, h, 1 и J — пере
менные. Каким будет скомпилированный MIPS-код
Условное ветвление для этой инструкции i f при условии, что пять пере-
Инструкция, требующая сравнения двух менных от f до j соответствуют пяти регистрам от
значений и допускающая последующую Jr(1
передачу управления на новый адрес в про
грамме на основе результата сравнения. 'f (4 **J) ' = g*h; else * ■ g h:
2.7. Инструкции для принятия решения 129
Ответ
гla рис. 2.4 показана блок-схема того, что должен делать MIPS-КОД Первое выражение
-равнение на равенство, поэтому, похоже, что нам нужно провести ветвление, если значения
регист ров равны друг другу, то есть воспользоваться инструкцией эед Вообще-то код был бы
эффективнее, если бы проверялось противоположное условие, чтобы провести ветвление
поверх кода, который выполняет следующую часть, then, инструкции if (метка Else опреде
лена ниже), и поэтому мы используем ветвление, если значения регистров не равны, то есть
используем инструкцию Ьпе:
One Js3.ts4.E1se D перейти на Else. если т * j
Следующая инструкция присваивания выполняет одну операцию, и если все операнды раз
мещены в регистрах, то это просто одна инструкция:
add JsO.isl.tsZ # f * g ♦ h (пропускается если i и j)
Теперь нам нужно перейти в конец инструкции if. В этом примере представляется новый вид
эетвления. часто называемый безусловны.* ветвлением. Эта инструкция предписывает про
фессору всегда следовать ветвлению. Чтобы отличать условное ветвление от безусловного,
MIPS для инструкции этого типа используется название jump (переход), сокращенное до
(метка E*i t определена ниже),
j Exit И перейти ма Exit
Инструкция присваивания в else-блоке инструкции if опять может быть скомпилирована
1 одну инструкцию. К этой инструкции нужно только добавить метку Else. Мы также пока-
икаем метку Exit, следующую за этой инструкцией, которая свидетельствует об окончании
ткомпнлнрованного кода структуры if-then-else:
Else:sub Js0.tsl.$s2 ♦ f - g - h (пропускается, если i - j)
E x it :
-л с 2.4. Иллюстрация вариантов а показанной выше инструкции if. Л евы й п р ям о уго л ьни к
соответствует ча сти th e n ин стр укц и и if, а правы й п р я м о уго л ьн и к со о тв е тств уе т ее части else
Циклы
Решения играют важную роль как для выбора из двух альтернативных вариантов,
который встречается в инструкциях If, так и для повторения вычисления, встре
чающегося в циклах. Строительными кирпичиками в обоих случаях служат одни
и те же ассемблерные блоки.
Упражнение
Компиляция цикла while, реализованного на языке С
Гак выглядит традиционный цикл, реализованный на языке С:
while (savet1] ** Ю
1 +- 1;
Предположим, что i и к соотносятся с регистрами $s3 и Ss5, а базовый адрес массива сохранен
в регистре Ss6. Каким будет ассемблерный М IPS-код, соответствующий этому фрагменту
кода на языке С?
Ответ
Первым шагом будет загрузка save[i] во временный регистр. Перед тем как мы сможем
загрузить save[ i ] во временный регистр, нам нужно получить его адрес. Перед тем как мы
сможем прибавить i к базовому адресу массива save для формирования адреса, нужно будет
умножить индекс 1 на 4, чтобы решить задачу байтовой адресации. К счастью, мы можем
воспользоваться логическим сдвигом влево, поскольку сдвиг влево на два разряда равно
силен умножению на 22 или на 4 (см. предыдущий раздел). Нам нужно добавить к этой
инструкции метку l oop, чтобы в конце цикла можно было осуществить ветвление назад
к этой инструкции:
Loop: s i! Stl.Ss3.2 # Вречеммый регистр Stl - 1 * 4
Для получения адреса saver 11 нужно прибавить значение Stl к базовому адресу save, храня
щемуся в регистре Ss6:
add ttl.S tl.S s 6 # Stl » адресу save[i)
Теперь можно использовать этот адрес для загрузки savofl] во временный регистр:
lw StO.O(Sil) # Временный регистр НО • savet>1
Следующая инструкция выполняет тест цикла, осуществляя выход, если savet 1] * к:
pne StO.Ss5. Exit # перейти на E xit, если saveti] * к
Следующая инструкция прибавляет 1 к к
addi Ss3.Ss3.1 # 1- 1♦ 1
В конце цикла происходит ветвление назад к тесту цикла while в его верхней части. После
этого ветвления мы просто добавим метку Exit, и все будет готово:
j Loop # go to Loop
Exit:
(См. упражнения по оптимизации этой последовательности.)
2 . 7 . Инструкции для принятия решения 131
Базисный блок
Интерфейс аппаратного Последовательность инструкций, не име
- программного обеспечения ющая ветвлений (за исключением, может
быть, в самом конце) и без адресов перехо
{нструкции сравнения должны иметь дело да или меток ветвлений (за исключением,
г противопоставлением чисел со знаком и без может быть, в самом начале).
132 Глава 2. Инструкции: язык компьютера
Упражнение
Ответ
Значение в регистре SsOпредставляет собой число - 1 |0, если это целое чисто, и 4 294 967 295,
если это беззнаковое целое число. Значение в регистре 1$: представляет в любом случае чис
ло 12. Затем регистр ПО имеет значение 1, поскольку —110< 1,с. а регистр Stl имеет значение О,
поскольку 4 294 967 29510> 110.
Интерпретация чисел со знаком, как будто они беззнаковые, дает нам малоза
тратный способ проверки, 0 < х < у, что соответствует условию «индекс не выходит
за пределы границ массива*. Ключевым моментом здесь служит гот факт, что от
рицательные целые числа с дополнением до двух в беззнаковой нотации выглядят
как большие числа; то есть старший разряд в прежней нотации является знаковым
разрядом, а в последней нотации он является наибольшей частью числа. Таким
образом, беззнаковое сравнение х < у также проверяет, не является ли х отрица
тельным числом, наряду с проверкой того, что х меньше у.
Упражнение
Ответ
'.ля проведения обеих проверок код всего лишь использует инструкцию situ:
situ JtO.Jsl.Jt2 # JlO-O если Ssl>*oni«He. или Jsl<0
beq Jto.Jiero.IndexOutOfBounds # если проверка не удалась, перейти к
# обработке отвибки
Самопроверка
В языке С имеется большое количество ин-
трукций для принятия решений и циклов, в то
Адресная таблица переходов
эоемя как в MIPS их всего несколько. Что из Также называется таблицей переходов Та
следующих утверждений объясняет или не объ- блица адресов альтернативных моследова
• ияет причины этого дисбаланса? Почему? тельмостей инструкций.
134 Глава 2. Инструкции: язык компьютера
Этвет
Переменные-параметры g, h, i и j соответствуют регистрам аргументов iaO, lal, 1а2 и 1аЗ,
переменная f соответствует регистру НО. Скомпилированная программа начинается
: метки процедуры:
lea'_exanp'e:
Следующим шагом будет сохранение регистров, используемых процедурой. Инструкция,
еализующая присваивание в теле процедуры, идентична показанной в упражнении из раз-
ела 2,2 «Компиляция сложной инструкции на языке С в MIPS-код», где используются два
«ременных регистра. Таким образом, нужно сохранить три регистра: SsO, НОи ttl. Мы «про
талкиваем» старые значения в стек, создавая в стеке пространство для трех слов (12 байт),
. затем сохраняя регистры:
addi tSD. Iso. -12 t настройка стека с освобождение* иеста иля 3 записей
sw *t 1. 8(tsp) # сохранение регистра stl для гзеледуюыего ислользоваи»я
sw НО. 4(Jsp) ♦ сохранение регистра НО для посг-едувдего использования
sw tsO. O(tsp) ♦ сохранение регистра SsO для последуюиего использования
Ча рис. 2.5 показан стек до, во время и после вызова процедуры. Следующие три инструкции
«ответствуют телу процедуры и практически повторяют код упражнения из раздела 2.2
•Компиляция сложной инструкции на языке С в MlPS-код»:
ado It0.ta0.lal ♦ регистр U0 содержат д » h
add ttl.ta2.ta3 ♦ регистр ttl содериит 1 + j
sub tsO.itO.ttl # f * ttO - ttl. что соответствует (g * h)-d + ))
1™ возвращения значения f мы копируем его в регистр возвращаемого значения:
adc tvO.IsO.Hero # возвращение 1 (tvO - tsO ♦ 0)
“сред возвращением из процедуры мы восстанавливаем три прежних сохраненных значения
регистров путем «выталкивания» их из стека:
lw SsO. Ottsp) # восстановление регистра SsO для вызызавиейпрограяиы
w ttO. 4(tsp) # восстановление регистра ttO для вызываемойпрогоаяяы
w ttl. 8(tsp) *восстановление регистра ttl для вызызавнейпрограяиы
adot tsp.tsp,12 #корректировка указателя стека для удаления грех записей
Процедура заканчивается инструкцией перехода по регистру с использованием адреса виз
ита.
jr tra # переход назад к еыэыеавией лрегракяе
больший адрес
$sp Ssp ►
Содержимое регистра $t1
Содержимое регистра $Ю
$sp ► Содержимое регистра SsO
Меньший адрес
а
Рис. 2.9. Значения указателя стека и самого стека: а) до вызова, 6) в процессе вызова,
и в) после вызова процедуры. Указатель стека всегда указывает на "вершину» стека, или, как
показано на этом рисунке, на последнее слово в стеке
Вложенные процедуры
Процедуры, не вызывающие других процедур, называются конечны.чи (leaf). Если
бы все процедуры были конечными, то жизнь стала бы проще, но, к сожалению,
это не так. Точно так же как шпион для выполнения части своей миссии может
нанять других шпионов, которые в свою очередь могут воспользоваться услуга
ми еще большего количества шпионов, процедуры вызывают другие процедуры.
Более того, рекурсивные процедуры даже вызывают «клонов», то есть самих себя.
Поскольку мы должны быть внимательными при использовании регистров в про
цедурах, еще больше внимания нужно уделять вызовам неконечных процедур.
П редпаю ж им , к примеру, что основная программа вызывает процедуру Ас ар
гументом 3, помещая значение 3 в регистр $а0, а затем используя инструкцию jal А.
Затем предположим, что процедура Авызывает процедуру В, используя инструкцию
jal Вс аргументом 7, также помещаемым в регистр $а0. Поскольку процедура Аеще
не заверш ила свою задачу, использование регистра $а0 вызывает конфликтную
ситуацию. Точно так же возникает конфликт и с адресом возврата в регистре $га.
поскольку теперь в нем находится адрес возврата для процедуры В. Если мы что-
нибудь не предпримем для предупреждения этой проблемы, возникший конфликт
не позволит процедуре А вернуть управление вызывавшей ее программе
Одним из решений будет проталкивание всех остальных регистров, которые
должны быть сохранены, в стек, точно гак же, как мы это делали с сохраняемыми
регистрами. Вызывающая программа проталкивает в стек все регистры аргументов
(SaO—$аЗ) или временные регистры (Зт.0-119), которые понадобятся ей после вызова.
Вызываемая процедура проталкивает в стек регистр адреса возврата $га и все сохра
няемые регистры (ts0-$s7), используемые ею. Указатель стека настраивается в соот
ветствии с числом регистров, помещаемых в стек. По возвращении регистры восста
навливаются из памяти и указатель стека соответствующим образом корректируется.
2.8. Поддержка процедур в компьютерном оборудовании 139
Упражнение
Компиляция рекурсивной процеду ры на языке С с показом ссылок на вложения
Давайте попытаемся разобраться с рекурсивной процедурой, вычисляющей факториал:
int fact Ont п)
(
If (п < 1) return (1):
else return (n * facttn ■ 1));
)
v k h .m будет для нес ассемблерный код MIPS?
Ответ
Сохраняются Не сохраняются
Сохраняемые регистры: Ss0-$s7 Временные регистры: Sl0-$t9
Регистр указателя стека: $sp Регистры аргументов: $аО-$аЗ
Регистр адреса возврата: Sra Регистры возвращаемых значений: Sv0-$v1
Стек выше указателя стека Стек ниже указателя стека
$fp ►
Ssp*-
S fp * Сохраненные регистры
аргументов (если они
есть)
Сохраненный адрес
Сохраненные сохра
няемые регистры
(если они есть)
Локальные массивы
и структуры
Ssp ► (если они есть)
Меньший адрес
а 6 в
tac. 2 .6 . Иллюстрация распределения пространства стека: а) до вызова, б) а процессе
п о о в а и в) после вызова процедуры. Указатель фрейма ($fp) указывает на первое слово
•рейма, зачастую это сохраненный регистр аргумента, а указатель стека (Ssp) указывает на
аршину стека. Стек скорректирован таким образом, чтобы создать пространство для всех со
чиненных регистров и всех находящихся в памяти локальных переменных. Поскольку указатель
лека в процессе выполнения программы может изменяться, программистам проще ссылаться
« переменные посредством неизменного указателя фрейма, хотя это может быть сделано и с
юмощью указателя стека и небольших арифметических вычислений адреса. Если локальных
временных в стеке процедуры нет, компилятор сэкономит время, не устанавливая и не восста
навливая указатель фрейма. Когда указатель фрейма используется, он инициализируется при
вызове адресом, хранящимся в $sp. a Ssp восстанавливается с использованием Sfp
Рис. 2.7. Распределение памяти a MIPS для программ и данных. Эта адресация представля
ет собой всего лишь соглашение, касающееся программного обеспечения, и не является частью
MIPS-архитектуры. Указатель стека получает начальное значение 7fff fffc ic и растет вниз по на
правлению к сегменту данных. С другого конца программный код («текст») начинается с адреса
0040 000016. Статические данные начинаются с адреса 1000 0000,,.. Далее следуют динамические
данные, распределяемые в С функцией mallocf), а в Java функцией new. Они растут вверх по на
правлению к стеку в области, называемой кучей. Глобальный указатель, $др, устанавливается
на адрес, облегчающий доступ к данным Он получает начальное значение 1000 8000,6. поэтому
с помощью положительного и отрицательного 16-разрядного смещения из $др можно получить
доступ к адресам в диапазоне от 1000 0000.6to 1000 ffff 1&
Уточнение. А что, если будет более четырех параметров? Соглашение MIPS преду-
матривает помещение дополнительных параметров в стек сразу же над указателем
Эрейма Затем процедура ожидает наличия первых четырех параметров в регистрах
гг $а0 и до $аЗ, а остальные ищет в памяти, адресуемой с помощью указателя фрейма.
Как упоминалось в подписи к рис. 2.6, указатель фрейма удобен тем, что все
хылки на переменные в стеке из процедуры будут иметь одинаковые смещения.
Но указатель фрейма использовать не обязательно. С-компилятор GNU M IPS
использует указатель фрейма, а С-компилятор от M IPS его не использует — он
усм атри вает регистр 30 как еще один сохраняемый регистр (Ss8).
Самопроверка
Какие утверждения, касающиеся С и Java, в целом соответствуют дейгткитель
пости?
1. Программисты, работающие на С, управляют данными явным образом, а в Java
это делается автоматически.
2. При работе на С допускается намного больше ошибок, связанных с указа гелями
и утечками памяти, чем при работе на Java.
э*с. 2.8. Представление символов в таблице ASCII. Обратите внимание на то. что коды букв
«верхнем и нижнем регистрах различаются а точности на 32 единицы; это наблюдение может
'счвести к удобным способам проверки или изменения регистра букв. Значения, не показанные
* данной таблице, включают символы форматирования. Например, код 8 представляет символ
абоя, код 9 — символ табуляции, а код 13 — возврат каретки. Еще одним полезным значением
ier 0 для null. Это значение а языке программирования С используется дли маркировки конца
строки
Упражнение
Коды ASCII и двоичные числа
•нетто целочисленных значений числа можно представить в виде строк ASCII. Насколько
к дичится объем памяти, если один миллиард будет представлено не 32-разрядным целым
■клим, а кодами ASCII?
Этает
Один миллиард - это 1 000 000 000. поэтому его отображение займет 10 ASCII-цифр, длина
с сдой из которых составит 8 бит. Поэтому увеличение требуемого объема памяти составит
'10 к К)/32, или 2,5. Кроме увеличения требуемого объема памяти, устройство для сложения,
считания, умножения и деления таких десятичных чисел будет слишком сложным. По
еные сложности объясняют, почему компьютерные профессионалы воспитаны на вере.
146 Глава 2. Инструкции: язык компьютера
Упражнение
Компилирование процедуры копирования строки, показывающее, как используются
строки в программах на языке С
Процедура strepy копирует строку у в строку х, используя соглашение, принятое в языке С,
касающееся завершения строки нулевым байтом:
void strepy (char х[]. char у[])
{
int 1.
1 » 0:
while < ( * [ i] * y [ i ] ) ! • \ 0 ') / * котирование и тестирование 6ай*а * /
1 1:
}
Каким будет ассемблерный код MIPS?
Ответ
Ниже показан основной сегмент ассемблерного кода MIPS. Предположим, что базовые
адреса для массивов х и у находятся в SaC и в Sal, а переменная i находится в $s0. Инструк
ция strepy корректирует указатель стека, а затем помещает сохраняемый регистр 1$э в стек:
Strepy:
addl Ssp,Ssp.*а # корректировка стека дл» еще одной записи
sw $s0. O(Ssp) 4 сохранение SsO
Чтобы присвоить - начальное значение 0, следующая инструкция устанавливает значение
SsOв 0, складывая 0 и 0 и помещая эту сумму в SsO:
add SsO.Szero.Szero # ’ -0*0
Далее начинается цикл. Сначала формируется адрес y[i] путем добавления i к у[J:
LI add Stl.JsO.Sal # адрес у[т] -оиещае'св в Jtl
Обратите внимание на то, что нам не нужно умножать т на 4, поскольку у является массивом
байтов, а не слов, как в предыдущих упражнениях.
для загрузки символа в y[i] мы используем инструкцию загрузки байта без знака — load
уте unsigned, которая помещает символ в Н?:
1ьи я г . o m n # « г - у[1 ]
Такое же вычисление адреса помещает адрес xfl] в St3, а затем символ в St2 сохраняется но
лому адресу.
add $t3.$sO.$aO # адрес x[i] понещается в St3
sb St2. 0(Jt3) # x[1] • y[i]
Затем мы выходим из цикла, если символ был нулевым. То есть мы выхолим, если это по-
следний символ строки:
beq U2.Szero.L2 # если y[i] — 0. переход «а L2
Если нет, мы увеличиваем значение i на единицу и переходим в начало цикла:
addi SsO, SsO.1 ♦i - i • 1
j 11 # переход на 11
Если мы нс переходим в начало цикла, значит, это был последний символ в строке; мы вос-
пававливаем SsOи указатель стека, а затем возвращаемся из процедуры.
L2: lw SsO. 0(Ssp) # y[i] — 0: конец строки. Восстановление
# прежнего значение SsO
addl Ssp.Ssp.4 # выталкивание одного слова из стека
jr Sra # возвращение
148 Глава 2. Инструкции: язык компьютера
Как и load byte, load half ( l h ) рассматривает полуслово как число со знаком и по
этому осуществляет расширение знака, заполняя 16 левых разрядов регистра, а вот
инструкция load halfword unsigned ( l h u ) работает с целыми числами без з н а к а .
Поэтому' из этих двух инструкций l h u используется чаще. Инструкция store half
(sh) берет полуслово из правых 16 разрядов регистра и записывает его в память.
Полуслово копируется с помощью следующей последовательности:
lh u S t O . O t ls p ) # Ч тение по лусло ва (1 6 б и т ) и з источника
sh it 0 . 0 ( $ g p ) # Запись полуслова (1 6 б и т) в приеиник
-нс. 2.9. Пример алфавитов, поддерживаемых в Unicode. Unicode версии 4.0 имеет более
50 коллекций символов, называемых «блоками*. Каждый блок кратен числу 16, Например,
:еческий (Greek) начинается с 0370,,. а Кириллический (Cyrillic) начинается с 0400,,. Первые
столбца показывают 48 блоков, соответствующих обычным языкам, коюрые расположены
:имерно в том порядке, в котором они следуют в Unicode. Последние столбцы имеют 16 блоков,
-= пяющихся мультиязычными, и идут не по порядку 16-битная кодировка, называемая UTF-16,
ттользуется по умолчанию Кодировка переменной длины, называемая UTF-8, сохраняет
лнабор ASCII как восьмибитный и использует от 16 до 32 бит для других символов. UTF-32
пользует по 32 бига на символ. Чтобы получить дополнительную информацию, следует зайти
на сайт www.unicodc.org
Самопроверка
Какие из следующих утверждений о символах и строках в С и Java соответствуют
нствнтсльностн?
Строка в С занимает вдвое меньше памяти по сравнению с такой же строкой в
Java.
- Строки — это всего лишь неформальное название одномерных массивов сим
волов в С и Java.
Строки в С и Java используют null (0) для маркировки конца строки.
150 Глава 2. Инструкции: язык компьютера
Упражнение
Разгрузка 32-раэрядной константы
Каким будет ассемблерный кол MIPS для загрузки 32-разрядной константы в регистр JsO?
0000 0000 ООН 1101 0000 1001 0000 0000
О твет
Сначала нужно, используя инструкцию lui, загрузить верхние 16 разрядов, которые в деся
тичной форме имеют вид 61:
lui SsO. 61 И61 6 десятичной (соне - 0000 0000 ООП 1101 в двоичной
После этого значением регистра JsOстанет число
0000 0000 ООП 1101 0000 0000 0000 0000
Следующим шагом будет вставка нижних 16 разрядов, которые в десятичной форме имеют
вид 2304:
ori SsO. SsO. 2304 # 2304 в десятичной форме - 0000 1001 0000 0000
В конечном итоге регистр SsO приобретет требуемое значение:
0000 0000 ООП 1101 0000 1001 0000 оооо
2.10. Адресация MIPS для 32-раэрядмых непосредственных значений и адресов 151
10000 # п е р е й т и на а д р е с 10000
нижет быть преобразована ассемблером в следующий формат (на самом деле этот
гормат, как мы увидим далее, немного сложнее):
2 100002
6
6 разрядов 26 разрядов
152 Глава 2. Инструкции: язык компьютера
где значение кода операции (opcode) перехода равно 2, а адрес перехода равен
10000.
В отличие от инструкции безусловного перехода инструкция условного пере
хода вдобавок к адресу перехода должна указать два операнда. Таким образом,
инструкция
Ьле $ $ 0 . $ s l. E x it # перейти на м е тку E x i t , если SsO * Jsl
5 16 17 Exit
6 разрядов 5 разрядов 5 разрядов 16 разрядов
оые адреса для вызова процедур, в которых используется формат J -типа, как для
инструкции безусловного перехода, так и для инструкции безусловного перехода
и ссылки.
Поскольку все M IPS-инструкции имеют длину 4 байта, M IPS удлиняет дис
танцию условного перехода за счет того, что относительная адресация по счетчику
юманд ссылается на количество слов до следующей инструкции, а не на катичество
байтов. Таким образом, 16-разрядное поле может задать условный переход в четы
ре раза дальше, интерпретируя содержимое поля как относительный адрес слова,
1 не относительный адрес байта. Содержимое 26-разрядного поля в инструкции
безусловного перехода также является адресом слова, что означает, что оно пред
ставляет 28-раэрядиый адрес байта.
Уточнение. Так как счетчик имеет размер 32 разряда, то для безусловных переходов
4 разряда должны поступать из какого-нибудь другого места. Инструкция безуслов
ного перехода MIPS заменяет только нижние 26 разрядов счетчика команд, оставляя
верхние 4 разряда этого счетчика без изменений. Загрузчик и компоновщик (раз
дел 2.12) должны избегать выхода программы за границу адреса 256 Мбайт (64 мил
еюна инструкций); в противном случае безусловный переход должен быть заменен
тереходом по регистру, перед которым находятся другие инструкции для загрузки
а регистр полного 32-раэрядного адреса
Упражнение
Демонстрация смещения перехода на машинном языке
Цикл while в упражнении подраздела «Циклы» был скомпилирован в следующий ассем
блерный код MIPS:
LOOP ill Stl.Ss3.2 # Вреченньй регистр Stl - 4 * *
adc Stl.stl.1s6 * stl - адресу savefi]
Iw StO.O(Ul) ♦ Вреченмь'й регистр StO - save(i]
bne StO.SsS. Exit ♦ переход на нетну Exit, если save[i) * <
add’ Ss3.Ss3.1 #1*i ♦1
J Loop # переход »a нетку Loop
Exit
Если предположить, что начало цикла помещено в памяти по адресу 80000, то каким будет
машинный код MIPS для этою цикла?
Ответ
Вот как выглядят инструкции ассемблера и их адреса:
80000 0 0 19 9 2 0
80004 0 9 22 9 0 32
80008 35 9 8 0
80012 5 8 21 2
80016 8 19 19 1
80020 2 20000
80024 ...
154 Глава 2. Инструкции: язык компьютера
Следует помнить, что инструкции MIPS имеют байтовые адреса, поэтому адреса последова
тельных слов отличаются друг от друга на 4, го есть на число бай гов в слове. Инструкция Ьпе
в четвертой строке прибавляет к адресу следующей инструкции (80016) 2 слова или 8 байт,
задавая место назначения условного перехода относительно этой следующей инструкции
(8 + 80016), а не относительно инструкции условного перехода или перехода с использова
нием полного адреса назначения (80024). Инструкция безусловного перехода в последней
строке использует полный адрес (20000 к 4 - 80000), соответствующий метке Loop.
• ~'мамт; •*
Интерфейс аппаратного и программного обеспечения
Большинство условных переходов нацелены на близлежащие адреса, но иногда
условный переход осуществляется очень далеко, дальше, чем это может быть пред
ставлено в 16 разрядах инструкции условного перехода. Здесь на выручку приходит
ассемблер, который поступает так же, как он это делает с большими адресами или
константами: он вставляет безусловный переход на место назначения условного
перехода и инвертирует условие, чтобы условный переход решат, нужно ли про
пустить безусловный переход.
Упражнение
Условный переход на большое расстояние
Возьмите условный переход при равенстве значений регистров JsO и $sl,
beg tsO. Ssl. LI
и замените его двумя инструкциями, предлагающими намного более адинное расстояние
перехода.
Ответ
1. Непосредственная адресация
Непосредствен
ор Г5 rt ное число
2. Регистровая адресация
3. Базовая адресация
5. Псевдонепосредственная адресация
ор Address Память
Счетчик команд
□§> \ Слово
Ч с 2.11. Иллюстрация пяти режимов адресации MIPS. Операнды выделены темным фоном.
-чранд в режиме 3 находится в памяти, а операнд в режиме 2 находится в регистре Заметьте,
версии загрузки и сохранения имеют доступ к байтам, полусловам или словам. Для режима 1
-м н д о м является 16 разрядов самой инструкции Режимы 4 и 5 обращаются к инструкциям
• -амяти, где режим 4 добавляет 16-разрядный адрес, сдвинутый влево на два разряда к счетчику
тманд, а режим 5 объединяет 26-разрядный адрес, сдвинутый влево на два разряда с четырьмя
верхними разрядами счетчика команд
для более крупных программ. Процесс развития набора инструкции позволяет ар
хитектуре расширяться таким образом, чтобы программное обеспечение сохраняло
совместимость и передавалось по наследству следующему поколению архитектуры
Упражнение
Декодирование машинного кода
Какая инструкция на языке ассемблера соответствует згой машинной инструкции?
00af802016
Ответ
ор(31:2б)
28-26
0(000) 1(001) 2(010) 3(011) 4(100) 5(101) 6(110) 7(1 1 1 )
31-29
0(000) R-format Bltz/gez jump jump & branch branch blez Dgtz
link eq ne
1(001) add addi u set less set less andi Ori xori load
im m ediate than than imm. upper im
im m . unsigned m ediate
2(010) TLB ' f ir
3(011)
4(100) lo a d byte load Iwl load word load byte load half Iwr
half unsigned unsigned
5(101) store byte store swt store SWT
half word
6(110) load linked Iwcl
word
'(111) store cortd. swcl
word
ор(31:26) =010000 (TLB), rs(25:21)
23-21
0(000) 1(001) 2(010) 3(011) 4(100) 5(101) 6(110) 7 (111)
25-24
3(00) MfcO CfcO MtcO CtcO
1(01)
2(10)
3(11)
эмс. 2.12. Кодировка инструкций MIPS. Эта система обозначений дав1 значение поля по стро-
." и столбцам Например, верхняя часть рисунка показывает инструкцию загрузки слова — load
m ytj в строке 4 (1002для разрядов 31-29 инструкции) и в столбце 3 (011 г для разрядов 20-26 ин-
—о укции), то есть это соответствует значению поля ор (разряды 31 -26), равному 100011 г Выде-
<е-ме означает, что поле используется где-нибудь еще. Налример. R-format в строке 0 и столбце
] 1 оо * 000000;,) определяется в нижней части рисунка Следовательно, присутствие инструкции
•«'-итаиия subtract с строке 4 и в столбце 2 в нижней части означает, что поле funct (разряды
- - 0 ) инструкции имеет значение 100010г, а поле ор (разряды 31-26) имеет значение 000000г.
У ч е н и е плавающей точки — floating point (FIR) в строке 2. столбце 1 определено на рис. 3.14
■ ~аве 3. А значение Bltz/gez является кодом операции (opcode) для четырех инструкций: bltz,
jez bltzal и bgezal В этой главе рассматриваются инструкции, представленные полным именем
• выделенные жирным шрифтом, а в главе 3 рассматриваются инструкции, также выделенные
жирным шрифтом, но представленные в сокращенной форме
158 Глава 2. Инструкции: язык компьютера
В табл. 2.8 показаны все форматы M IPS-инструкций. В табл. 2.1 показаны ин
струкции языка ассемблера, рассматриваемые в данной главе. Не показанная в ней
часть M IPS-инструкций работает главным образом с арифметикой и с веществен
ными числами и будет рассмотрена в следующей главе.
Самопроверка
I. Каков диапазон адресов для условных переходов в MIPS (К - 1024)?
1. Адреса между 0 и 64 К - 1.
2. Адреса между 0 и 256 К - 1.
3. Адреса приблизительно на 32 К вверх, до перехода, и приблизительно на 32 К
вниз после него.
4. .Адреса приблизительно на 128 К вверх, до перехода, и приблизительно на 128 К
вниз после него.
II. Каков диапазон адресов для безусловного перехода (jump) и безусловного пере
хода со ссылкой (jump and link) в MIPS (М = 1024 К)?
1. Адреса между 0 и 64 М - 1.
2. .Адреса между 0 и 256 М - 1.
3. Адреса приблизительно на 32 М вверх до перехода, и приблизительно на 32 М
вниз после него.
4. .Адреса приблизительно на 128 М вверх до перехода, и приблизительно на 128 М
вниз после него.
5. Переход осуществляется в любое место внутри блока из 64 М адресов, когда
счетчик команд предоставляет верхние 6 разрядов.
6. Переход осуществляется в любое место внутри блока из 256 М адресов, когда
счетчик команд предоставляет верхние 4 разряда.
III. Какая инструкция языка ассемблера MIPS соответствует инструкции на ма
шинном языке, имеющей значение 0000 0000|6?
1. j.
2. R-формат,
2.11. Параллелизм и инструкции: синхронизация 159
1 add1.
I ill,
5 mfcO.
: Неопределенный код операции (opcode): допустимой инструкции, соответству
ющей значению 0, не существует.
^грузкой и условным сохранением должно быть как можно меньшим, чтобы свести
i минимуму вероятность того, что либо не связанное с этим процессом событие,
з о конкурирующий процессор станут причиной частых неудачных завершений
жструкции условного сохранения.
Преимуществом механизма связанной загрузки - условного сохранения —
а.т е т е я возможность его использования для создания других примитивов син-
• низании, таких как атомарное сравнение и обмен или атомарное извлечение
162 Глава 2. Инструкции: язык компьютера
Самопроверка
Когда используются такие примитивы, как связанная загрузка и условное сохра
нение?
1. В том случае, когда взаимодействующие потоки параллельных программ нуж
даются в синхронизации, чтобы правильно считывать и записывать совместно
используемые данные.
2. В том случае, когда взаимодействующие процессы на однопроцессорной систе
ме нуждаются в синхронизации при чтении и записи совместно используемых
данных.
Компилятор
Компилятор превращает программу на языке С в п/юграмму на языке ассемблера,
символьную форму того, что понятно машине. Программы на языках высокого
уровня занимают намного меньше строк кода, чем программы на языке ассемблера,
поэтому продуктивность работы программиста существенно возрастает.
В 1975 голу многие операционные системы и ассемблеры были написаны на
языке ассемблера, потому что объем памяти был невелик и компиляторы рабо
тали неэффективно. Увеличение объема памяти одного DRAM-4ima в 500 000 раз
снизило остроту проблемы размера программы, и сегодня оптимизирующие
компиляторы способны выдавать программы на языке ассемблера, сопоставимые
по качеству с теми, которые создаются специ
алистами по программированию на этом язы
язык ассемблера ке’ а для больших программ результат работы
Символьный язык, который может транс- компилятора по|юй превосходит но качеству
лироеатьсн в двоичный машинный язык. ручную работу.
2.12. Трансляция и запуск программы 163
Программа на С
Компилятор
_____ S ________
Программа на языке ассемблера
Загрузчик
Память
*мс 2.13. Иерархия трансляции программы на языке С. Сначала программа на языке высо
к о уровня компилируется в прог рамму на языке ассемблер», а затем собирается в объектный
-эдуль на машинном языке. Для разрешения всех ссылок компоновщик объединяет несколько
-одулей с библиотечными процедурами. Затем загрузчик помещает машинный код в нужное
•^сто памяти для выполнения этого кода процессором. Для ускорения процесса трансляции
—которые этапы пропускаются или объединяются. Некоторые компиляторы сразу производят
оъектные модули, в то время как другие используют компонующие загрузчики, выполняющие
_за последних этапа. Чтобы идентифицировать тип файла, в UNIX придерживаются соглашения
: уффиксах для файловых имен: исходные С-файлы называются х.с. ассемблерные файлы — x.s,
лъектные файлы к о , файлы статически связанных библиотечных процедур — к.а. файлы дина-
-чески связанных библиотечных процедур —x.so, а исполняемые файлы по умолчанию мазыва
. сяа.оиГ В MS-DOS для тех же целей используются суффиксы .С. .ASM, OBJ, .UB, .DLL и .EXE.
Ассемблер
: ык ассемблера не только служит интерфейсом с программами высокого уровня,
а также может обрабатывать в качестве вполне самостоятельных общепринятые
нации инструкций машинного языка. Оборудование не должно иметь реализа-
эш этих инструкций; но их появление в языке ассемблера упрощает трансляцию
создание программ. Такие инструкции назы-
ицотся псевдоинструкциями.
Псевдоинструкци и
Как уже ранее упоминалось, оборудование Общепринятые вариации инструкций на
ЫIPS обеспечивает постоянное присутствие языке ассемблера, часто обрабатываемые
левого значения в регистре Izero. То есть где как вполне самостоятельные инструкции.
164 Глава 2. Инструкции: язык компьютера
Компоновщ ик
ходя из всего ранее представленного, предполагается, что одно-единственное
вменение в одной строке одной процедуры потребует компиляции и ассемблиро-
ия всей программы. Полная перетрансляция приводит к лишней трате компью-
рных ресурсов. Повторная трансляция не нужна, в частности, стандартным би
блиотечным процедурам, поскольку програм м ист будет ком пилировать
« ассемблировать процедуры, которые по определению практически никогда не
вменяются. Альтернативный вариант заключается в независимой компиляции
аждой процедуры, чтобы изменение в одной строке потребовало компиляции
I ассемблирования только одной процедуры. Для его осуществления нужна новая
з* темная программа, которая называется редактором связей, или компоновщи-
>м. Эта программа «сшивает» в единое целое все программы на машинном языке,
торые были оттранслированы ассемблером независимо друг от друга.
Компоновщик работает в три этапа:
Помещает код и данные модулей в память в символьном виде.
. Определяет адреса данных и метки инструкций.
Исправляет как внутренние, так и внешние ссылки.
Д ля разрешения всех неопределенных ме-
- *. компоновщик использует настроечную ин- Компоновщ ик (linker)
z- эмацию и таблицу имен, присутствующую Также называется редактором связей (link
> каждом объектном модуле. Подобные ссылки editor). Системная программа, объединяю
щая независимо отассемблирое энные про
■меются в инструкциях условного и безуслов- граммы на машинном языке в исполняемый
я со перехода и в адресах данных, то есть работа файл и разрешающая все неопределенные
-ой программы во многом напоминает работу метки.
166 Глава 2. Инструкции: язык компьютера
Упражнение
Компоновка объектных файлов
Нужно скомпоновать два, показанных ниже, объектных файла. Следует показать обновлен
ные адреса первых нескольких инструкций полноценного исполняемого файла. Инструкции
показываются на языке ассемблера только для того, чтобы сделать упражнение понятнее;
в реальности инструкции будут представлены числами
Заметьте, что в объектных файлах мы выделили адреса и обозначения, которые должны быть
обновлены в процессе компоновки: инструкции, которые ссылаются на адреса процедур А и В,
а также инструкции, которые ссылаются на адреса слов данных КиГ
Размер данных 20 „
дхюедурс а нужно найти адрес для переменной, имеющей метку к, чтобы поместить его
Обструкцию загрузки, и найти адрес процедуры В. чтобы поместить его в инструкцию jal.
^Ж'Цедура Внуждается в адресе переменной, имеющей метку v. для инструкции сохране-
■ л и в адресе процедуры Адля своей инструкции jal. Согласно рис. 2.7, текстовый сегмент
- кается с адреса 40 000016, а сегмент данных —с адреса 1000 00001в. Текст процедуры Л
а «- '.дается по первому адресу, а ее данные —по второму. Заголовок объектного файла для
тх си-дуры Асообщает, что ее текст занимает 100|6 байт, а ее данные занимают 20)6 байт,
г му начальный адрес дли текста процедуры Вбудет равен 40 0100)6, а ее данные будут
*икаться с адреса 1000 002014.
...
.. . ...
10 0 0 0 0 0 0 ,, (X)
10 0 0 0 020 , (Y)
... ...
Теперь компоновщик обновит поля address инструкций. Чтобы узнать формат редактируе
мого адреса, он использует пате, определяющее тип инструкции. Здесь используются поля
двух типов:
1. С инструкциями ja l разобраться проще, потому что они используют иеевдонепосред-
ственную адресацию. Инструкция jal по адресу 40 0004,, получает в свое адресное поле
40 0100,, (адрес процедуры 0), а инструкция ja l по адресу 40 0104,,. получает в свое
адресное поле 40 0000,, (адрес процедуры А).
2. С адресами инструкций загрузок и сохранений дело обстоит сложнее, поскольку они
вычисляются относительно базового регистра. В данном примере в качестве базового
регистра используется глобальный указатель.
На рис. 2.7 показано, что регистр Igp имеет начальное значение 1000 8000,,. Для получения
адреса 1000 0000,, (адреса слова К) мы помещаем 8000,, в адресное поле инструкции lw по
адресу 40 0000,,, Точно так же мы помешаем 8020|б в адресное поле инструкции sw по ядре
су 40 0100,, для получения адреса 1000 0020|6 (адреса слова Y).
Загрузчик
После того как исполняемый файл будет сохранен на диске, операционная система
считывает его в память и запускает на выполнение. В UNIX-системах загрузчик
выполняет следующие действия:
1. Считывает заголовок исполняемого файла для определения размера текстового
сегмента и сегмента данных.
2.12. Трансляция и запуск программы 169
Текст
ja г а
lw г I
ч | _ __ 1
Д ан
ны е
Текст
li ID
j
1__ 1
Текст Динамический
компе новщик загрузчик
Перекомпоновка
DLL-процедуры
J 1
1
Данные/ I
Текст
ЧИСТ J
DLL процедура DLL-процедура
1
1
* 1
1
j>
Рис. 2.15. Иерархия трансляции Java-программы. Сначала программа на языке Java компи
лируется в двоичную версию байт - кода Java со всеми адресами, определенными компилятором
После этого Java-программа готова к запуску в интерпретаторе, который называется виртуальной
машиной Java (JVM). Эта виртуальная машина в процессе выполнения программы связывается
с нужными методами в Java-библиотеке. Для достижения более высокой производительности
JVM может вызвать JIT-компилятор, который выборочно компилирует методы в соответствующие
инструкции машинного языка той машины, на которой он запущен
Самопроверка
Как вы думаете, какие преимущества интерпретатора над транслятором были важ
нее всего для разработчиков Java?
Простота создания интерпретатора.
Более подробная система сообщения </
Л Т -ком пилятор
Название, часто присваиваемое компиля ошибках.
тору, который работает в процессе еыпол- 3 Более компактный объектный код.
нения программы, транслируя интерпрети
руемый кодовый сегмент в машинный код 4. Независимость от машины, на которой за
того компьютера, на котором он работает. пускается профамма.
2.13. Объединение всего ранее рассмотренного в упражнении 173
" и с т и н г 2.1 . Процедура на язы ке С, которая меняет местами содерж им ое двух ячеек
памяти. Ф рагм ент, использую щ ий эту процедуру, приведен в уп р а ж н е
нии по сортировке.
id swap(int v[], int k)
mt temp;
temp - v[k]:
»[k] - v[k+l]:
v[k+l] - temp:
Процедура swap
Начнем с кода процедуры обмена, показанной в листинге 2.1. Эта процедура просто
• няет местами содержимое двух ячеек памяти. При ручной трансляции с языка С
язык ассемблера мы пройдем следующие основные этапы:
Выделение регистров под переменные программы.
. Создание кода для тела процедуры.
1 Сохранение регистров на время вызова процедуры.
В этом разделе описывается процедура обмена, разбитая на три части, а в конце
части будут объединены.
Процедура sort
тобы вы по-настоящему смогли оценить скрупулезность программирования на
»ыкс ассемблера, мы рассмотрим второй, более длинный пример. На этот раз будет
«дана процедура, которая вызывает процедуру swap. Создаваемая программа сор-
трует массив целых чисел, используя пузырьковую сортировку, или сортировку
мена, которая является одной из самых простых и едва ли не самой быстрой из
зртировок. В листинге 2.4 показана версия программы на языке С. Мы еще раз
эедставим эту процедуру по частям, завершив ее рассмотрение полноценным
вариантом.
int 1. j .
for (1 - 0: 1 < n: 1 +- 1) {
for (j - i - 1; j >- 0 Si v[JJ > v[j ♦ 1]: J — 1) {
swap(v.j):
}
}
случае. Поскольку нам нужно проверить справедливость выражения $s0 > *al,
условный переход будет произведен в том случае, если значение регистра StO будет
равно нулю. Для всего этого потребуются две инструкции:
f o r l t s t :s i t S tO . SsO . Sal # р еги стр S tO - 0. если SsO > S a l 0> n)
b ee S tO . S z e r o .e x lt l # переход к нет ке e x i t l . если SsO i Sal d> n)
(те л о п е р в о го цикла fo r)
addr t s l. SsO . -1 # j - 1 - 1
r 2 t s t : s lt i S tO . S s l. 0 # реги стр S tO * 1 . если Ssl < 0 (J < 0)
bne S tO . sze ro . e x it 2 # п е р е х о д на e x 1 t 2 . если Ssl < 0 (j < 0)
s ll S t l. S s l. 2 # реги стр S t l - J * 4
add S t2 . S aO . S tl # р еги стр S t2 * v ♦ (j * 4)
lw S t3 . 0 (S t2 ) # р еги стр S t3 - v [ j]
lw S t4 . 4 (S t2 ) # р е ги стр S t4 = v[j + 1]
S it S tO . S t4 . S t3 # р е г и с т р S tO « 0 . если tt.4 > S t3
beq S tO . S z e ro . e x it 2 # переход на e x i t 2 . есл и S t4 > S t3
addl S s l. S s l. -1 # j -« 1
j fo r2 ts t # переход к проверке условия внутреннею цикла
a n t2
swap
ние р е ги с т р о в
Тело процедуры
Перемещение m ove S s 2 . SaO # к о п и р о в а н и е п а р а м е т р а SaO в S s 2 ( c o x p . SaO)
параметров m ove S s 3 . Sal # копирование парам етра $ a l a is 3 (со х р . S a l)
Внутренний addi S s l. S s l. -1 # j -= 1
Ц И КЛ j fo r2 ts t # переход к проверке условия в н у т р е н н е го цикла
Восстановление регистров
e x i t 1: lw SsO . 0 ($ sp ) # во сста н ов лен и е из с т е к а SsO
lw S s l. 4 (S sp ) # во сста н ов л ен и е из с т е к а Ssl
lw Ss2. 8 (S sp ) # во сста н ов лен и е из с т е к а Ss2
lw S s 3 .1 2 (S s p ) # во сста н ов л ен и е из с т е к а Ss3
lw S r a .l6 ( S s p ) # во сста н ов лен и е из с т е к а S ra
addi S s p .S s p . 20 # восстановление ука за те л я стека
Коэффициент
Относительная Относительная ускорения
Метод Оптими производитель производитель Quicksort по
Язык
выполнения зация ность пузырько ность сортировки сравнению
вой сортировки Quicksort с пузырьковой
сортировкой
С Компилятор Нет 1 ,0 0 1 ,0 0 2468
Компилятор 01 2,37 1,50 1562
Мы рассмотрели все части процедуры. Код M IPS для очистки массива с по
мощью индексов имеет следующий вид:
m ove П О . J z e r o # i - 0
loopl: s ll J t l. U O . 2 # J tl - 1 * 4
add J t2 .J a O .ttl # Jt2 = адрес a r r a y [ lj
sw Jze ro . 0 ($ t2 ) # a r r a y [ i] - 0
addi J tO .J tO .l # i - l ♦ 1
s it J t3 .ttO .J a l # Jt3 - (i < разм ер)
bne J t 3 .J z e r o ,lo o p l # если (i < р а зм е р ), п е р е х о д на lo o p l
(Этот код работает, пока size, то есть размер, больше нуля; ANSI С требует про
верки размера до запуска цикла, но здесь это правило будет проигнорировано.)
Режимы адресации
В табл. 2.13 показаны режимы адресации данных, поддерживаемые в ARM. В отли
чие от MIPS ARM не выделяет регистр для содержания нулевого значения. В MIPS
имеется всего три простых режима адресации данных (см. рис. 2.12), а вот у ARM
имеется девять режимов, которые включают довольно сложные вычисления. На
пример, в ARM имеется режим адресации, который для формирования адреса
186 Глава 2. Инструкции: язык компьютера
ARM MIPS
31 28 27 20 19 16 1S 12 11 0
ARM Op»* Op* R tf4 Rd4 Const’1
_L Г
Перенос данных 31 26 25 21 20 16 15 0
31 28 27 24 23
Условны* перевод
31 26 2$ 21 20 1 i IS
rr
MIPS Op* R sl5 | K i ' Const**
IK ТЛ %
Ъегусдоьмым nepeatopj
2b 2S
AWS
i в»*
1 C onsf*
Рис. 2.16. Ф орм аты инструкций ARM и MIPS. Разница заключается в том, что а одной
тектуре 16. а в другой 32 регистра
2.15. Реальное оборудование: инструкции ARM 189
Операция «population count* - это собственное имя операции вычисления веса Хэмминга
для битовой строки. Фактически подсчет суммы цифр в ней (или, что то же самое. —
числа единичных символов). — Примеч. ред
194 Глава 2. Инструкции: язык компьютера
registers). Микропроцессор 80386 содержит всего восемь GPR. Это означает, что
M IPS-программы могут использовать в 4 раза, а ARM-программы в 2 раза больше
регистров.
В табл. 2.15 показаны арифметические, логические инструкции и инструкции
переноса данных. Эти инструкции являются двухоперандными. У них есть две
важные характерные особенности. У арифметических и логических инструкций
х86 один операнд должен действовать и как источник, и как приемник, в то время
как ARM и M IPS предлагают для источника и приемника отдельные регистры
Это ограничение увеличивает нагрузку на сокращенное количество регистров, по
скольку один из регистров-источников должен быть изменен. Вторая характерная
особенность заключается в том, что один из операндов должен быть в памяти. Та
ким образом, в отличие от ARM и MIPS практически каждая инструкция должна
иметь один операнд в памяти.
Режимы адресации данных в памяти, подробно рассматриваемые ниже, пред
лагают два размера адресов внутри инструкций, Это так называемое смещение
может быть 8- или 32-разрядным.
Хотя для операндов в памяти может использоваться любой режим адресации,
существуют ограничения по выбору регистров, которые могут использоваться
в данном режиме. В табл. 2.16 показаны режимы адресации х86 и указаны те
регистры общего назначения, которые не могут быть использованы в каждом из
режимов, а также то, как можно получить такой же результат с использованием
М IPS-инструкций.
Т ип о п е р а н д а и с т о ч н и ка -п р и е м н и ка В тор о й о п е р а н д -и с то ч н и к
Регистр Регистр
Регистр Непосредственное значение
Регистр Память
Память Регистр
Память Непосредственное значение
2.16. Реальное оборудование: инструкции х86 195
Имя Использование
31 О
GPH О
GPR 1
GPR2
GPR3
GPR 4
GPRS
GPR 6
GPR 7
Ограниче
Режим Описание MIPS-эквивалент
ния
Косвенно- Адрес находится в регистре Только не ESP lw SsO.O(Ssl)
регистровый и EBP
Режим, ис Адрес содержится в базо Только не ESP Iw$s0,100($s1) # <= 16-разр.
пользующий вом регистре плюс смеще # смещение
базу с 8 - или ние
32-разрядным
смещением
База плюс Адрес — это База: любой mul $t0.$s2,4
масштабируе База + (2 ““ “ т',6х Индекс), GRP add $tO,StO,$s1
мый индекс где масштаб имеет значе Индекс: толь lw SsO.O(StO)
ние 0 , 1 , 2 или 3 ко не ESP
База плюс Адрес — это База: любой mul $t0,$s2,4
масштабируе База + ( 2 х Индекс) + GRP add StO.StO.Ss1
мый индекс смещение, где масштаб Индекс: толь )w Ss0,100($t0) # < * 16-разр.
С 8 - или имеет значение 0 ,1 . 2 или 3 ко не ESP # смещение
32 -разрядным
смещением
Инструкция Функция
je имя если равно (код условия) (Е1Р=имя),
EIP-128 <= имя < EIP-428
imp имя Е1Р=имя
—
call имя SP-SP-4; M[SP]=EIP+5; Е1Р=имя,
movwEBX,[EDI*45] EBX=M[EDI+45]
push ESI SP=SP-4; MJSP)=ESI
pop EDI EDI=M[SPJ; SP=SP*4
add EAX,#6765 EAX= EAX+6765
test EDX,#42 Установка кода условий (флагов) с помощью EDX и 42
movsl M|EDI)=M(ESI);
EDI-EDI-4; ESI=ESU4
Условные переходы в х86, как и в ARM, основаны на кодах условий, иди флагах.
Коды условий устанавливаются в качестве побочного результата операции и ис
пользуются чаще всею для сравнения значения результата с нулем. Затем переходы
проверяют коды условий. Переход на основе значения счетчика команд должен
быть указан в виде количества байтов, поскольку, в отличие от ARM и MIPS, не
все инструкции 80386 имеют длину 4 байта.
Строковые инструкции являются той самой частью, которая досталась се
мейству х86 по наследству от микропроцессора 8080 и в большинстве программ
обычно не используются. Зачастую они работают медленнее, чем их программные
эквиваленты (см. описание заблуждения в разделе 2.17 «Заблуждения и недораз
умения*).
Некоторые целочисленные инструкции х86 показаны в табл. 2.18. Многие ин
струкции доступны как формате байтов, так и в формате слов,
198 Глава 2. Инструкции: язык компьютера
Инструкция Значение
Управление Условные и безусловные переходы
|П2. jz Переход при соответствующем условии на EIP + 8 -разрядное смещение;
JNE (для JNZ), JE (для JZ) являются альтернативными именами
imp Безусловный переход —8 - или 16-разрядное смещение
call Вызов подпрограммы — 16-разрядмое смещение; адрес возврата про
талкивается в стек
ret Выталкивание адреса возврата из стека и переход на этот адрес
loop Циклический переход — декремент ЕСХ; переход на EIP + 8 -разрядное
смещение, если ЕСХ» 0
Перенос данных Перемещение данных между регистрами или между регистром
и памятью
move Перемещение между двумя регистрами или между регистром и памятью
push, pop Проталкивание операнда-источника в стек; выталкивание операнда из
вершины стека в регистр.
les Загрузка ES и одного из регистров общего назначения (GPR) из памяти
Арифметика, Арифметические и логические операции, использующие регистры
логика данных и память
add.sub Сложение источника с приемником; вычитание источника из приемника;
формат регистр-память
2.16. Реальное оборудование: инструкции х86 199
Инструкция Значение
Сравнение источника и приемника; формат регистр-память
Л shr. гсг Сдвиг влево; логический сдвиг вправо; вращение вправо с установкой
кода условия carry (перенос) по заполнению
Превращение байта в восьми самых правых битах per истра ЕАХ в 16-раз-
* *
рядное слово в правой части ЕАХ
М Логическое И над источником и приемником, установка кодов условий
«с. dec Инкремент приемника; декремент приемника
or. хек Логическое ИЛИ; исключающее ИЛИ; формат регистр-память
Работа со стр о Перемещение между строковы м и операндами; длина задается
ками преф иксом повторения
-novs Копирование из строки-источника в место назначения путем инкремента
ESI и EDI; может повторяться
tods Загрузка байта, слова или двойного слова из строки в регистр ЕАХ
Итог з н а к о м с т в а с х 8 6
У Intel 16-разрядный микропроцессор появился на два года раньше, чем более эле
гантные по архитектуре изделия его конкурентов, например микропроцессор Mo
torola 68000, и это обстоятельство стало главным фактором выбора микроироцес-
>ра 8086 в качестве центрального процессора для компьютера IBM PC. Инженеры
Intel в целом согласны с тем, что х86 труднее создавать, чем такие компьютерные
истемы, как ARM и MIPS, но более широкие рыночные возможности позволяют
выделять больше ресурсов на преодоление дополнительных сложностей. Стилевые
недостатки х86 компенсируются количественными показателями, создавая этому'
семейству привлекательность в обозримой перспективе.
Этому способствует то обстоятельство, что наиболее часто используемые ком
поненты архитектуры х86 не слишком сложны в реализации, судя но тому, что
AMD и Intel продемонстрировали, быстро подняв производительность программ
целочисленного вычисления с того уровня, который был в 1978 году. Чтобы до
стичь этого уровня производительности, компиляторы должны избегать тех частей
архитектуры, от которых трудно добиться работы с высокой скоростью.
200 Глава 2. Инструкции: язык компьютера
a) JE EIP + смещение
4 4 8
JE У сп еем * Смещение
б) CALL
8 32
г) PUSH ESI
S 3
PUSH Reg
e)TESTEDX, #42
7 1 8 32
Рис. 2.18. Форматы типичной инструкции х86. Кодирование постбайта показано на рис 2.19
Многие инструкции имею! одноразрядное поле w, которое сообщает о том, ивлиегся ли операция
байтом или двойным словом. Поле d в инструкции MOVиспользуется в инструкциях, которые могут
перемещать данные в память или из памяти, и показывает направление перемещения. Инструк
ция ADD требует 32 бита для поля непосредственного значения — immediate, поскольку в 32-раз-
рядном режиме непосредственные значения имеют размер либо 8 . либо 32 разряда В инструк
ции TEST поле immediate имеет длину 32 разряда, поскольку 8 -раэрядных непосредственных
значений при тестировании в 32-разрядном режиме не существует. В общем, длина инструкций
может варьироваться от 1 до 17 байт. Большая длина обусловливается дополнительными одно
байтными префиксами, наличием как 4-байткых непосредственных значений, так и 4-байтных
адресов перемещений, использованием кода операции (opcode) из 2 байтов и спецификатора
режима масштабируемого индекса, при котором добавляется еще 1 байт
reg w = 0 w= = 1 r/m mod =0 mod ■ 1 mod - 2 mod * S
0 AL AX EAX 0 addr=BX+SI =EAX Тот же адрес, Тот же адрес, Тот же адрес, Тот же адрес, To же,
что и в mod = 0 ♦ что и в mod - 0 + что и в mod = 0 ♦ что и в mod^O + что и
1 CL cx ECX 1 addr=BX+DI =ECX dispS disp8 displfi disp32 в поле
reg
2 DL DX EDX 2 addr-BP»SI “EDX
Рис. 2.19. Кодирование первого спецификатора адреса х86: mod, reg, r/m. Перныенегыре столбца покапывают кодирование 3-бито
вого поля reg, которое зависит от значения бита w кода операции (opcode) и от режима, в котором находится машина: 16-раэрядного режима
(8086) или 32-раэрядного режима (80386), Остальные столбцы раскрывают значения полей mod и r/m. Значение 3-битового поля r/m зависит
от значения 2-битового поля mod и размера адреса. В основном регистры, используемые в вычислениях адреса, перечислены в шестом и
седьмом столбцах под общим заголовком mod = 0 ; в режиме mod = 1 к ним добавляется 8 -раэридное смещение (displacement, сокращенно
disp), а в режиме mod = 2 — 16-разрядное или 32-разрядное смещение, в зависимости от режима адресации Исключения следующие:
1) при r/m = 6 , когда mod = 1 или mod = 2, в 16-раэрядном режиме выбирается ВР плюс смещение; 2) при т/m = 5, когда mod = 1 или mod = 2,
в 32-раэрядмом режиме выбирается EBP плюс смещение; и 3) при r/m « 4, а 32-раэрядном режиме, когда значение mod * 3, (sib) означает
использование режима масштабируемого индекса, показанного в табл. 2 .15. Когда mod = 3, поле г/m показывает регистр, используя то же
самое кодирование, которое используется в поле reg в сочетании с битом w
201
202 Глава 2. Инструкции: язык компьютера
*' новлять код через каждые несколько лет, заставляя его работать с новыми вер-
т ями операционных систем или на машинах новой модели. Написание программы
« языке высокого уровня, а не на языке ассемблера, не только позволяет будущим
о чпиляторам привязывать код к будущим машинам, но и упрощает поддержку
.«ирам.много обеспечения и позволяет профамме работать на большем количестве
однотипных компьютеров.
Заблуждение. Коммерческая важность совместимости на уровне двоичных кодов
гначает, что удачный набор инструкций не будет подвергаться изменениям.
1000-
900 •
800-
700-
600 -
500 -
400 -
т
S 300 -
В
хО 20 0-
100 -
0- I I I I I I I 1 I I I I 1-1 I I I Г I" г т
Год
Рис. 2.20. График роста количества инструкций в наборе х86 с течением времени. Хотя
некоторые из расширений набора инструкций имели вполне очевидную техническую ценность,
схорост- изменений, помимо всего, усложняла другим компаниям задачу создания совместимых
процессоров
204 Глава 2. Инструкции: язык компьютера
ИЛИ (or) or R
Таблица 2 .1 9 (продолжение)
MIPS-инструкции Имя Ф ормат
set less than immediate (установка -если меньше чем непосредственное slti
значение»)
'
set less than immediate unsigned (установка «если меньше чем непо sltiu I
средственное значение без знака»)
lump (переход) i J
jump register (переход по регистру) Jr R
jump and link (переход и ссылка) jal J
MIPS-псевдоинструкции Имя Ф ормат
move (перемещение) move R
Multiply (умножение) mult R
multiply immediate (умножение на непосредственное значение) multi I
load immediate (загрузка непосредственною значения) li I
branch less than (переход «если меньше чем») bit I
branch less than or equal (переход «если меньше чем или равно») Ые I
branch greater than (переход «если больше чем») bgt I
branch greater than or equal (переход «если больше чем или равно») bge I
Частота использования
Класс Соответствия в язы
Примеры из MIPS С плав,
инструкций ках вы сокого уровня Целочисл.
точкой
Арифметические add, sub, addi Операции в инструкци 16% 48%
ях присваивания
Переноса данных Iw, sw, lb, Ibu, Ih, Ihu, Ссылки на структуры 35% 36%
sb, lui данных, например на
массивы
Логические and. or, nor, andi, or!, Операции в инструкци 1 2 % 4%
sll. srl ях присваивания
Условного пере beq, bne, sit, slti, sltiu Инструкции 1 f и циклы 34% 8%
хода
Безусловного J. J'. jal Вызов процедур, воз 2% 0%
перехода врат из процедур и ин
струкции case-switch
2.19. Упражнения 207
2.19. Упражнения
1редоставлены Джоном Оливером (.John Oliver), Калифорнийский политехниче-
э я й государственный университет, Сан-Луис-Обиспо, с добавлениями от Николь
-лсян (Nicole Kaiyan) (Университет Аделаиды) и Милоша Првуловика (Milos
-. ulovic) (Технологический институт Джорджии).
Ваша цель должна заключаться в изучении набора реальных M IPS-инструкций,
если ставится вопрос о подсчете количества инструкций, нужно брать в расчет не
л евдоинструкции, а реальные инструкции, подлежащие выполнению.
Встречаются случаи, требующие применения псевдоинструкций (например,
трукции 1а, когда реальное значение на время ассемблирования еще не извест-
о) Во многих случаях такие инструкции очень удобны и позволяют получить код,
который легче читается (например, инструкции 11 и rove). Если псевдоинструкции
вбираются из зтих соображений, го, пожалуйста, добавьте пару предложений к ва-
му решению с обоснованием того, какие псевдоинструкции применены и почему.
Упражнение 2.1
Следующие задачи связаны с трансляцией с языка С на язык ассемблера MIPS.
Предположим, что даны переменные g, h, 1 и j, которые могут рассматриваться, со-
ласно объявлению в С-программе, в качестве 32-разрядных целых чисел.
J f - g + h + i ♦ j;
f - g » (h » 5).
2.1.1 J5J <2.2> Каким будет ассемблерный код MIPS для каждой из показанных
зышс инструкций на языке С? Используйте минимальное количество ассемблер
ных инструкций MIPS.
2.1.2 [5] <2.2> Сколько потребуется инструкций на языке ассемблера MIPS,
чтобы выполнить каждую из показанных выше инструкций на языке С?
2.1.3 [5] <2.2> Каким будет конечное значение переменной f, если переменные
f. g, h, i и j имеют соответственно значения 1, 2 ,3 ,4 и 5?
a AdC f. g. h
6 adai f. f. 1
add f. g. n
2.1.4 [5] <2.2> Какой будет соответствующая инструкция на языке С для по
казанных выше M IPS-инструкций?
2.1.5 (5) <2.2> Каким будет конечное значение переменной f, если переменные
f, g, h и 1 имеют соответственно значения 1. 2. 3 и 4?
208 Глава 2. Инструкции: язык компьютера
Упражнение 2.2
Следующие задачи связаны с трансляцией с С на MIPS. Предположим, что даны
переменные g, h, 1 и j, которые могут рассматриваться, согласно объявлению
в С-программе, в качестве 32-разрядных целых чисел.
а f - f ♦ f ♦ i;
б f - g + <J + 2);
2.2.1 [5] <2.2> Каким будет ассемблерный код MIPS для каждой из показанных
выше инструкций на языке С? Используйте минимальное количество ассемблер
ных инструкций MIPS.
2.2.2 [5] <2.2> Сколько потребуется инструкций на языке ассемблера MIPS
чтобы выполнить каждую из показанных выше инструкций на языке С?
2.2.3 [5] <2.2> Каким будет конечное значение переменной f, если переменные
f, g, h и i имеют соответственно значения 1, 2, 3 и 4?
Упражнение 2.3
Следующие задачи связаны с трансляцией с С на MIPS. Предположим, что дань
переменные g, h, i и j, которые могут рассматриваться, согласно объявления
в С-программе, в качестве 32-разрядных целых чисел.
a f - f « g » h » i ♦ j * 2;
в f - g - (f ♦ 5):
2.3.1 (5] <2.2> Каким будет ассемблерный код MIPS для каждой из показанных
выше инструкций на языке С? Используйте минимальное количество ассемблер
ных инструкций MIPS.
2.3.2 [5J <2.2> Сколько потребуется инструкций на языке ассемблера MIPS
чтобы выполнить каждую из показанных выше инструкций на языке С?
2.3.3 [5] <2.2> Каким будет конечное значение переменной f, если переменны^
f, g, h, 1 и j имеют соответственно значения 1, 2 ,3 ,4 и 5?
2.19. Упражнения 209
2.3.4 [5| <2.2> Какой будет соответствующая инструкция на языке С для по
данных выше М IPS-инструкций?
2.3.5 J5) <2.2> Каким будет конечное значение переменной f, если переменные
\ :. h и i имеют соответственно значения 1,2,3 и 4?
Упражнение 2.4
Следующие задачи связаны с трансляцией с С на MIPS. Предположим, что значе-
...ч переменных f. g, h, i и j присвоены соответственно регистрам SsO, $sl, $s2, $s3
i 154. Предположим, что базовый адрес массивов Аи В находится соответственно
? регистрах $s6 и $s7.
t f - g ♦ h ♦ B[4]:
6 f - g - АГВГ4Ц:
2.4.1 [10| <2.2, 2.3> Каким будет ассемблерный код MIPS для каждой из по
казанных выше инструкций на языке С?
2.4.2 [51<2.2,2.3> Сколько потребуется инструкций на языке ассемблера MIPS,
•тобы выполнить каждую из показанных выше инструкций на языке С?
2.4.3 [5J <2.2, 2.3> Сколько разных регистров необходимо для выполнения
•;аждой из показанных выше инструкций на языке С?
2.4.4 [10] <2.2, 2.3> Какой будет соответствующая инструкция на языке С для
показанных выше M IPS-инструкций?
2.4.5 [5] <2.2, 2.3> Перепишите код показанных выше ассемблерных M IPS-
инструкций с целью минимизации их количества, необходимого для выполнения
той же самой функции (если это возможно).
210 Глава 2. Инструкции: язык компьютера
Упражнение 2.5
В следующих задачах будут исследоваться операции с памятью в контексте MIPS-
процессора. Показанная ниже таблица содержит значения массива, сохраненного
в памяти.
а Адрес Данные
12 1
8 б
4 4
0 2
о Адрес Данные
16 1
12 2
8 3
4 4
0 5
2.5.1 [10] < 2.2,2.3> Используя показанные выше состояния памяти, напишите
код на языке С, сортирующий данные по возрастающей и помещающий самое ма
ленькое значение в самый младший из показанных адресов памяти. Предположим
что показанные данные представляют собой переменную С по имени Array, которая
является целочисленным массивом (со значениями типа int). Предположим, что
данная конкретная машина использует байтовую адресацию и ее слово состоит из
4 байт.
2.5.2 {10] < 2.2,2.3> Используя показанные выше состояния памяти, напишите
код на языке ассемблера MIPS, сортирующий данные по возрастающей и помеща
ющий самое маленькое значение в самый младший из показанных адресов памяти
Используйте для этого минимально возможное количество M IPS-инструкций
Предположим, что базовый адрес массива Array хранится в регистре Ss6.
2.5.3 [5] <2.2,2.3> Сколько инструкций ассемблерного кода MIPS потребуется
для сортировки показанного выше массива? Сколько инструкций понадобится .тля
этого, если запретить использование в инструкциях lw и sw поля непосредственного
значения?
/пражнение 2.6
тедуюшие задачи связаны с трансляцией с С на MIPS. Предположим, что значе-
« я переменных f, д, и, 1 и j присвоены соответственно регистрам $s0, $sl, Ss2, $s3
t > 4. Предположим, что базовый адрес массивов А и 8 находится соответственно
регистрах $s6 и $s7.
J f - -д ♦ h . B [ l] :
5 f * А [В [д М ];
2.6.1 [10) <2.2, 2.3> Каким будет ассемблерный код MIPS для каждой из по
данных выше инструкций на языке С?
2.6.2 [5] <2.2, 2.3> Сколько потребуется инструкций на языке ассемблера
MIPS, чтобы выполнить каждую из показанных выше инструкций на языке С?
2.6.3 [5] <2.2, 2.3> Сколько регистров потребуется для выполнения каждой
«з показанных выше инструкций на языке С, при использовании ассемблерного
года MIPS?
2.6.4 [5) <2.2, 2.3> Какой будет соответствующая инструкция на языке С для
доказанных выше M IPS-инструкиий?
2.6.5 [5] <2.2, 2.3> Используя показанный выше код на языке ассемблера MIPS,
лредположим, что регистры Is0, $sl, $s2, $s3 содержат соответственно значения 10,
.0 , 30 и 40. Также предположим, что регистр $s6 содержит значение 256, а в памяти
□держатся следующие значения:
r----------------------------------------------
Адрес Значение
256 100
260 200
264 300
Упражнение 2.7
В следующих задачах исследуются преобразования двоичных чисел со знаком и без
знака в десятичные числа.
а 1010 1101 0001 0000 0000 0000 0000 00102
с 1111 1111 1111 1111 1011 ООП 0101 00112
Упражнение 2.8
Следующие задачи связаны с расширением и переполнением. В регистрах IsG и Г :
содержатся значения, показанные в таблице. Вам нужно будет выполнить MIPS-
операции над этими регистрами и показать результат.
а $s0 - 7000000016. i s l • 0x0FFFFFFF16
б ISO • 0x4000000016. i s l - 0x4000000016
2.8.3 [5] <2.4> Каким будет значение регистра JtO после выполнения следую
щего ассемблерного кода, если содержимое регистров SsC и Jsl будет таким, как
]казано выше:
JtO. JSO. $Sl
KW JtO. $t0. $s0
Будет ли результат в $t0 приемлемым или возникнет переполнение?
В следующих задачах будут выполняться различные M IPS-операции с парой
«егистрон SsO и *sl. Используя указанные в каждой задаче значения SsO и Jsl, онре-
лите, будет ли возникать переполнение.
•а add JsO. JsO. J s l
б sub JsO. JsO. Js l
sub SsO. JsO, J s l
Упражнение 2.9
В показанной ниже таблице содержатся различные значения для регистра Jsl. В за
дачах спрашивается, будет ли возникать переполнение при вычислении указанных
операций.
a ?ы;48364/13
б 0x0000000016
2.9.1 [5] <2.4> Предположим, что регистр SsO - 0x70000000, а регистр Ssl имеет
значение, указанное в таблице. Возникнет ли переполнение при выполнении ин
струкции add SsO. SsO. Jsl?
2.9.2 [5] <2.4> Предположим, что регистр JsO - 0x80000000, а регистр Jsl имеет
значение, указанное в таблице. Возникнет ли переполнение при выполнении ин
струкции sub JsO, JsO. Jsl?
2.9.3 [5] <2.4> Предположим, что регистр JsO - 0x7FFFFFFF, а регистр Jsl
имеет значение, указанное в таблице. Возникнет ли переполнение при выполнении
инструкции sub JsO. JsO. Jsl?
2.9.4 |5) <2.4> Предположим, что регистр SsO - 0x70000000, а регистр $sl имеет
значение, указанное в таблице. Возникнет ли переполнение при выполнении нн
струкции add SsO. SsO. Ssl?
2.9.5 |5] <2.4> Предположим, что регистр SsO = 0x70000000, a регистр Ssl имеет
значение, указанное в таблице. Каким будет результат в шестнадцатеричном <|юр
мате при выполнении инструкции add SsO. $s0, $sl?
2.9.6 [5] <2.4> Предположим, что регистр $s0 - 0x70000000, а регистр Ssl имеет
значение, указанное в таблице. Каким будет результат в десятичном формате при
выполнении инструкции add SsO. SsO. Ssl?
Упражнение 2.10
В следующих задачах таблица данных содержит биты, представляющие собой зна
чение opctxje инструкции. Вам нужно будет перевести записи в ассемблерный код
и определить, какой формат M IPS-инструкции представляют эти биты.
а 1010 1110 0000 1011 0000 0000 0000 01002
б 1000 1101 0000 1000 0000 0000 0100 00002
/пражнение 2.11
3 следующих задачах таблица данных содержит биты, представляющие собой зна
ние opcode инструкции. Вам нужно будет перевести записи в ассемблерный код и
пределить. какой формат MIPS-инструкции представляют эти биты.
1 OxAEOBFFFC
4 0*8O08FFC0
2.11.1 [5) <2.4. 2.5> Какие двоичные числа являются представлением покаэан-
ш х выше шестнадцатеричных чисел?
2.11.2 (5) <2.4, 2.5> Какие десятичные числа являются представлением пока-
1нных выше шестнадцатеричных чисел?
2.11.3 [5] <2.5> Какие инструкции представляют показанные выше шестнад
цатеричные числа?
2.11.4 [5] <2.5> К какому типу инструкций (1-тип, R-тип) относятся показанные
выше инструкции?
2.11.5 [5| <2.5> Какие ассемблерные инструкции описаны выше?
2.11.6 [5] <2.4, 2.5> Как выглядит двоичное представление показанных выше
инструкций?
Упражнение 2.12
В следующих задачах таблица данных содержит различные модификации, которым
может подвергнуться архитектура набора команд MIPS. Вам нужно исследовать
влияние этих изменений на формат инструкций M IPS-архитектуры.
a 8 регистров
c 1 0 -разрядные непосредственно указанные константы
2.12.4 [5] <2.5> Каким будет десятичное значение показанных выше записей?
2.12.5 [5] <2.5> Какую инструкцию представляют показанные выше шестнад
цатеричные записи?
2.12.6 [5| <2.4, 2.5> К какому типу инструкций (1-типа, R -типа) относится
двоичное представление показанных выше записей? Каким будут значения поле*
ор и rt?
Упражнение 2.13
Таблица данных для следующих задач содержит значения регистров StO и $tl. Ва>
нужно будет провести над этими регистрами ряд логических операций MIPS.
2.13.1 (5) <2.6> Какое значение получит регистр St2 после выполнения еле
дующей последовательности инструкций при использовании показанных выше
значений?
si 1 Jt2. StO. 4
or St2. $t2. Stl
2.13.2 [5] <2.6> Какое значение получит регистр St2 после выполнения слс
дующей последовательности инструкций при использовании показанных вы г
значений?
sll St2. StO. 4
andi St2. St2. -I
2.13.3 [5] <2.6> Какое значение получит регистр St2 после выполнения еле
дующей последовательности инструкций при использовании показанных выи,-
эначений?
sr! $t2. StO. Э
andi St2. St2. OxFFEF
2.19. Упражнения 217
2.13.4 [5] <2.6> Предположим, что StO - ОхООООА5А5. a stl - 00005А5Л. Каким
дет значение St2 после ныполнения двух инструкций, показанных в таблице?
2.13.5 [5] <2.6> Предположим, что $t0 - OxA5A50000, a Stl - А5А50000. Каким
> дет значение St2 после выполнения двух инструкций, показанных в таблице?
2.13.6 (5} <2.6> Предположим, что StO - 0xA5A5FFFF, a Stl - A5A5FFFF. Каким
дет значение St2 после выполнения двух инструкций, показанных в таблице?
Упражнение 2.14
Та рисунке показано размещение в регистре StO поля, состоящего из нескольких
за з рядов.
31 J 0
Поле
31 -i- разряды i - j - разряды j - разряды
a 31 i- I
000...00 0 Поле
e 31 14 + 1- J - разряды 14 0
Упражнение 2.15
Для следующих задач в таблице содержатся логические операции, не включенные
в набор инструкций MIPS. Как могут быть реализованы эти инструкции?
а andn stl. U2. St3 // поразрядное И$t2. !St3
б xnor $tl. St2. St3 // поразрядное искгиочаЕщее HIMHE
Упражнение 2.16
1 ля следующих задач в таблице содержатся различные двоичные значения для
егистра $t0. Используя значения НО, нужно будет вычислить итог различных
переходов.
Ж 1010 1101 0001 0000 0000 0000 0000 0010,
б 1111 1111 1111 1111 1111 1111 1111 1111.
2.16.4 (5) <2.7> Предположим, что в регистре StO содержится значение из табли
цы. Каким будет значение регистра St2 после выполнения следующих инструкций?
s it St2, « 0 . StO
bre $t2. Szero. ELSE
j GONE
ELSE: a(Mi St?. St2. 2
DONE:
2.16.5 [5J <2.6, 2.7> Предположим, что в регистре StO содержится значение и
таблицы. Каким будет значение регистра U2 после выполнения следующих ин
струкций?
s)! StO. StO. 2
s it St2, StO. Szero
2.16.6 [5] <2.7> Предположим, что счетчик команд (PC) имеет значение 0x2000
0000. Можно ли воспользоваться инструкцией перехода на языке ассемблере
M IPS ( j) для установки PC на адрес, показанный в таблице? Можно ли воспольао
ваться инструкцией перехода при равенстве на языке ассемблера MIPS (bee) для
установки PC на адрес, показанный в таблице?
Упражнение 2.17
В следующих задачах будут использованы несколько инструкций, не в х о д я щ т
в набор инструкций MIPS.
а abs К2. St3 # R[rd] - |R[rt]|
б sgt HI. И2. ИЗ # R[rd] - (R[rs] > R[rt]> 7 1:0
2.17.4 [5] <2.7> Предположим, что для циклов, написанных на языке ассемблера
{IPS, регистр $tl имеет начальное значение 10. Каким будет значение регистра $s2,
ли предположить, что начальное значение регистра $s2 равно нулю?
2.17.5 (5] <2.7> Напишите для каждого из циклов эквивалентную подиро-
-рамму на языке С, исходя из того, что регистрам $sl, Ss2, Ш и Н2 соответствуют
елочисленные переменные А, В, 1 и temp.
2.17.6 [5] <2.7> Предположим, что для показанных выше циклов, написанных
■а языке ассемблера MIPS, решетр Ш имеет начальное значение N. Сколько MIPS-
•аструкций будет выполнено?
Упражнение 2.18
ля следующих задач в таблице содержится код на языке С. Вам нужно будет нере-
-ести инструкции на языке С в инструкции на языке ассемблера MIPS.
a fo r( 1 - 0 : 1 <1 0 : 1 ++)
a +■ b:
б while (a < 1 0 )(
0 [a] « b + a:
a 1:
)
2.18.1 [5] <2.7> Нарисуйте для показанного кода на языке С блок-схему управ-
ения последовательностью выполнения программы.
2.18.2 [5] <2.7> Переведите показанный код на языке С в код на языке ассем-
лера MIPS. Используйте минимально возможное количество инструкций, при
слонин что переменные а, b, i, j представлены соответственно регистрами SsO,
sз 1, JtO, $tl. Кроме этого, для хранения базового адреса массива D используйте
регистр $s2.
2.18.3 [5] <2.7> Сколько M IPS-инструкций понадобится для реализации кода
ia языке С? Каким будет общее количество M IPS-инструкций, выполненных для
222 Глава 2. Инструкции: язык компьютера
Упражнение 2.19
Для следующих задач в таблице содержится код функций на языке С. Предполо
жим, что первая функция, представленная в таблице, вызывается первой. Вам ну*
но будет перевести код этих процедур на языке С в код на языке ассемблера MIPS.
а Int compareimt a. int b) {
if (subta. b) p- 0)
return 1:
else
return 0;
}
1nt sub (lot a. 1nt b) {
return a-b;
J_________________________
6 int flb_iter(int a. int b. int n){
1f(n — 0)
return b.
else
return fib_iter{a+b. a. n-1);
Упражнение 2.20
В этом упражнении используются рекурсивные вызовы процедуры. Для следую
щих задач в таблице содержится фрагмент кода на языке ассемблера, вычисляющий
факториал числа. Но в записях таблицы имеются ошибки, которые вам придется
исправить
224 Глава 2. Инструкции: язык компьютера
Упражнение 2.21
Предположим, что стек и сегменты статических данных пусты, а указатель стека
и глобальный указатель имеют начальные значения, содержащие соответственнс
адреса OxVfff fffc и 0x1000 8000. Предположим, что используется соглашение по
вызовам, показанное в табл. 2.5, и что входной параметр передается функция
в регистре $а0, а ее результат возвращается в регистре IvO. Также предположим,
что конечные (leaf) функции могут использовать только сохраняемые регистры
а mam()
I
leaMunctiond):
I
tnt leaf_function dnt f)
{
1nt result;
result “ f ♦ 1:
if (f > 5)
return result:
1e a f _ f u n c t lo n ( r e s u l t );
addi Ssp.Isp.8
SW $ra.4(Ssp)
sw IsO.O(lsp)
move Ss0.$a2
ja l 9
add 1vC.SvO.1sO
lw 1ra.4(lsp)
1w tsC.O(lsp)
addi ssp.*sp.-8
jr Sra
2.21.4 [10] <2.8> В этом коде имеется ошибка, нарушающая имеющееся в MIPS
д глашение по вызовам. Что это за ошибка и как се можно исправить?
2.21.5110) <2.8> Каким будет эквивалент этого кода на языке С? Предположим,
--о в С-всрсии этой функции используются аргументы по имени а, Ь, с и т. д.
2.21.6 [ 10] <2.8> В месте вызова этой функции регистры 1а0, Sal, 1а2 и $аЗ имеют
■ютветствснно значения 1, 100, 1000 и 30. Каким будет значение, возвращенное
:> нкцией? Предположим, что функция д, вызываемая из функции f, всегда воз-
г.нцает значение 500.
У п р аж н ен и е 2 .2 2
3 этом упражнении исследуется соглашение по ASCII и Unicode. В таблице по
сланы строки символов.
_а____ A byte________________________________________________________________________
б____ computer
У п р а ж н е н и е 2 .2 3
В этом упражнении вам нужно будет написать программу на языке ассемблера
MIPS, преобразующую строки в числовой формат, указанный в таблице.
a строки из положительных целых десятичных чисел
б шестнадцатеричные целые числа с дополнением до двух
У п р а ж н е н и е 2 .2 4
Предположим, что регистр Stl содержит адрес 0x1000 0000, а регистр $t2 содержи
адрес 0x1000 0010.
а lb JtO. 0 ( J tl)
_____sw StO. 0(St2)
6 1b JtO. 0($tl>
sb JtO. 0(Jt2)
2,24.! (5| <2.9> Предположим, что по адресу 0x1000 0000 содержатся следую
щие данные (в шестнадцатеричном виде):
1000 0000 12 J_34_ [56 78
У п р а ж н е н и е 2 .2 5
В этом упражнении будут исследованы используемые в MIPS 32-разрядные ко
станты. Для следующих задач будут использованы двоичные данные, показаннь
в таблице.
2.19. Упражнения 229
2.25.615] <2.6. 2.10> Каким будет значение регистра $t0 после выполнения по
казанной выше кодовой последовательности?
2.25.7 [5] <2.6, 2.10> Напишите код на языке С, являющийся эквивалентом
доказанного в таблице кода на языке ассемблера, при условии, что наибольшая
• онстанта, которую можно загрузить в 32-разрядный регистр, должна быть не
шире 16 разрядов.
Упражнение 2.26
В этом упражнении будут исследованы диапазоны действия М IPS-инструкций
условных и безусловных переходов. В следующих задачах используются шестнад
цатеричные данные из таблицы.
a 0x00001000
о OxFFFCDOOQ
2.26.1 [ 10] <2.6, 2.10> Сколько инструкций условных переходов (без исполь
зования инструкций безусловных переходов) понадобится для получения адреса,
показанного в расположенной выше таблице, если счетчик команд (PC) содержит
адрес 0x00000000?
230 Глава 2. Инструкции: язык компьютера
Упражнение 2.27
При решении следующих задач будет использоваться исследование различных
режимов адресации в архитектуре набора инструкций MIPS. Эти разные режимь
адресации перечислены в таблице.
а Р е ги стр о в а я а д р е с а ц и я
\б О тн о си тел ь ная а д р е с а ц и я по счетчи ку ко м ан д
2.27.2 [5| <2.10> Формат какого типа используется для инструкций, названных
ри выполнении задания 2.27.1?
2.27.3 [5] <2.10> Перечислите все сильные и слабые стороны конкретного
ежима адресации MIPS. Напишите M IPS-код. показывающий эти плюсы и ми
нусы.
Упражнение 2.28
Следующий ассемблерный код M IPS предназначен для блокировки.
MOV R3.R4
MOV R6.R7
LL R2.0CR2)
LL R5.0(R1)
SC R3.0(R1)
SC R6.0(R1)
BEQZ R3.try
mov R4.R2
MOV R7.R5
2.28.1 [5] <2.11> Сколько инструкций должно быть выполнено для каждой
проверки и отказа в условном сохранении?
2.28.2 [5] <2.11 > Объясните, почему выполнение показанного выше кода свя
занной загрузки —условного сохранения может закончиться неудачей.
2.28.3 [15] <2.11 > Перепишите показанный выше код, чтобы он мог рабо
тать правильно. Убедитесь в отсутствии соревновательных условий за доступ к
данным.
232 Глава 2. Инструкции: язык компьютера
б
Процессор 1 Память Процессор 2
Процессор 1 Процессор 2 Цикл
$s4 St1 StO (S sl) Ss4 St1 StO
0 2 3 4 99 10 20 30
try: add StO. SO. 1
Ss4
try: add UO. SO. 11 Stl. 2
Js4 0<ssl)
11 Stl. O(Ssl) 3
sc StO. O(Ssl) 4
beqz StO. try sc StO. O(Ssl) 5
add Ss4, SO. Stl beqz StO. 6
try
У п р а ж н е н и е 2 .2 9
Три первые задачи этого упражнения ссылаются на критический участок кода
имеющий следующую форму:
lock(lk):
операция
unlock(lk);
где «операция» обновляет общую переменную shvar, используя локальную (г
общую) переменную к, как показано ниже:
a sbvar-shvar-x:
б shvar-min(shvar.x):
2.29.1 [10J <2.11> Напишите для этого критического участка код на язы-
ассемблера MIPS, при условии, что адрес переменной Ik находится в регистр-
2.19. Упражнения 233
У п р аж н ен и е 2 .3 0
Ассемблерные псевдоинструкции не являются частью набора инструкций MIPS,
но довольно часто попадаются в M IPS-программах. Таблица содержит некоторые
псевдоннструкнни MIPS, которые при работе программы ассемблера транслиру
ются в другие инструкции ассемблера MIPS:
а move $tl. St2
в beq HI. S M l l . LOOP
Упражнение 2.31
В таблице содержатся подробности, касающиеся компоновки двух разных про
цедур. В данном упражнении нужно будет выступить в роли программы, занима
ющейся компоновкой.
а
Процедура А Процедура Б
Текстовый Адрес Инструкция Текстовый Адрес Инструкция
сегмент сегмент
0 1w $а0, O(Sgp) 0 sw $al. 0 <$др)
4 Jal 0 4 ja l 0
... ...
Сегмент 0 (X) Сегмент 0 (У)
данных данных
...
Настр. ин Адрес Тип инструк Зави Настр. ин Адрес Тип инструк Зави
формация ции сим. формация ции сим.
0 1* X 0
Y
4 J«1 в 4 А
Таблица Адрес Метка Таблица Адрес Метка
имен имен
—
- X Г
- в - А
____
б
Процедура А Процедура Б
Текстовый Адрес Инструкция Текстовый Адрес Инструкция
сегмент
—
0 lu i $at. 0 сегмент
0 sw $а0 . 0 ($др) ------ j
4 o ri $а0 . $at. 0 4 J"P о
8 ja l 0
... 0x180 Jr $ra
1
___ 1
2.19. Упражнения 235
Процедура А Процедура Б
^вгмеит 0 (X) Сегмент 0 (Y)
данных
... ...
ин- Адрес Тип инструк Зави Настр. ин Адрес Тип инструк Зави
ции сим. формация ции сим.
0 1 и1 X 0 sw Y
4 ori X 4 Jinp F0O
8 ja l в
Чблица Адрес Метка Таблица Адрес Метка
имен
- X - Y
- В 0x180 F0O
Упражнение 2.32
При решении первых трех задач этого упражнения предполагается, что функция swap,
вместо кода, показанного в листинге 2.1, определена на языке С в следующем виде:
а void swapfint v[]. 1nt к. int J){
int temp:
temp-vOG:
v[k]-v[j]:
v[J]-te*p:
}
б void swaptmt *p){
Int temp:
temp-*p;
*(p+l)-*p;
Для остальных трех задач этого упражнения предположим, что функция sort из
листинга 2.5 изменена следующим образом:
а Вместо t-регистров используются s-регистры.
б В коде с меткой '*or2tst вместо sit и Ьпе используется инструкция bltz (branch on less
than zero — переход, если меньше нуля).
2.32.4 [5] <2.13> Повлияет ли это изменение на код в листинге 2.5, предназна
ченный для сохранения и восстановления регистров?
2.32.5 (10) <2.13> Насколько больше (или меньше) инструкций будет выпол
нено в результате этого изменения при сортировке 10-элементного, уже отсорти
рованного массива?
2.32.6 (10) < 2.13> Насколько больше (или меньше) инструкций будет выпол
нено в результате этого изменения при сортировке 10-элементного, уже отсорти
рованного в убывающем порядке (противоположном по сравнению с гем, который
создается процедурой sortO ) массива?
Упражнение 2.33
Задачи в этом упражнении ссылаются на следующую функцию, заданную в виде
кода по обработке массива:
а in t fin d (in t a t], in t n. tn t x){
mt 1 ;
fo r ( i- 0 ; i! - n : 1 ++)
t f ( a [ i] “ x)
return 1 ;
return - 1 :
}
б in t counttint a [], in t n. int. x){
m t res-0 .
in t i :
fo r( 1 - 0 ;i!-n :i+ + )
l f ( a [ i ] “ x)
res-res+1 :
return res:
}
Упражнение 2.34
1 показанной ниже таблице содержится ассемблерный код ARM. В следующих
плачах нужно будет перевести код ARM в ассемблерный код MIPS.
4 H0V гО. #10 присваивание счетчику цикла начального значения 10
LOOP ADO гО. rl добавление значения rl к значение гО
SUBS гО. 1 унеиыенке значения счетчика на единицу
BNE LOOP если Z-0. повторение цикла
б ROR rl. г2. #4 ; rl - г2, объединяется с г2
2.34.3 [5| <2.16> Подберите для содержимого показанной выше таблицы ас
семблерный код ARM, соответствующий последовательности ассемблерного кода
MIPS.
2.34.4 (5] <2.16> Покажите битовые поля, представляющие собой ассемблерный
код ARM.
238 Глава 2. Инструкции: язык компьютера
Упражнение 2.35
У процессора ARM имеется несколько разных режимов адресации, не поддержи
ваемых в MIPS. В следующих задачах исследуются эти новые режимы адресации.
а L0R гО. [ П ] : гО - па*ять[г1]
в LDMIA гО. {г1. г2. г4} ; г1 - паиять[г0]. г2 - пакять[г0*4]
; г4 ■ паиять[г0»8]
2.35.3 [ 10J <2.16> Напишите для показанного выше ассемблерного кода AR.V
эквивалентную ему процедуру на ассемблерном коде MIPS.
2.35.4 [5] < 2.16> Каким будет общее количество ассемблерных инструкции
ARM, необходимое для выполнения кода? Каким будет общее количество ассем-
блсрных инструкций MIPS, необходимое для выполнения кода?
2.35.5 (5) <2.16> Предположим, что средний показатель CPI процедуры н
ассемблере M IPS имеет значение, равное среднему показателю CPI ироцедурь
на ассемблере ARM, а процессор MIPS имеет рабочую частоту в 1,5 раза выпи
чем у процессора ARM, насколько быстрее окажется процессор ARM процессор
MIPS?
Упражнение 2.36
У процессора ARM есть интересный способ поддержки непосредственных ксь
стант. В этом упражнении исследуются имеющиеся в нем особенности. В табл и и
содержатся инструкции ARM.
а ADD. гЗ. r2. r l . LSI #3 :гЗ-г2+(П « 3!
б ADD. гЗ. r2. r l . RDR #3 ;гЭ- г2*(г1. прокрученный вправе на 3 разряда)
2.19. Упражнения 239
1.36.1 [5] <2.16> Напишите эквивалентный код M IPS для показанного выше
■ гмблерного кода ARM.
- 36.2 [5] <2.16> Перепишите ваш код на ассемблере MIPS, сведя к минимуму
«г ячество инструкций, с учетом того условия, что в регистре R1 содержится кон-
~ 1.-: та со значением 8.
2.36.3 [5] < 2.16> Перепишите ваш код на ассемблере MIPS, сведя к минимуму
с -.ячество инструкций, с учетом того условия, что в регистре R1 содержится кон-
- та со значением 0x06000000.
2.36.4 |5] <2.16> Напишите для показанного выше ассемблерного кода MIPS
эквивалент на ассемблере ARM.
Упражнение 2.37
- этом упражнении исследуются различия в наборах инструкций M IPS и х86.
- таблице содержится ассемблерный код х86.
J mov edx, tes’*d*ebx]
3 START: mov ax. OOlOUOOb
mov cx. 00000011b
mov bx. 11110000b
and ax, bx
or ax. cx
2.37.3 [5] <2.17> Покажите для каждой ассемблерной инструкции размер каж
дого из битовых полей, представляющих инструкцию.
2.37.4 [10] <2.17> Напишите эквивалентный этим инструкциям код на языке
ассемблера MIPS.
Упражнение 2.38
В наборе инструкций х86 имеется префикс REP, вызывающий повторение ин
струкции заданное количество раз или до тех пор, пока не будет удовлетворено
240 Глава 2. Инструкции: язык компьютера
2.38.1 (5) <2.17> Для чего будет обычно применяться эта инструкция?
2.38.2 [5J <2.17> Напишите M IPS-код, выполняющий такую же операцию,
при условии, что $ а 0 соответствует ЕС Х , Sal соответствует Е 0 1 , Sa2 соответствует i S I ,
а $ а З соответствует ЕАХ.
2.38.3 (5] <2.17> Если инструкция х86 требует один цикл для чтения из памя
ти, один цикл для записи в память и один цикл для обновления каждого регистра
и если MIPS использует один цикл на инструкцию, каким будет выигрыш в скоро
сти от использования этой инструкции х86 вместо эквивалентного ей M IPS-кода,
когда ЕСХ имеет очень большое значение? Предположим, что время тактового цикла
для х86 и MIPS имеет одинаковое значение.
2.38.4 [5] <2.17> Преобразуйте эту функцию в код на языке ассемблера MIPS.
Сравните размер (сколько байтов памяти займут инструкции) для этого кода \86
и вашего M IPS-кода.
2.19. Упражнения 241
1.38.5 (5) <2.17> Если за одни цикл процессор может выполнить две инструк-
я н .т о он способен по крайней мере прочитать за один цикл две последовательные
шетрукции. Объясните, как это было бы сделано в MIPS и в х86.
2.38.6 [5] < 2 .17> Если каждая М IPS-инструкция занимает один цикл, и если
_клая инструкция х86 занимает один цикл плюс цикл для каждого необходимого
.ш из памяти или записи в нее, то каким будет выигрыш во времени от исполь-
гтлиня х86 вместо MIPS? Предположим, что время тактового цикла одинаковое
- для х86, так и для MIPS и выполнение функции занимает наикратчайший путь
1 есть выход из каждого цикла происходит немедленно и каждая инструкция if
- ирае г направление, приводящее к выходу из функции). Следует заметить, что
■струкция ret в х86 читает адрес возврата из стека.
Упражнение 2.39
1 таблице приведены показатели CPI для инструкций разных типов.
2.39.1 |5) <2.18> Предположим, что для выполнения заданных программ дано
■азбиение по инструкциям:
Инструкций (в миллионах)
Арифметические 500
Загрузки-сохранения 300
Перехода 100
Каким будет время выполнения для процессора, если рабочая частота равна
: ГГц?
2.39.2 [5] <2.18> Предположим, что набор инструкций был пополнен новыми,
fa. iee мощными арифметическими инструкциями. В среднем за счет использования
лих более мощных арифметических инструкций появилась возможность сократить
в 25% количество арифметических инструкций, необходимых для выполнения
триграмм, но при этом пришлось поплатиться всего лишь 10% увеличением вре
мени тактового цикла. Можно ли считать удачным такой конструкторский выбор?
Почему?
2.39.3 [5] <2.18> Предположим, что был майлен способ удвоения проиэводи-
ельноети арифметических инструкций. Каков общий выигрыш в скорости для
•шей машины? А что будет, если найдется способ увеличить производительность
арифметических инструкций в 10 раз?
В таблице показаны пропорции выполнения инструкций разного типа.
2.39.4 (5) <2.18> Найдите для показанного выше сочетания разных типов ин
струкций средний показатель CPI, если .тля арифметической инструкции требу
ется два цикла, для инструкции загрузки-сохранения 6 циклов, а для инструкции
условного перехода 3 цикла.
2.39.5 [5) <2.18> Сколько в среднем может прийтись циклов на арифметические
инструкции при 25% увеличении производительности, при условии, что произ
водительность инструкций загрузки-сохранения и перехода увеличена не будет?
2.39.6 [5] <2.18> Сколько в среднем может прийтись циклон на арифметические
инструкции при 50% увеличении производительности, при условии, что произ
водительность инструкций загрузки-сохранения и перехода увеличена не будет?
Упражнение 2.40
Первые три задачи этого упражнения ссылаются на функцию, показанную на
языке ассемблера MIPS. К сожалению, программист, создававший эту функцию,
пребывал в заблуждении, полагая, что MIPS относится к машинам с пословной
а не с побайтовой адресацией.
а : m t fo n t а []. mt n. fnt x):
f : move SvO.Szero re t - 0
move StO.Szero 1-0
L add Stl.StO.SaO &<a[i]>
lw Stl.O(Stl) чтение a [i]
bne Stl.Sa2.S если (а [ 1 ] —x)
addi SvO.SvO.l ret*+;
S; addi StO.StO.l i*«
bne StO.Sal.L повторение, если i •—
n
Jr Sra возвращение ret
в : void f o n t *a. m t *b. 1 nt n):
f move StO.SaO p-a
move Stl.Sal q-b
add St2 .Sa2 .SaO &(a[nl)
L: lw St3.0($t0) чтение *p
lw St4.0(Stl) чтение *q
add St3.St3.St4 *P’ *q
sw St3.0(St0) *p-*p**q
addi StO.StO.l D-p*l
addi S tl.S tl.l q-q+1
bne StO.St2.l повторение, если p!*4(a[n])
jr Sra возвращение
Учтите, что в ассемблере M IPS символ «;» показывает, что остальная часл
строки является комментарием.
2.40.1 [5) <2.18> Архитектура MIPS требует, чтобы обращения, имеющие ра_>
мер слова (lw и sw), были выровнены по границам слов, то есть два самых нижни■
разряда адреса должны иметь нулевые значения. Если адрес не выровнен по грани
це слова, процессор выдает исключение •«ошибка шины» («bus error»). Объясните
как эти требования по выравниванию влияют на выполнение данной функции.
2.10.2 [5] <2.18> Будет ли эта функция работать, если «а* будет указателем -
начало массива, состоящего из однобайтовых элементов, а инструкции lw и swбудут
соответственно заменены инструкциями 1b (загрузить байт) и sb (сохранить байт
2.19. Упражнения 243
Функция my_a 11ос имеет следующее определение (на языке С и на языке ассем
блера MIPS). Учтите, что программист, создававший эту функцию, пребывал в за
блуждении относительно использования указателя на автоматическую переменную
■т за пределами функции, в которой она была определена.
б myjnit:
move HO. Srero : 1-0
move Stl.SaO
L: sub $t2.Hl.$tO
sw $t2,0($tl) : a[i]*n-1
addiu HI. HI.4
addu И0.И0.1 : i-i*l:
Cne StO.ial.L : пока не будет 1==n
jr Sra
2.40.4 [5] <2.18> Каково содержимое (значения всех пяти элементов) массива v
непосредственно перед инструкцией «jal sort* при выполнении кода функции main?
2.40.5 [15] <2.18, 2.13> Каково содержимое массива v непосредственно перед
тем, как функция sort в первый раз войдет в свой внешний цикл? Предположим,
что в начале кода функции irair (непосредственно перед выполнением инструкции
« 1 1 $s0. 5 » , регистры S s p , S sO , i s 1, $s2 и S s 3 имеют соответственно значения 0x1000.
20. 40, 7 и 1.
2.40.6 [ 10[ <2.18, 2.13> Каково содержимое пятиэлементного массива, на кото
рый указывает v, сразу же после возвращения управления функции main, следую
щего за выполнением инструкции «jal sort*?
3.1. Введение
Компьютерный мир состоит из битов, следовательно, слова могут быть представ
лены в виде двоичных чисел. В главе 2 показывается, что целые числа могут быть
246 Глава 3. Арифметика для компьютеров
представлены как в десятичной, так и в двоичной форме, а как насчет других часто
встречающихся чисел? Например:
♦ Как работать с дробями и другими вещественными числами?
♦ Что происходит, когда в результате операции создается число больше того,
которое может быть представлено?
♦ А в основе этих вопросов лежит еще одна тайна: как оборудование в действи
тельности умножает и делит числа?
Целью этой главы является раскрытие всех этих тайн, включая представление
вещественных чисел, арифметические алгоритмы, оборудование, следующее этим
алгоритмам, и вовлечение во все это набора инструкций. Проникновение в суть
этих вопросов может объяснить те странности, с которыми вы уже столкнулись
при работе с компьютерами.
Упражнение
Двоичное сложение и вычитание
Попробуйте сложить 6|0 и 7,0 в двоичном виде, а затем в том же виде вычесть 610из 710.
'Переносы!
о 0 0 1 1 1
0 0 . 0 1 1 0
... (0 ) 0 (0) 0 (0 ) 1 (1) 1 (1 ) 0 (0) 1
***с- 3 . 1 . Д в о и ч н о е сл о ж е н и е , п о ка зы в а ю щ е е пе р е н о сы сп р а в а н ал е в о . В с а м о м правом
^ р ч д е склады ваю тся 1 и 0 . в р езул ь тате ч его п ол учается с у м м а 1, и п е р е н о с из э то го р аз р я д а
ScseT 0. С л ед ов ател ь но , о п е р а ц и я д л я в то р о го р аз р я д а с п р а в а б уд ет 0+ 1 + 1. В р езул ьтате для
-о-юяда суммы получится 0 с п е р е н о с о м 1. Т реть ей циф ро й с та н е т с у м м а 1 + 1 + 1 , д аю щ а я п е р е -
•сс 1 и значен и е р азр я д а суммы 1. Четверты й разря д буд ет получен в результате о перации 1+ 0 + 0 ,
что д а с т в с у м м е 1 б е з п е р е н о с а
Результат, свидетельствую щ ий
Операция Операнд А Операнд В
о переполнении
А» В >0 >0 <0
Краткие выводы
Основное внимание в этом разделе уделялось вопросу о том, что, независимо
представления, небесконечный размер компьютерного слова означает, что резул.
таты арифметических операций могут быть слишком большими для этого фикс,
рованного размера. Обнаружить переполнение для беззнаковых чисел нетрудн
хотя оно практически всегда игнорируется, потому что программы не требуют с
обнаружения для адресной арифметики, где чаще всего используются натуральны
числа. Сложнее обстоят дела с числами с дополнением до двух, к тому же некот
рые программные системы требуют обнаружения переполнения, поэтому сегодь
все компьютеры имеют способы его обнаружения.
3.2. Сложение и вычитание 251
Самопроверка
“ - которые языки программирования допускают арифметические действия с дво-
f - шм дополнением над переменными, объявленными в виде байта или полуслова.
5-Mte МIPS-инструкции можно было бы для этого использовать?
_ Загрузку с помощью lbu, 1hu; арифметику с помощью add, sub, mult, dtv; а затем
сохранение с помощью sb, sh.
- Загрузку с помощью 1b, lb; арифметику с помощью add, sub, mu4, div; а затем со
хранение с помощью sb, sb.
I Загрузку с помощью lb, lh; арифметику с помощью add, sub, mult, div, использо
вание И (AND) для наложения маски на результат на 8 или 16 разрядов после
каждой операции; затем сохранение с помощью sb, sh.
“гочмение. Ранее уже сообщалось, что [ К копируется в регистр с помощью инструк
ции mfcO, а затем управление возвращается прерванному коду с помощью перехода по
регистру. В связи с этим возникает интересный вопрос; поскольку сначала нужно пере-
-гсти ЕРСв регистр, используемый в переходе по регистру, как может этот переход по
ге'истру вернуть управление прерванному коду и восстановить исходные значения
зеех регистров? Либо сначала нужно восстановить все старые значения регистров
* таким образом, уничтожить адрес возврата в [PC, который был помещен в регистр
_->я использования при переходе по регистру, либо восстановить значения всех реги-
ггров, кроме одного, содержащего адрес возврата, чтобы можно было осуществить
реход, а это значит, что исключение приведет к изменению этого одного регистра
• любой момент выполнения программы! Ни один из этих вариантов нельзя признать
довлетворительным.
3.3. Умножение
Умножение меня раздражает, деление вообще ш
нранится, правило трех действий ставит в тупик
а практика просто сводит с ума
Неизвестный авто?
1000
0000
0000
1000
Проиэвеоеиие 1 0 0 1 0 0 0 ,,
На рис. 3.3 показаны три основных шага, необходимых для каждого разряда
Наименьший значащий разряд множителя (МножительО) определяет, добавлено
ли множимое к регистру Произведения. Сдвиг влево во втором шаге вызывает
перемещение промежуточных операндов влево, точно так же как при умножении
с помощью карандаша и бумаги. Сдвиг вправо в третьем шаге дает нам следующий
бит множителя для тестирования следующей итерации. Эти три шага повторяются
32 раза для получения произведения. Если для каждого шага требуется тактовый
цикл, этот алгоритм для умножения двух 32-разрядных чисел потребует почти
100 тактовых циклов. Относительная важность таких арифметических операций
как умножение, варьируется от программы к программе, но сложение и вычитание
могут быть в разных случаях от пяти до ста раз более востребованными, чем ум
ножение. Соответственно во многих приложениях умножение может потребовать
большого количества тактовых циклов без существенного влияния на производи
тельноегь. Тем не менее закон Амдача (см. раздел 1.8) напоминает нам, что даже
весьма умеренная частота использования медленных операций может ограничить
производительность.
Этот алгоритм и оборудование довольно просто усовершенствовать, добившись
одного тактового цикла на один шаг. Ускорение возникает за счет параллельного
выполнения операций: Множитель и Множимое сдвигаются в тот самый момент,
когда Множимое добавляется к Произведению, если разряд Множимого равен 1.
Остается только убедиться в том, что отслежен сдвиг вправо Множителя, и полу
чить предварительно прошедшую сдвиг версию Множимого. Обычно оборудование
проходит еще более глубокую оптимизацию, нацеленную на то, чтобы поделить
на два ширину сумматора и регистров, определяя, где находится неиспользуемая
часть регистров и сумматоров. Видоизмененное оборудование показано на рис. 3.4
Упражнение
Алгоритм умножения
Используя для экономии пространства 4-ра.эрядные числа, умножьте 2ltt* 3|(|, и
0010,х(Ю11г
3.3. Умножение 255
>гвет
3 рис. 3.5 показано значение каждого регистра для каждого шага, обозначенного в соответ-
.-твии с рис. 3.3, с конечным значением 0000 0110, или 6(0. Чтобы показать значения регистра,
вменившиеся при выполнении конкретного шага, используется жирный шрифт.
! Множимое
Ускоренное умножение
закон Мура предопределил настолько высокий рост ресурсов, что разработчики
борудования теперь могут создавать более быстрые аппаратные средства, исполь-
емые для умножения. Будет ли множимое складываться или нег, известно в на
зло умножения за счет изучения каждого из 32 разрядов. Ускоренное умножение
-ыможно путем фактического предоставления одного 32-раэрядного сумматора
п я каждого бита Множителя: одним входящим значением является Множимое,
бработанное с помощью операции И с битом Множителя, а другим — выходное
значение предыдущего сумматора.
Вполне очевидно, что выходы тех сумматоров, которые находятся справа, долж
ны подключаться ко входам левых сумматоров, создавая последовательность из
,2 сумматоров. Альтернативным способом организации этих 32 сумматоров явля-
•ггся параллельное дерево, похожее на то, что показано на рис. 3.6. Вместо ожидания
у2 сложений приходится ждать только log,(32) или пяти 32-разрядных сложений.
На рис. 3.6 показано, что это наиболее быстрый способ подключения сумматоров.
В действительности умножение может происходить еще быстрее, чем за пять
сложений, за счет использования сумматоров с сохранением переноса и за счет
простоты конвейеризации такой конструкции, способной поддержать множество
одновременно проводимых операций умножения (см. главу 4).
Умножение в MIPS
В MIPS для 64-разрядного произведения предоставляется отдельная пара 32-раз
рядных регистров с именами Hi и 1о. Для получения произведения с нужным знаком
или без знака в MIPS имеются две инструкции: умножения (mult) и беззнакового
множения (multu). Для извлечения целочисленного 32-разрядного произведения
программисты используют инструкцию перемещение из lo — move from lo (mflo).
В ассемблере MIPS для умножения имеется псевдоинструкция, при выполнении
которой определяются три регистра общего назначения и генерируются инструк
ции mflo и mfhi для помещения произведения в регистры.
258 Глава 3. Арифметика для компьютеров
Краткие выводы
Умножающее оборудование занимается простым сдвигом и сложением, по
заимствованным из методики умножения с помощью карандаша и бумаги, которой
учат в школе. Компиляторы даже используют инструкции сдвига для умножени
на 2 \
L V
I I Ч /
I I I 1 1 -
32 разряда .32 разряда^ 32 разряда . 32 разряда
32 разряда. 32 разряда.
.3 2 разряда
3.4. Деление
Divide et impera1.
А л го р и т м и о б о р у д о в а н и е , и с п о л ь з у е м ы е
для деления
На рис. 3.7 показано оборудование, предназначенное для имитации школьно
алгоритма. Начнем с 32-разрядного регистра Частного, значение которого >станс •
лено в нуль. Каждая итерация алгоритма требует перемещения делителя впраь
на одну цифру, поэтому мы начнем с делителя, расположенного в левой половит
64-разрядного регистра Делителя и с каждым шагом будем смещать его вира*
на один разряд, выравнивая с Делимым. Регистр Остатка в качестве начально
получает значение Делимого.
Рис. 3.7. Первая версия оборудования, предназначенного для деления. Регистр Делигг*-
АЛУ и регистр Остатка имеют величину 64 разряда, и только регистр Частного имеет вели».»-
32 разряда. 32-раэрядный делитель изначально располагается в левой половине регистре L?
лите ля, и с каждой итерацией он смещается на один разряд вправо, Остаток изначально поп
чает значение делимого. Блок управления решает, когда нужно произвести сдвиг содержим:
регистров Делимого и Частного и когда произвести запись нового значения в регистр Оста->
Упражнение
Алгоритм деления
Используя для экономии пространства 4 разрядную версию алгоритма, попробуйте раз
делить 7|0 на 2„, или 0000 0111, на 00102.
Ответ
На рис. 3.9 показано значение каждого регистра для каждого шага с частным, равным 3^
и остатком, равным 1!0. Обратите внимание на то, что тест на шаге 2, проверяющий, является
ли остаток положительным или отрицательным, просто выясняет, содержит ли знаковый
разряд регистра Остатка 0 или 1. Неожиданным требованием зтого атгоритма является ис
пользование п + 1 итераций для получения нужного частного и остатка.
Ускоренное деление
Для ускорения умножения использовалось множество сумматоров, но применить
подобный прием для деления невозможно. Причина в том, что перед выполнением
следующего шага алгоритма нужно знать о знаке разницы, а при умножении 32 ча
стичных произведения могут быть вычислены немедленно.
Существуют технологии, позволяющие за один шаг получать более одного
разряда частного. Технология SR T-деления пытается за один шаг выстроить пред
положение относительно нескольких разрядов частного, используя табличны!
поиск, основанный на старших разрядах делителя и остатка. Для исправления
неверных предположений она полагается на следующие шаги. На сегодняшни!
день типичным значением являются 4 разряда. Ключевым в этой технологии вы
ступает предположение о вычитаемом значении. В двоичном делении есть тольис
один приемлемый вариант. Для индексирования таблицы, определяющей пред
положение для каждого шага, в этих алгоритмах используются 6 разрядов остатка
и 4 разряда делителя.
Точность этого ускоренного метода зависит от наличия в таблице поиска под
ходящих значений. То, что может произойти, если в таблице содержатся неверные
значения, показано в разделе 3.8, где рассматриваются все заблуждения и недо
разумения.
Деление в MIPS
При изучении рис. 3.4 и 3.10 можно было заметить, что для умножения и деления
подходит оборудование, состоящее из одних и тех же логических схем. Единствен
ное, что для этого требуется, —наличие 64-разрядного регистра со сдвигом вправе
3.4 Деление 265
Краткие выводы
Общая аппаратная поддержка умножения и деления позволяет MIPS предостав
лять отдельную пару 32-разрядных регистров, которые используются как для
умножения, так и для деления. В табл. 3.3 представлены все дополнительные ин
струкции МIPS-архитектуры, имеющие отношение к двум последним разделам.
Категория
Инструкции Пример Значение Комментарии
инструкций
Арифмети add (сложение) add Ssl.Ss2.is3 Ssl * Ss2 + Ss3 Три операнда;
ческие переполнение
определяется
subtract (вы sub Ssl.Ss2.Ss3 Ssl - Ss2 - Ss3 Три операнда;
читание) переполнение
определяется
add immediate addi Ssl.Ss2.20 Ssl - $52 ♦ 100 + константа;
(непосредст переполнение
венное сложе определяется
ние)
add unsigned addu Ssl Ss2.Ss3 Ssl - $52 ♦ Ss3 Три операнда;
(беззнаковое переполнение
сложение) не определяете»
subtract un subu 5sl.Ss2.Ss3 Ssl - Ss2 - Ss3 Три операнда;
signed (беззна переполнение
ковое вычита не определяете»
ние)
add immediate addiu Ssl.Ss2.20 ssl - Ss2 ♦ 100 ♦ константа;
unsigned (без переполнение
знаковое непо не определяете»
средственное
сложение)
move from mfcO Ssl, Sepc Ssl * Sepc Копирование
coprocessor счетчика команд
register (пере исключения
мещение из (ЕРС) и специ
регистра со альных реги
процессора) стров
multiply (умно mult Ss2.Ss3 HI. lo - Ss2 к Ss3 64-разрядное
жение) произведение
со знаком в Hi.
Lo
multiply un multu Ss2.Ss3 Hi. Lo * Ss2 * Ss3 64-разрядное
signed (беззна произведение
ковое умноже без знака в Hi.
ние) Lo
divide (деле dtv Ss2.Ss3 Lo ■= Ss2 / Ss3. Lo = частное,
ние) Hi - Ss2 nod Ss3 Hi = остаток
divide unsigned divu Ss2.Ss3 Lo - Ss2 / $s3. Беззнаковое
(беззнаковое Hi - Ss2 mod Ss3 частное и оста
деление) ток
3.4. Деление 267
К а те го ри я
И н стр у кц и и П ример Значение Ком м ентарии
и нструкци й
move from Hi mfhi Ssl ssl * hi Используется
(перемеще для получения
ние из Hi) копии HI
move from Lo mflo Ssl Ssl - Lo Используется
(перемеще для получения
ние из Lo) копии Lo
Переноса load word (за Ssl,20(S$2) Ssl - Паиять[$52 ♦ 20] Слово из памяти
данных грузка слова) в регистр
store word sw Ssl.20(Ss2> fl4K«Tb(Ss2 + 20] - Ssl Слово из реги
(сохранение стра в память
слова)
load half un Ihu Ssl.20(Ss2) Ssl - nax*Tb[Ss2 ♦ 20] Полуслово из
signed (загруз памяти в ре
ка полуслова гистр
без знака)
store half $h Ssl.20(Ss2) naK*Tb[Ss2 ♦ 20] - Ssl Полуслово из
(сохранение регистра в па
полуслова) мять
load byte un Ibu Ssl.20(Ss2) Ssl * nanflTb(Ss2 + 20] Байт иэ памяти
signed (загруз в регистр
ка байта без
знака)
store byte sb Ssl.20(Ss2) ПаиятьГSs2 * 20) * Ssl Байт из реги
(сохранение стра в память
байта)
load linked word 11 Ssl,20(Ss2) Ssl » ПаиятьГSs2 + 20] Загрузка слова
(связанная за при выполнении
грузка слова) первой полови
ны атомарного
обмена
store condition sc Ssl,20(Ss2) ridHRtblSs2+20]*Ssl: Сохранение
word (условное Ssl-0 или 1 слова при
сохранение выполнении
слова) второй полови
ны атомарног о
обмена
load upper Iu1 Ssl.20 Ssl - 20 * 216 Загрузка кон
immediate станты в верх
(загрузка не ние 16 разрядов
посредствен
ного значения
в верхние
разряды)
продолжение &
268 Глава 3. Арифметика для компьютеров
Таблица 3 .3 (продолжение)
К а те го р и я
И н стр у кц и и П ример Значение Ком ментарии
и н стр у к ц и й
Категория
Инструкции Пример Значение Комментарии
инструкций
set on less than situ Ssl.$s2.Ss3 если (Ss2 < Ss3). Сравнение
unsigned (уста Ssl - 1: «меньше чем»:
новка, если иначе Ssl - 0 натуральные
меньше, чем числа
без знака)
set less than s ltiu Ssl.Ss2.100 если (Ss2 < 100). Сравнение
immediate Ssl - 1: «меньше чем»
unsigned иначе Ssl - 0 с константой,
(установка, натуральные
если меньше, числа
чем непо
средственное
значение без
знака)
Безусловно jump (переход) J 2500 перейти на 10000 Переход по ука
го перехода занному адресу
jump register jr Sra перейти на адрес, ука Для переключе
(переход no занный в Sra ния; возвраще
регистру) ние из проце
дуры
jump and link ja l 2500 Sra - PC • 4; перейти Для вызова про
(переходи на 10000 цедуры
ссылка)
Выходя за рамки целых чисел со знаком и без знака, языки программирования под
держивают дробные числа, которые в математике называются действительными.
Рассмотрим несколько примеров действительных чисел:
3.14159265.. .10(«пи*);
2.71828..
0,00000000110, или 1,0)Ок 10 ,J (количество секунд в наносекунде);
3 155 760 00010, или 3,15576ш * 109 (количество секунд в обычном столетии).
Обратите внимание на то, что в последнем примере число не представляло
собой небольшую дробь, но было слишком большим для того, чтобы быть пред
ставленным 32-разрядным целым числом со знаком. Альтернативная форма за
писи для последних двух чисел, у которой слева от десятичного знака имеется
всего одна цифра, называется экспоненциальным представлением Число в экс
поненциальном представлении, не имеющее лидирующих нулей, называется нор
мализованным числом и является обычной формой записи. Например, 1,01Ок 10 9
относится к нормализованному экспоненциальному представлению, а 0,110 * 10 е
и 10,0|# х ю 10 —нет.
270 Глава 3. Арифметика для компьютеров
Нормализованное число
Число в форме записи с плавающей точкой,
не имеющее лидирующих нулей. Представление
Плавающая точка (floating point) с плавающей тонкой
Компьютерная арифметика, представля
ющая числа, в которых двоичная точка не
Разработчик представления с плавающем
зафиксирована. точкой должен найти компромисс между раз
мером мантиссы (дробной части) и размером
Мантисса экспоненты (показателя порядка), поскольку
Значение, которое обычно находится в диа
пазоне от нуля до единицы и помещается в фиксированный размер слова означает, что до
поле мантиссы. бавить разряд к одной из этих частей м о ж н о
I только отняв его у другой части. Возникает
Экспонента
компромисс между точностью и диапазоном
В системе числового представления ариф
метики чисел с плавающей точкой значе увеличение размера дробной части повышает
ние. помещаемое в поле экспоненты. точность, а увеличение размера порядка повы
3.5. Числа с плавающей точкой 271
S экслонента мантисса
31 30 I 29 га 27 26 25 24 г з |г г 21 го 19 18 17 16 15 14 13 12 11 10 9 в 7 6 5 4 3 г 1 с
экспонента м ан ти сс*
jl J ----------------------------------------------------- 1
1 раз- 11 р азд ето * 20 разрядов
рад
м ан ти сс* (продолжение)
32 р а д о д а
( ~ l) s х (1 + Мантисса) х 2к,
В табл. 3.4 показано кодирование стандарта чисел с плавающей точкой IEEE 754.
мне одной особен ностью IEEE 754 являются специальные сим ваты для представ-
ения неординарных событий. Например, вместо прерывания при делении на нуль
1рограммное обеспечение может установить результат битовому шаблону, иред-
гавляющему +«> или - 00; Для этих специальных символов зарезервирован самый
'юльшой показатель порядка. Когда программист выводит результат, программа
выведет символ бесконечности. (Для искушенных в математике следует отметить,
то цель использования бесконечности состоит в формировании топологического
замыкания вещественных чисел.)
0 0 0 0 0
Упражнение
Представление чисел с плавающей точкой
Покажите двоичное представление числа -0.75|(| с одинарной и двойной точностью, соот
ветствующее стандарту IEEE 754.
Ответ
Число -0.75|о можно также представить как
“ 3/4 10или -3 /2 J,0.
Оно также может быть представлено в виде двоичной дроби:
3.5. Числа с плавающей точкой 275
1 0 1 1 1 1 1 1. 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 В разрядов 23 разряда
раз
РЯД
—
31 30 29 28 77 20 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 ю 9 в 7 в 5 4 э 2 1 0
1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11 разрядов 20 разрядов
раз
ряд
0 0000000000
32 разряда
Упражнение
Преобразование двоичного числа с плавающей точкой в десятичное
Какое десятичное число представляет следующее число с плавающей точкой одинарной
точности?
31 30 29 28 27 25 25 24 23 22 21 20 19 18 17 18 15 14 13 12 11 10 9 в 7 б 5 4 3 2 1 0
0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -
276 Глава 3. Арифметика для компьютеров
Ответ
Знаковый разряд имеет значение 1, поле экспоненты содержит число 129, а поле мантиссы
содержит число 1 * 2 7- 1/4, или 0.25. Используя базовую формулу,
( - l ) s *(1 + Мантисса) к - ( - 1 ) 'х (1 + 0.25) * 211М' ,ет’ =
- - 1 х 1.25х 27- -1.25 x 4 - -5.0
В следующих подразделах будут показаны алгоритмы для сложения и умножения чисел
с плавающей точкой. В своей основе они используют соответствующие целочисленные
операции над значащими частями, но для обработки экспоненты и нормализации результата
нужны дополнительные действия. Сначала будет дано наглядное представление алгоритмов
в десятичных числах, а затем более подробно будет представлена двоичная версия.
Ю .01510
Упражнение
Сложение двоичных чисел с плавающей точкой
Попробуйте сложить числа 0.510и -0.4375)0в двоичном представлении, используя алгоритм,
ооказанный на рис. 3.11.
Ответ
Сначала рассмотрим двоичную версию этих двух чисел в нормализованном экспоненциаль
ном представлении, предполагая, что точность ограничена 4 разрядами:
■/*1»
- 0 . 1, - 0.12 х 2® 1.0002х 2"’
-0.4375<0 ~ -7 /1 6 10 - - 7 /2 4 10
— 001112 - -0.01112* 2° • -1.110, х 2-2
Теперь последуем алгоритму:
Шаг 1. Значащая част ь числа с наименьшей экспонентой (-1.11, х 2 '2) сдвигается вправо до
тех пор, пока ее экспонента нс сравняется с экспонентой наибольшего числа:
-1.110, х 2*» - -0.111, х 2-*.
Шаг 2. Сложение значащих частей:
1.000, х 2-' + (-0.111, х 2 ') - 0.001, х 2 '.
Шаг 3. Нормализация суммы, проверка на переполнение или на потерю значимости:
0.0012 х 2-1 - 0.0102 х 2-2 - 0.1002 х 2-3
- 10002x2-4
Поскольку 127 > - 4 > -126, переполнение или потеря значимости не произошли. (Сме
щенная экспонента должна иметь значение -4 + 127, или 123, и это значение находится
между 1 и 254, то есть между наименьшим и наибольшим значениями незарезервированных
смещенных экспонент.)
Шаг 4. Округление суммы:
1.000, х 2 *
Сумма как раз помещается в 4 разряда, поэтому при округлении разряды ие изменяются.
Тогда сумма равна
1.0002 х 2-4 = 0.00010002 - 0.00012
- 1/2410 - 1/1610 -0.062510
Эта сумма соответствует ожидаемой от сложения 0.51Си -0.4375,,.
11 Юю
х 9.200)и
0000 "
0000
2220
9990 _
10212000)0
Упражнение
Умножение двоичных чисел с плавающей точкой
Попробуйте перемножить числа 0.5|0 и -0.437510, используя шаги, показанные на рис. 3.13
О твет
В двоичном виде задача состоит в умножении числа 1.000г * 2 1на число -1.110, к 2 г.
Шаг 1. Сложение экспонент без смещения:
-1 + (-2 ) — 3
или с использованием представления со смещением:
(-1 + 127) + (-2 + 127) - 127 = (-1 - 2) + (127 + 127 - 127) - -3 + 127 - 124
3.5. Числа с плавающей точкой 283
Рис. 3.1 3 . Умножение чисел с плавающей точкой. Обычно шаги 3 и 4 выполняются один раз,
но если округление произведения приводит к его ненормализованному виду, шаг Э необходимо
повторить
284 Глава 3. Арифметика для компьютеров
0000
1000
1000
1000
11100007
Произведение равно 1.110000, х 2~э, но нам нужно уместить его в четырех разрядах, поэтому
оно равно 1.110, * 2‘*.
Шаг 3. Теперь произведение приводится, если это нужно, к нормализованному виду, а за
тем экспонента проверяется на переполнение или на потерю значимости. Произведение
уже имеет нормализованный вид, а поскольку 127 > -3 > -126, переполнение или потеря
значимости не наступили. (При использовании смещенного представления, 254 > 124 > 1
значит, экспонента умещается в отведенном для нее пространстве.)
Шаг 4. Округление произведения оставляет число без изменений:
1.110, х 2-»
Шаг 5. Поскольку знаки исходных операндов отличались друг от друга, произведению при
сваивается отрицательный знак. Следовательно, произведение имеет значение
-1.110, х 2 я.
Для проверки результата преобразуем число в десятичное:
-1.1102 х 2-3 =■=-0.0011102 - -0.001112
= -7/2510 - -7/3210 - -0.2187510.
Произведение, полученное при умножении 0.5,в на -0.4375,,, действительно равно -0.21875,,
equal (1е), больше чем greater than (g t) или больше чем или равно — greater
than or equal (ge)
♦ Перехода, когда результат вычисления с числами с плавающей точкой истина —
true (belt) или ложь — false (belt)
При сравнении чисел с плавающей точкой в зависимости от условия сравнения
разряд устанавливается в true или false, а затем, н зависимости от условия, прини
мается решение, нужно или нет осуществлять условный переход по результатам
операции над числами с плавающей точкой.
Разработчики MIPS решили добавить для работы с числами с плавающей точ
кой отдельные регистры, которые называются SfO, *f 1, $f2,... и используются для
чисел как с одинарной, так и с двойной точностью. Соответственно они включили
з набор отдельные инструкции для загрузки и сохранения регистров, предназначен
ных для чисел с плавающей точкой: Iwcl и swcl. Базовыми регистрами для переноса
данных, имеющих формат с плавающей точкой, остались целочисленные регистры.
M IPS-код для загрузки из памяти двух чисел с одинарной точностью, их сло
жения, а затем сохранения суммы может иметь следующий вид:
Iwcl Sf4.x($sp) # Загрузка 32-разрядного числа с плавающей точкой з F4
wcl Sf6.y($sp) # Загрузка 32-разрядного числа с плавающей точкой э F6
add.s Sf2.$f4.$f6 # F2 ■ F4 + F6 (одинарная точность)
swcl if2.z(*$p) # Сохранение 32-разрядного числа с плавающей точкой из F2
На самом деле регистр для чисел с двойной точностью —это пара, составленная
из регистров для чисел с одинарной точностью с четным и нечетным номерами,
с присвоением этому регистру имени четного регистра. Таким образом, пара реги
стров для чисел с одинарной точностью $f2 и U3, кроме всего прочего, формирует
также и регистр для числа с двойной точностью с именем i f 2.
Часть рассматриваемой в данной главе M IPS-архитектуры, предназначенной
для работы с числами с плавающей точкой, показана в табл. 3.5. Дополнения,
внесенные в архитектуру для работы с числами с плавающей точкой, выделены
жирным шрифтом. На рис. 3.14 показана колировка инструкций, подобная той,
которая была показана на рис. 2.12 в главе 2.
Т а б л и ц а 3 .5 (п р о д о л ж е н и е )
Я зы к ассем блера MIPS для работы с числами
с п л а в а ю щ е й т о ч к о й — flo a tin g - p o in t (FP)
:sub.s R 17 is в 4 2 1 su b .s S f2 .S f4 . $ f6
L i s R 17 16 6 4 2 2 mul . s 1 f2 .S f4 .tf6
ad d .d R 17 17 в 4 2 0 ad d .d S f2 .tf4 .tf6
d iv .d R 17 17 6 4 2 3 d iv .d S f2 .tf4 .S f6
sw cl 1 57 20 2 100 sw cl tf2 .1 0 0 (S s4 )
b e lt 1 17 8 1 25 b e lt 25
b c lf 1 17 8 0 25 b c lf 25
ор(31:26):
6( 1 1 0 ) lwcO lwcl
7(111) SwcO swcl —
ор(31:26) = 010001 (FlPt), (rt( 16:ie) s 0 => с = f, rt< 16:16) = 1 =:> с = t), rs(25:21):
2 (0 1 0 )
3(011)
4(100) evt.s. f evt.d. f evt w. f
5(101)
6(1 1 0 ) c.f. f c.un. 1 c.eq. f c.ueq. f colt, f cult, f cole, f col e. f
7(111) c.sf. t c.ngle. 1 c seq , f c.ngl. f c.lt. f ervge. f cle. f engt. f
Яф ажнение
Компиляция программы на С, работающей с числами с плавающей точкой, в ассемблер
а м код MIPS
Давайте переведем температуру по Фаренгейту' в температуру по Цельсию:
float f2c (float fahr)
<
return ((5 0/9 0) * (fahr - 32.0));
}
Предположим, что аргумент в формате числа с плавающей точкой fahr передан в реги
стре If 12, а результат должен попасть в регистр IfO. (В отличие от регистров для работы с
■елыми числами регистр 0 для числа с плавающей точкой может содержать число.) Каким
будет ассемблерный код MIPS?
Ответ
1редпс> южим, что компилятор поместил три константы в формате чисел с плавающей
точкой в память в пределах досягаемости посредством глобального указателя *др. Первые
две инструкции загружают константы 5.0 и 9.0 в регистры для чисел с плавающей точкой:
12с:
lwcl $fi6.const5(tgp) # $f16 - 5-0 (значение 5 0 находится в пачяти)
lwcl *fi8.const9(*gp) # *fl8 - 9 0 (значение 9.0 находится а памяти)
Затем производится деление для получения дробного значения 5.0/9.0:
div s *f 16. Sfl6. # Ifl6 ■ 5 0 / 9.0
(Многие компиляторы разделят 5.0 на 9.0 в процессе компиляции и сохранят в памяти одну
константу 5.0/9.0, исключив, таким образом, деление в процессе выполнения программы.)
Следующим шагом загружается константа 32.0, а затем она вычитается из fahr (**12):
lwcl $П8. const32(*gp) # И18 - 32 0
sub S m s. If 12. Sf18 # $f18 - fahr - 32.0
И наконец, два промежуточных результата перемножаются, и произведение помещается
в регистр **С в качестве возвращаемого результата, после чего осуществляется возвращение
яэ процедуры
mul s *f0. *П6. Sf 16 # *f0 • (5/9)*(fahr - 32 0)
Jr *ra # возврат
А теперь выполним операции для чисел с плавающей точкой над матрицами; код с такими
операциями часто встречается в программах научных расчетов.
Упражнение
Компиляция в MIPS-код процедуры на языке С, работающей с числами с плавающей
точкой, принадлежащими двумерным матрицам
Большинство вычислений, производимых нал числами с плавающей точкой, осуществля
ется с двойной точностью. Давайте выполним перемножение матриц X = X + Y * 2. Пред
положим, что X, Y и 2 —это прямоугольные матрицы, имеющие в каждом измерении по
32 элемента.
void mn idooble х[]П. double у[][]. douB'e z[][])
(
tnt 1. J, k.
f o r ( i - 0; f !■ 32: 1 • 1 ♦ 1)
for (J * 0: J !* 32: j - j ♦ 1)
290 Глава 3. Арифметика для компьютеров
for (к - 0: к !- 32; к - к * 1)
x[i][j] - xl»][j] ♦ уСО[к] * zCkKJJ:
)
Стартовые адреса массивов являются параметрами, поэтому они находятся соотпетственнс
в регистрах *а0, *al и la 2. Предположим, что целочисленные переменные находятся соответ
ственно в регистрах НО, *sl и И2. Каким будет код тела этой процедуры на языке ассемблера
MIPS?
Следует заметить, что элемент х(.1]Ш используется в самом внутреннем цикле показанного
выше кода. Поскольку индексом цикла служит переменная к, индекс не влияет на х[1];
поэтому можно не загружать и не сохранять *[i][J] при каждой итерации. Вместо этого ком
пилятор загружает x[i][j] в регистр за пределами цикла, аккумулирует сумму произведение
y[l][kj и z[k][j] в том же самом регистре, а затем, после завершения самого внутреннегт
цикла, сохраняет сумму в элементе x[i][Jl.
Мы упростим код за счет использования псевдоинструкций языка ассемблера 11 (которая
загружает константу в регистр), а также 1 с и s.d (которые ассемблер превратит в пар}
инструкций Iwcl или swcl, переносящих данные в пару регистров, предназначенных для
хранения чисел с плавающей точкой).
Тело процедуры начинается с сохранения во временном регистре значения 32, используе
мого для прекращения цикла, и продолжается инициализацией трех переменных цикла for
mri
11 HI. 32 # HI - 32 (размер строки/кочец цикла)
ll *s0. 0 # 1- 0: инициализация 1-го цикла for
u It *sl. 0 #J- 0. перезапуск 2-го цикла for
12 11 *s2. 0 # k- 0: перезапуск 3-го цикла for
Чтобы вычислить адрес элемента xfi)[J], нужно знать, как хранится в памяти двумерны,
массив 32 к 32. Вполне разумно предположить, что его размещение аналогично размещении
32 одномерных массивов по 32 элемента в каждом. Поэтому первым шагом будет пропуск i
«одномерных массивов», или строк, для получения нужной нам строки. Таким образом, мь
умножаем индекс первой размерности на размер строки. 32. Поскольку 32 является степеныс
числа 2, вместо умножения можно воспользоваться сдвигом:
ill St2. SsO. 5 # И2 “ 1 * 25 (размер строки массива х)
Теперь для выбора j -того элемента нужной строки прибавим второй индекс:
acdu $t2. И2. Ss1 # П2 - i * раэкер(арока) + j
Чтобы превратить эту сумму в байтовый индекс, мы умножаем ее на размер элемента матри
цы в байтах. Поскольку каждый элемент для чисел с двойной точностью состоит из 8 баи
вместо этого можно осуществить тройной сдвиг влево:
si 1 tt.2. U2. 3 # И2 - байтовое смещение дг» [i][j]
Затем мы добавим эту сумму к базовому адресу х, предоставляя адрес элемента x[t][j;
а затем загрузим число с двойной точностью, хранящееся в элементе x(i][j], в регистр $fi;
addu It2. *а0. St? # *12 - бай-овпй адрес элемента x[i][j]
Id *f4. 0($t2) # *f4 - 8 байтов элемента x(1)[J]
Следующие пять инструкций фактически идентичны последним пяти: они вычисляют адрес
а затем зафужают число с двойной точностью, которое хранится в элементе z[k][j).
13 si 1 StO. *s2. 5 ♦ НО - k * 25 (размер строки пассива z)
adcj HO, StO. (si # *t0 - k * раэиео(строка) ♦ j
sll HO. HO. 3 # HO - байтовое сиеиемие [k)[j]
3.5- Числа с плавающей точкой 291
Уточнение. Еще одна причина разделения регистров для работы с целыми числами
и регистров для чисел с плавающей точкой состоит в том, что микропроцессоры
в 1980-х годах не имели достаточного количества транзисторов, чтобы блок для ра
боты с числами с плавающей точкой поместился на том же самом чипе, что и блок для
292 Глава 3. Арифметика для компьютеров
работы с целыми числами. Поэтому блок для работы с числами с плавающей точкой,
включая и соответствующие регистры, был доступен в качестве второго чипа. Такие
дополнительные ускорители назывались сопроцессорами, что объясняет происхожде
ние акронима для загрузки в MIPS чисел с плавающей точкой: lwcl означает «загрузить
слово в сопроцессор 1» — load word to coprocessor 1, то есть в блок арифметики с пла
вающей точкой. (Сопроцессор 0 относится к виртуальной памяти, которая рассматри
вается в главе 5.) С начала 1990-х годов у микропроцессоров появился встроенный
блок арифметики с плавающей точкой (как, собственно, и все остальное), и поэтому
термин сопроцессор образует одно целое с сумматором и основной памятью.
Уточнение. Как уже упоминалось в разделе 3.4, ускорение операции деления дается
намного труднее, чем ускорение умножения. Кроме технологии SRT, есть еще одна
технология, позволяющее ускорить работу устройства деления, так называемый ме
тод простых итераций Ньютона, при котором деление превращено в нахождение нуля
функции для определения величины, обратной 1/х, которая затем перемножается
с другим операндом. Технология итерации не позволяет провести нужное округление
без вычисления множества дополнительных разрядов. Эту проблему путем вычисле
ния сверхточной обратной величины решает микросхема Л .
Уточнение. В языке Java стандарт IEEE 754 используется посредством упоминания
в своих определениях типов данных и операций, касающихся чисел с плавающей
точкой в Java. Поэтому код, приведенный в первом примере, возможно, неплохо бь
подошел для создания метода класса, переводящего значения из шкалы по Фарен
гейту в шкалу по Цельсию.
Точная арифметика
В отличие от целых чисел, которые могут представлять в точности каждое чист:
между самым малым и самым большим числами, числа с плавающей точкой обыч
но являются приближенным значением того числа, которое они на самом дел
представить не в состоянии. Причина в том, что, скажем, между нулем и единице,
находится бесконечное множество вещественных чисел, в то время как числам!
с плавающей точкой двойной точности может быть представлено не более че^
2й вещественных чисел. Не остается ничего лучшего, как получить такое продета г
ление в виде числа с плавающей точкой, которое будет ближе всего к реальном
числу. Поэтому стандарт IE E E 754 предлагает несколько режимов округлено •
позволяя программисту выбрать нужное приближение.
Сам термин «округление*» звучит довольно просто, но для точного округлен»
требуется оборудование, включающее в процесс вычисления дополнительны*
3.5. Числа с плавающей точкой 293
Упражнение
Окру глснис с разрядами защиты
Сложите 2.5610* 10° с 2 34|41* 10г, при условии, что имеются три значащих десятичных разря
да. Округлите до ближайшего десятичного числа с тремя значащими десятичными разряда
ми сначала с использованием разрядов защиты и округления, а затем без их использования.
Ответ
Сначала нужно произвести сдвиг вправо наименьшего числа для выравнивания экспонент,
превратив 2.56)0 я 10° в 0.0256|о к 102. При наличии разрядов защиты и округления появля
ется возможность при выравнивании экспонент представить два самых младших разряда.
Разряд зашиты содержит значение 5, а разряд округления содержит значение 6. Сумма вы
числяется следующим образом:
23400.0
+0.0256,0
2.3656.0
и представляется числом 2.365610* 10г. Поскольку две цифры подлежат округлению, значе
ния от 0 до 49 нужно округлять вниз, а значения от 51 до 99 —вверх, а число 50 нуждается
в дополнительном рассмотрении. При округлении суммы вверх до трех значащих цифр
получается результат 2.3710я 10*.
Выполнение округления без разрядов защиты и округления выводит за пределы вычислений
два разряда. При этом новая сумма вычисляется следующим образом:
2 . 34.0
+002ш
2.36.0
Защита (Guard)
Первый из двух дополнительных разрядов,
Ответ становится равным 2.36,0 я 10’, теряя при этом оставляемых справа при промежуточных
по сравнению с предыдущей суммой единицу из по вычислениях с числами с плавающей точ
следней цифры кой; используется для повышения точности
округления
Краткие выводы
Следующ ий далее подраздел «Общее представление* подкрепляет концепцию
хранимой программы, изложенную в главе 2; это означает, что характер информа
ции не может быть установлен простым изучением битов, поскольку одни и те же
биты могут представлять множество объектов. В этом разделе показывается, что
компьютерная арифметика имеет определенные ограничения и может иметь рас
хождения с обычной арифметикой. Например, представление чисел с плавающей
точкой, соответствующее стандарту IE E E 754
( - l ) s х (1 - М антисса) *
Общее представление
У битовых комбинаций нет никаких предопределенных значений. О ни могут пред
ставлять целые числа одинарной точности, целые числа без знака, числа с плава
ющей точкой, инструкции и т. д. Ч то именно ими представляется — зависит от
инструкции, которая оперирует битами в слове.
Основное отличие компьютерных чисел от чисел реального мира состоит в том,
что компьютерные числа имеют ограниченный размер, а стало быть, и ограни
ченную точность; существует возможность получения в результате вычисления
слишком большого или слиш ком малого чиста,
ко то р о е не может быть представлена в слове. Совмещенное умножение-сложение
Программисты должны помнить об этих огра- Инструкция для чисел с плавающей точкой,
ничениях и составлять программы cootbctctbv- выполняющая сразу и умножение, и сложе-
юшнм образом. иие' но производящая округление только
v один раз после сложения,
296 Глава 3. Арифметика для компьютеров
unsigned int — Iw. sw. lui addu. addiu, subu, multu, divu,
AND. ANDi, OR. ORi. NOR, situ, sltiu
char — lb. sb. lui add. addi, sub, mult, dlv,
AND, ANDi, OR, ORi. NOR. sit, Slti
Самопроверка
Предположим, что используется 16-разрядный формат чисел с плавающей точкой
соответствующий стандарту IE E E 754 и имеющий пять разрядов экспоненты.
Каким, скорее всего, будет диапазон чисел, отображаемых с его помощью?
1. О т 1.0000 0000 00 X ? ' до 1.1111 1111 1 1 * 2 3',0
2. О т ±1.0000 0000 0 * 2 '* до ±1.1111 1111 1 * 2 '\ ±0, ±<», NaN
3. 0т± 1.0000 0000 00*2-' * до ±1.1111 t i l l 11 * 2'5, ±0, ±°°. NaN
4. О т ±1.0000 0000 0 0 * 2-'5 до ±1.1 111 l i l t 11 * 2м, ± 0,± °°,N aN
Упражнение
Проверка ассоциативности сложения чисел с плавающей точкой
Посмотрите, соблюдается ли условие х + (у + z) = (х + у) + г. Предположим, например, что
х = -1.5 х 10м, у - 1.510х 10м, а г - 1.0 и все числа имеют одинарную точность.
Ответ
С учетом широкого диапазона чисел, которые могут быть представлены в формате с плава
ющей точкой, проблемы, как мы увидим из следующею примера, возникают при сложении
двух больших чисел с разными знаками и небольшого числа:
х + (v + z) - -1.5|0 х Ю* + (1.5|0 х 10м + 1.0)
- -1.510х 10* + (1.5|0 х 10м) “ 0.0
( x + y) + z - ( - 1 . 5 1(>x 10м + 1 5,„х ю м) + 10
-( 0.0|0) + 1.0
- 1.0
Следовательно, х + (у + z) * (х + у) + г, поэтому сложение чисел с плавающей точкой не
является ассоциативным.
Поскольку числа с плавающей точкой имеют ограниченную точность и результат является
приближением реального результата, 1.5|0 х 10м настолько больше 1.0|(1, что 1.5|0 х 10м + 1.0
все еще представляется числом 15 „ * 10м Именно поэтому сумма х, у и г равна 0.0 или 1.0.
в зависимости от порядка сложения чисел с плавающей точкой, и, следовательно, сложение
таких чисел не является ассоциативным.
FABS FSIN
FRNDINT FYL2X
SORT{SS/PS/SD/PD) mem/xmm
MIN{SS/PS/SD/PD) mem/xmm
3.8 Заблуждения и недоразумения 303
Заголовки газет в ноябре 1994 года гласили, что это утверждение является не
более чем простым заблуждением (рис. 3.15). А история появления таких заголов
ков была следующей.
В Pentium используется стандартный алгоритм деления чисел с плавающей
точкой, генерирующий несколько разрядов частного за один шаг. О н использует
старшие разряды делителя и делимого, чтобы выстроить предположения насчет
следующих двух разрядов частного. Это предположение возникало в результате
просмотра таблицы, содержащей -2 , -1,0, +1 или +2. Предполагаемое число умно
жалось на делитель и вычиталось из остатка, чтобы сгенерировать новый остаток.
Подобно делению без восстановления, если в результате предыдущего предполо
жения получался слишком большой остаток, промежуточный остаток приводился
к нужному значению при следующем проходе.
По-видимому, и специалисты Intel считали, что к пяти элементам таблицы из
процессора 80486 никогда не будет обращений, и оптимизировали программиру
емую логическую матрицу, чтобы в ситуации с Pentium возвращался 0, а не 2. Но
специалисты Intel ошиблись: обеспечив неизменно правильный результат в первых
11 разрядах, они допустили периодическое возникновение ош ибки в разрядах
с 12-й по 52-й, или с четвертой по пятнадцатую десятичную цифру.
Рис. 3.15. Примеры газетных и журнальных статей от ноября 1994 года, включая статьи иа
New YorK Times, San Jose Mercury News, San Francisco Chronicle и Infoworld. Ошибка Pentium
при делении чисел с плавающей точкой даже вошла в список горячей десятки новостей — «Тор
10 List» телевизионно! о шоу Дэвида Легтермана В конечном итоге Intel потратил на замену со
держащих ошибку чипов 300 миллионов долларов
3.8. Заблуждения и недоразумения 305
с дефектом процессора Pentium каждые 24 дня. Они предполагали, что 5000 де
лений в секунду за 15 минут дают 4,2 миллиона делений в день, и не согласили»
с предположением о случайном распределении чисел, вычислив возможное!»
ошибки как одну на 100 млн. В результате этого IB M немедленно прекратила
поставки своих персональных компьютеров на основе процессоров Pentium
Скандал вокруг компании Intel разгорелся с новой силой,
♦ 21 декабря 1994 года. Intel выпускает следующий пресс-релиз, подпис анный
президентом компании, главным исполнительным директором и председателем
правления:
«М ы в компании желаем принести искренние извинения за наше отноше
ние к ставшему недавно известным недостатку процессора Pentium. Эмблема
Intel Inside означает, что ваш компьютер имеет непревзойденный по качеству
и производительности микропроцессор. Пал доказательством истинности дан-
.■acv» _)тдерждеюгл y.vsfws'гру&тгя гмтличг лижлмлтлу As&al .V
идеальных микропроцессоров не существует. В компании Intel продолжа*-
верить тому, что в данном случае совершенно незначительная проблема при
обрела особое значение. Хотя компания Intel настаивает на высоком качестве
текущей версии процессора Pentium , мы отдаем себе отчет в имеющейся
многих пользователей озабоченности. М ы хотим устранить все сомнения. Intt
обменяет текущую версию процессора Pentium на обновленную, с устраненным
дефектом деления чисел с плавающей точкой, любому владельцу, запросившем
такой обмен, совершенно бесплатно в любое время на протяжении всего срока
эксплуатации его компьютера».
А н а л и ти ки оценили, что этот отзыв продукции обойдется ком пании Intel
в 500 млн долларов, и инженеры компании Intel не получили в тот год рождествен
ских бонусов.
У этой истории есть несколько поучительны х моментов, касающ ихся веет
нас. Насколько дешевле было бы устранить дефект в июле 1994 года? Во сколь-
обошлось восстановление репутации компании Intel? И что такое корпоративная
ответственность в выявлении ошибок в таком широко используемом и серьезном
продукте, как микропроцессор?
В апреле 1997 года была обнаружена еще одна ошибка при работе с числами
с плавающей точкой в микропроцессорах Pentium Pro и Pentium II. Когда ин
струкция сохранения чиста с плавающей точкой в виде целого числа (fist, f i s t : l
сталкивается с отрицательным числом с плавающей точкой, которое не може-
поместиться в 16- или 32-разрядное слово после преобразования в целое число
эти команды устанавливали неверный бит в слово состояния F P O (исключена-
по точности вместо исключения по недопустимой операции). К чести компания
Intel, на этот раз она публично оповестила о существовании ошибки и предложи
ла программное средство для ее обхода, то есть поступила совершенно иначе, чем
в 1994 году.
3.9. Заключительные комментарии 307
Т а б л и ц а 3 .1 0 . Н а б о р ы о с т а л ь н ы х и н с т р у к ц и й M IP S -3 2 и п с е е д о -M IP S . /о зна чав-
од и на р ную (s) или д в о й н ую (d ) то ч н о сть FP-и н с тр у кц и й , s означав*
в е р си и с о зн а ко м — sig n e d и б е з зн а ка — u n sig n e d (и). В MIPS-32
такж е им ею тся FP-и н стр укц и и для ум нож ения и слож ения-вы читани*
( m a d d .//m s u b ./), о кр у гл е н и я в бо льш ую с т о р о н у — c e ilin g ( c e i l. / )
округления с отбрасы ванием —tru n c a te (tru n c f), округления — rounc
(ro u n d ./) и о б р а тно й величины — re cip ro ca l (re c ip ./). П одчеркивание
показы вает букву, вклю чаемую для представления указы ваем ого т и гг
данны х
Таблица 3 .1 0 (продолжение)
Остальные инструкции Назва Ф ор Назва Ф ор
Псевдо-MIPS
MIPS-32 ние мат ние мат
branch compare to zero likely bxzl store from floating point s .f rd.
(возможный условный переход (S или d) (сохранение из addr
при сравнении с нулем) FP-формата с одинарной
ИЛИ ДВОЙНОЙ точностью)
(х = It, le, gt, ge)
c Основные
Основные ин Наз Цело- Наз Цело- Спл.
плав. арифм. инстр. +
струкции MIPS вание ЧИСЛ. вание чм сл. ТО ЧКО Й
точкой MIPS-32
ноге word (со SW 7,6% 2 .0 % floating-point com c.x.d 0 ,0 % 0 .6 %
чинение слова) pare double
(сравнение
в FP-формате
с двойной точно
стью)
oad byte (за Ibu 3.7% 0 .1 % multiply (умноже mul 0 .0 % 0 ,2 %
грузка байта) ние)
store byte (со- sb 0 .6 % 0 ,0 % shift right arith sra 0.5% 0,3%
краиение байта) metic
(арифметичес
кий сдвиг вправо)
branch on equal beq 8 .6 % 2 ,2 % load half (загрузка Ihu 1,3% 0 ,0 %
(zero) (переход полуслова)
при равенстве)
branch on not bnc 8.4% 1,4% store half (сохра sh 0 ,1 % 0 ,0 %
equal (zero) нение полуслова)
(переход при не
равенстве)
jump and link jal 0,7% 0 ,2 % jump register Jr 1 ,1% 0 .2 %
(переход со (переход по реги
ссылкой) стру)
jump register jr 1 .1 % 0 ,2 %
(переход no
регистру)
set less than sit 9,9% 2.3%
(установка при
меньше чем)
set less than slti 3,1% 0,3%
immediate
(установка при
меньше чем не
посредственное
значение)
set less than un situ 3.4% 0 ,8 %
signed (установ
ка при меньше
чем. без знака)
set less than sltiu 1 ,1% 0,1%
imm. uns.
(установка при
меньше чем не
посредственное
значение, без
знака)
316 Глава 3. Арифметика для компьютеров
С плавающей
Поднабор инструкции Целочисленные
точкой
Основные инструкции MIPS 98% 31%
Основные арифметические инструкции MIPS 2% 66%
3.10. Упражнения
Никогда не сдавайтесь, никогда не сдавайтесь, не
когда, никогда, никогда, ни в чем, ни в большом,
ни в малом, ни в серьезных делах, ни в пустяках
У инст он Ч ер ч и лль, ш ко ла Харр<щ
Упражнение 3.1
В книге показано, как складывать и вычитать двоичные и десятичные числа. Н
при работе с компьютерами были весьма популярны и некоторые другие системы
счисления. Среди них была и восьмеричная (по основанию 8) система счисления
В следующей таблице приведены пары восьмеричных чисел.
А В
а 5323 2275
б 0147 3457
i А В
2762 2032
[в____ 2646 1066
3.1.4 [5] <3.2> Каким будет результат вычисления выражения А - В, если в нем
представлены восьмеричными числами 12-разрядные двоичные числа без знака?
Результат должен быть записан в восьмеричном виде. Покаж ите весь процесс
решения.
3.1.5 [5] <3.2> Каким будет результат вычисления выражения А ■ В, если в нем
представлены восьмеричными числами 12-разрядные двоичные числа, сохранен
ные в формате значений со знаком? Результат должен быть записан в восьмерич
ном виде. Покажите весь процесс решения.
3.1.6 [10] <3.2> Преобразуйте А в двоичное число. Ч то делает основание 8
(восьмеричное) привлекательным для системы счисления, представляющей зна
чения в компьютере?
Упражнение 3.2
Для представления значений в компьютерах также часто используется шестнад
цатеричная (по основанию 16) система счисления. Эта система приобрела более
высокую популярность по сравнению с восьмеричной. В таблице показаны нары
шестнадцатеричных чисел:
А В
в 0034 j 0017
6 ВАШ j 3617
3.2.1 [5] <3.2> Какова сумма А и В, если они представляют шестнадцатерич
ными числами 16-разрядные двоичные числа без знака? Результат должен быть
записан в шестнадцатеричном виде. Покажите весь процесс решения.
3.2.2 [5] <3.2> Какова сумма А и В. если они представляют шестнадцатерич
ными числами 16-разрядные двоичные числа в формате значений со знаком? Р е
зультат должен быть записан в шестнадцатеричном виде. Покажите весь процесс
р е ш ен и я .
3.2.3 [10] <3.2> Преобразуйте А в десятичное число, предположив, что это
число без знака. Повторите упражнение, предположив, что это число хранится
в формате значения со знаком. Покажите весь процесс решения.
318 Глава 3. Арифметика для компьютеров
А В
а ВА7С 241А
б AADF 47ВЕ
3.2.4 [5] <3.2> Каким будет результат вычисления выражения А - В. если в нем
представлены шестнадцатеричными числами 16-разрядные двоичные числа без
знака? Результат должен быть записан в шестнадцатеричном виде. Покажите весь
процесс решения.
3.2.5 [5) <3.2> Каким будет результат вычисления выражения А - В, если
в нем представлены шестнадцатеричными числами 16-разрядные двоичные чис
ла, сохраненные в формате значений со знаком? Результат должен быть записан
в шестнадцатеричном виде. Покажите весь процесс решения.
3.2.6 [10] <3.2> Преобразуйте А в двоичное число. Ч то делает основание U
(шестнадцатеричное) привлекательным для системы счисления, представляющей
значения в компьютере?
Упражнение 3.3
Переполнение возникает в том случае, если результат слиш ком велик, чтобы
быть точно представленным с помощ ью заданного конечного размера слова
Потеря значимости возникает в том случае, когда число слиш ком мало, чтобы
бы ть правильно представленным, например, при получении отрицательной:
результата при беззнаковых арифметических вычислениях. (Тот случай, когда
положительны й результат получается путем сложения двух отрицательных
целых чисел, также считается многими потерей значимости, но в данной книге
он рассматривается как переполнение). В следующей таблице показаны парь
десятичных чисел.
А В
а 69 90
в 10 2 44
Упражнение 3.4
Давайте более пристально посмотрим на умножение. Воспользуемся числами из
таблицы.
А В
в 50 23
б 66 04
3.4.1 [20] <3.3> На основе таблицы, подобной той. что показана на рис. 3.5,
вычислите произведение восьмеричных чисел А и В, представленных в виде 6-раз-
рядных целых чисел без знака, используя оборудование, показанное на рис. 3.2.
Покажите содержимое каждого регистра при каждом шаге вычисления.
3.4.2 [20] <3.3> На основе таблицы, подобной той, что показана на рис. 3.5,
вычислите произведение шестнадцатеричных чисел А и В, представленных
в виде 8-разрядных целых чисел без знака, используя оборудование, показан
ное на рис. 3.4. Покажите содержимое каждого регистра при каждом шаге вычис
ления.
3.4.3 [60] <3.3> Напишите программу на языке ассемблера MIPS, вычисля
ющую произведение целых чисел А и В без знака и использующую подходы, по
казанные на рис. 3.2.
320 Глава 3. Арифметика для компьютеров
А В
а 54 67
в 30 07
3.4.4 [30] <3.3> При умножении чисел со знаком одним из способов получения
правильного ответа является преобразование множителя и множимого в положи
тельные числа, сохранение исходных знаков, а затем соответствующая коррек
тировка окончательного значения. Па базе таблицы, подобной той, что показана на
рис. 3.5, вычислите произведение чисел А и В, используя оборудование, показанное
на рис. 3.2. Покажите содержимое каждого регистра при каждом шаге вычисления
и включите шаг, необходимый для получения результата с правильным знаком. До
пустим, что А и В хранятся в двоичном 6-разрядном формате значений со знаком
3 .4 .5 [30] <3.3> При сдвиге значения регистра на один разряд вправо есть
несколько путей решения вопроса о том, каким должен быть новый вводимый
разряд. Он может всегда быть нулем или всегда быть единицей, или вводимый раз
ряд может быть тем самым разрядом, который был вытолкнут из правой стороны
(при этом сдвиг превращается в циклический), или же просто может сохраниться
значение самого левого разряда (при так называемом арифметическом сдвиге
вправо, поскольку в этом разряде хранится знак сдвигаемого числа). Используя
таблицу, показанную на рис. 3.5, вычислите произведение двоичных 6-разряднь.
чисел Л и В с дополнением до двух, получаемое при использовании оборудования
показанного на рис. 3.4. Сдвиг вправо должен быть осуществлен с использованием
операции арифметического сдвиг а вправо. Учтите, что для этого описанный в тек
сте алгоритм нужно немного скорректировать, в частности, при отрицательной
множителе все может происходить иначе. Подробности можно найти в Интернете
Покажите содержимое каждого регистра при каждом шаге вычисления.
3.4.6 [60] <3.3> Напишите программу на языке ассемблера MIPS, которая вы
числяет произведение целых чисел А и В со знаком. Сообщите, используются для
этого подходы, заданные в упражнении 3.4.4 или в упражнении 3.4.5.
Упражнение 3.5
По многим причинам появляется желание создать более быстродействующ^
устройство для умножения. Для достижения этой цели использовалось множестве
различных подходов. В следующей таблице столбец А представляет ширину цело:
числа в двоичных разрядах, а столбец В —количество единиц времени (time u n its
tu), затрачиваемых на шаг операции.
Упражнение 3.6
В этом упражнении будут рассмотрены два других способа повышения произво
дительности умножения, основанные в первую очередь на осуществлении большего
количества сдвигов и меньшего количества арифметических операций. В таблице
показана пара шестнадцатеричных чисел:
А В
a 24 с97
б 41 18
А В
а 42 36
б 9F 0Е
322 Глава 3. Арифметика для компьютеров
Упражнение 3.7
Давайте более подробно рассмотрим деление. В таблице будут использовать •
восьмеричные числа:
А В
а 50 23
б 25 44
3.7.1 [20] <3.4> Используя таблицу, подобную той, что показана на рис. 35
вычислите результат деления А на В с использованием оборудования, показа-
ного на рис. 3.7. Покажите содержимое каждого регистра при каждом шаге, п;
условии, что А и В представлены 6-разрядными двоичными целыми числами &
знака.
3.7.2 [30] <3.4> Используя таблицу, подобную той, что показана на рис. 3.9, въ
числите результат деления А на В с использованием оборудования, показанного -.
рис. 3.10. Покажите содержимое каждого регистра при каждом шаге, при условна
что А и В представлены 6-разрядными двоичными целыми числами без знака. Эт
алгоритм требует несколько иного подхода, чем тот, что показан на рис. 3.8. Д,
выполнения этого упражнения нужно как следует подумать, пронести один-два эй
перимента или же выйти в Интернет, чтобы определить, как правильно справить
с поставленной задачей. (Подсказка: одно из возможных решений требует испо.-з
зевания того факта, что оборудование, показанное на рис. 3.10, подразумевает, ч-
регистр остатка может быть сдвинут в любом направлении).
3.7.3 [60] <3.4> Напишите программу на языке ассемблера для вычислен» -
результата деления А на В с использованием подхода, показанного на рис. 3.7, in
условии, что А и В представлены 6-разрядными двоичными целыми числами г-
знака.
3.10. Упражнения 323
3.7.4 [30] <3.4> Используя таблицу, подобную той, что показана на рис. 3.9, вы-
- лите результат деления А на В с использованием оборудования, показанного на
■ 3.7. Покажите содержимое каждого регистра при каждом шаге, при условии, что
л В представлены 6-разряднмми двоичными целыми числами в формате значе-
лй со знаком. Не забудьте включить способ вычисления знака частного и остатка.
3.7.5 [30] <3.4> Используя таблицу, подобную той. что показана на рис. 3.9, вы
йдите результат деления А на В с использованием оборудования, показанного на
am. 3.10. Покажите содержимое каждого регистра при каждом шаге, при условии,
тто А и В представлены 6-разрядиыми двоичными целыми числами в формате
.-начений со знаком. Не забудьте включить способ вычисления знака частного
■остатка.
3.7.6 [60] <3.4> Напишите программу на языке ассемблера MIPS для вычисле
на результата деления А на В с использованием подхода, показанного на рис. 3.10,
три условии, что А и В являются целыми числами со знаком.
Упражнение 3.8
На рис. 3.8 показан алгоритм деления с восстановлением остатка, поскольку когда
при вычитании делителя из остатка получается отрицательный результат, делитель
нова складывается с остатком (восстанавливая, таким образом, свое значение).
Но разработаны и другие алгоритмы, исключающие дополнительное сложение.
Многочисленные ссылки на эти алгоритмы можно легко найти в Интернете. Ис
следование этих алгоритмов мы проведем с использованием нар восьмеричных
чисел, приведенных в таблице:
А В
в 75 12
б 5?____________________________________[37___________________________________
3 .8 .1 130| <3.4> Используя таблицу, подобную гой, которая показана на рис. 3.9,
вычислите результат деления А на В, используя деление без восстановления остат
ка. Покажите содержимое каждого регистра при каждом шаге, при условии, что А
и В представлены 6-разрядными двоичными целыми числами без знака.
3.8.2 [60] <3.4> Напишите программу на языке ассемблера MIPS, вычисля
ющую результат деления А на В с использованием деления без восстановления
остатка, при условии, что А и В представлены 6-разрядными двоичными целыми
числами со знаком (с дополнением до двух).
32 4 Глава 3. Арифметика для компьютеров
А В
а 17 14
б 70 23
3.8.4 [30] <3.4> Используя таблицу, подобную той, которая показана на рис 3
вычислите результат деления А на В, используя бездействующее (nonperforminc
деление. Покажите содержимое каждого регистра при каждом шаге, при условии
что А и В представлены 6-разрядными двоичными целыми числами без знака.
3.8.5(60] <3.4> Напишите программу на языке ассемблера MIPS для вычнс. -
ния результата деления А на В с использованием бездействующего (nonperfornnnt
деления, при условии, что А и В представлены 6-разрядными двоичными целы*
числами со знаком с дополнением до двух.
3.8.6 [60] <3.4> Как можно сравнить производительность деления без воссга
новлсния остатка и бездействующего деления? Продемонстрируйте такое сраьг
ние, показав количество шагов, необходимых для вычисления результата деленв
А на В с использованием каждого метода, при условии, что А и В представлен^
6-разрядными двоичными целыми числами (в формате значения со знаком). П:
этом допустимо написание программы для выполнения бездействующего делен*
и деления с восстановлением остатка.
Упражнение 3.9
На деление приходится тратить столько времени и сил, что в руководстве по опт.
мизации для языка Фортран на компьютере CRAY ТЗЕ утверждалось, что «лучик
стратегией для деления является его обход при любой предоставляющейся д.-
этого возможности». В данном упражнении рассматриваются следующие разн-.
стратегии для выполнения операций деления.
а восстанавливающее деление
б SRT-деление
/пражнение 3.10
: архитектуре фон Неймана группы битов не имеют сами по себе никакого предо-
4 * деленного значения. То, что представляет собой комбинация разрядов, целиком
—лисит от того, как она используется. В таблице показана комбинация разрядов,
тображенная в шестнадцатеричной записи.
Л ОХ 24А 60004
б OxAFBFOOOO
3.10.1 [5) <3.5> Какое десятичное число представляет эта комбинация разрядов,
если она является целым числом с дополнением до двух? Или если она являегся
делым числом без знака?
3.10.2 [10] <3.5> Если эта комбинация разрядов будет помешена в регистр
команд (Instruction Register), то какая M IPS-инструкция будет выполнена?
3.10.3 [10) <3.5> Какое десятичное число представляет эта комбинация раз
рядов, если она является числом с плавающей точкой? Используйте стандарт
IEEE 754.
В следующей таблице приведены десятичные числа:
-1609,5
- 9 3 8 .8 1 2 5
Упражнение 3.11
В стандарте чисел с плавающей точкой IЕЕЕ 754 экспонента хранится в формате со
«смещением» (которое еще называют «Excess-N*, то есть «с избытком N»). Такой
подход был избран потому, что хотелось, чтобы набор из всех нулей был по воз
можности как можно ближе к нулю. Благодаря использованию скрытой единицы,
если представлять экспоненту в формате с дополнением до двух, то набор из всех
нулей на самом деле будет числом 1! (Вспомним, что любое число в степени нуль
равно единице, то есть 1.0е - 1.) Существует множество других аспектов стандарта
IEEE 754, призванных повысить скорость функционирования аппаратных бло
ков, предназначенных для работы с числами с плавающей точкой. Но на многих
старых машинах вычисления с плавающей точкой осуществлялись программным
способом, и поэтому для них использовались другие форматы. В таблице показаны
десятичные числа:
а 5.00736125* 10''
в -2,691650390625* 10 г
326 Глава 3. Арифметика для компьютеров
А В
а -1 2 7 8 * 103 -3,9 0 6 2 5 * 10-’
б 2,3109375* 10 6.391601562* 10
3.11.4 |20] <3.5> Вычислите на бумаге сумму чисел А и В, при условии, что А
В представлены в 16-разрядном формате NVIDIA, описанном в упражнении 3.1!
(а также в тексте). Используйте по одному разряду защиты, округления и наг:
минания и произведите округление до ближайшего четного числа. Покажите ь
шаги вычисления.
3.11.5 [60] <3.5> Напишите программу на ассемблере MIPS, вычисляют} *
сумму чисел А и В, при условии, что они хранятся в 16-разрядном формате NVII
IA, описанном в упражнении 3.11.2 (а также в тексте). Используйте по одному р*
ряду защиты, округления и напоминания и произведите округление до ближайше
четного числа.
3.11.6 [60] <3.5> Напишите программу на ассемблере MIPS, вычисляют »*
сумму чисел А и В, при условии, что они хранятся в формате, описанном в упрад
3.10. Упражнения 327
Упражнение 3.12
Умножение чисел с плавающей точкой является куда более сложным делом, чем
глажение таких чисел, но трудности этих двух операций меркнут в сравнении
трудностями деления.
А В
а 5 ,6 6 0 1 5 6 2 5 х Ю 8 ,5 9 3 7 5 х 1 0 е
6 6 .1 8 х 10- 5 ,7 9 6 8 7 5 х 1 0 ’
А _
а 3 ,2 6 4 х 10J 6 ,5 2 х Ю ?
б - 2 ,2 7 7 3 4 3 7 5 х 10= 1 .1 5 4 3 7 5 х 105
328 Глава 3 Арифметика для компьютеров
3.12.4 [30] <3.5> Разделите на бумаге число А на число В. Покажите все шал
необходимые для получения ответа. Предположите наличие разрядов зашиты
округления и напоминания и воспользуйтесь ими в случае необходимости. За
пишите итоговый ответ в 16-разрядном двоичном формате с плавающей точно*
и в десятичном формате и сравните десятичный результат с тем, который буд»
получен на калькуляторе.
У п р а ж н е н и е 3 .1 3
Операции, выполняемые над целыми числами с фиксированной точкой, ведут себ*
предсказуемо —для них соблюдаются переместительные, ассоциативные и pacnj*
делительные законы. Но все эти законы не всегда работают с числами с плавающе
точкой. Сначала посмотрим на ассоциативный закон. В таблице показан н а 6 :
десятичных чисел:
A В C
a - 1 . 6 3 6 0 x 10* 1 ,6 3 6 0 x 10* 1 ,0 x 1 0 :
б 2 ,8 6 5 6 2 5 x 10 4 ,1 4 0 6 2 5 x 10 1 ,2 1 4 0 6 2 5 x 10
3.13.3 [10] <3.2, 3.5, 3.6> Основываясь на ответах, полученных при выпол
зши упражнений 3.13.1 и 3.13.2, ответьте на вопрос, справедливо ли равенство
\ + В ) + С - А + (В + С)?
Упражнение 3 .14
Ассоциативный закон нс единственный из несоблюдаемых в отношении чисел
с п л а в а ю щ е й точкой. Существуют и другие странности. В таблице показан набор
десятичных чисел:
А В С
а 1 ,5 2 3 4 3 7 5 * 10 ' 2 .0 7 0 3 1 2 5 * 10 ’ 9 , 9 6 8 7 5 * 1 0'
б - 2 , 7 8 9 0 6 2 5 * 10' - 8 , 0 8 8 * 103 1 . 0 2 1 6 * 10-
3.14.1 [30] <3.2, 3.3, 3.5, 3.6> Вычислите на бумаге А х (В + С), при условии,
что А. В и С хранятся в 16-разрядном формате NVIDIA, описанном в упражнении
3.11.2 (а также в тексте). Используйте по одному разряду зашиты, округления и на
поминания и произведите округление до ближайшего четного числа. Покажите все
шаги и запишите ответ в 16-разрядном двоичном формате для чисел с плавающей
точкой и в десятичном формате.
3.14.2 [30] <3.2,3.3,3.5,3.6> Вычислите на бумаге (А х В) + (А х С), при усло
вии. что А, В и С хранятся в 16-разрядном формате NVIDIA, описанном в упражне
нии 3.11.2 (а также в тексте). Используйте по одному разряду защиты, округления
330 Глава 3. Арифметика для компьютеров
А В
а 1 /3 3
о -1 /7 7
3.14.4 [10] <3.5> Используя формат для чисел с плавающей точкой IEEE 754.
запишите комбинацию двоичных разрядов, представляющую число А. Можно ли
точно представить число А?
3.14.5 [10] <3.2, 3.3, 3.5, 3.6> Какой результат будет получен при сложении
числа А с самим собой В раз? Чему будет равно А х В? Будут ли два полученных
значения одинаковыми? Какими они должны быть?
3.14.6 [60] <3.2, 3.3, 3.4, 3.5, 3.6> Что получится, если извлечь квадратный ко
рень из В, а затем умножить это значение само на себя? Что вы должны получить'
Выполните это упражнение для чисел как с одинарной, так и с двойной точностью
(Напишите программу для выполнения этих вычислений.)
У п р а ж н е н и е 3 .1 5
Использование в мантиссе двоичных чисел не является обязательным. В ком
пьютерах IBM в некоторых форматах чисел с плавающей точкой используютс я,
к примеру, числа по основанию 16. Возможны также и другие подходы, у каждой:
из которых свои сильные и слабые стороны. В таблице показаны дроби для прел
ставления их в разных форматах чисел с плавающей точкой:
а 1 /2
б 1 /9
П о б о л ь ш о м у счету, н е с у щ е с т в е н н ы х д е т а л е й не
сущ ествует.
Ф р п ч ц у ж к а я поговорка
4.1 . Введение
В главе 1 говорилось о том. что производительность компьютера определяете*
тремя ключевыми факторами: количеством инструкций, продолжительность*
тактового цикла и количеством тактовых циклов на инструкцию (C PI). В гла
ве 2 говорилось о том, что количество инструкций, требуемое для той или иной
программы, определяется компилятором и архитектурой набора инструкций
4.1. Введение 333
A t e . 4 .1 . А б с т р а к т н о е п р е д с т а в л е н и е р е а л и з а ц и и п о д н а б о р а и н с т р у к ц и й M IP S , п о к а
зывающее гл ав н ы е ф у н к ц и о н а л ь н ы е б л о ки и о с н о в н ы е с в я з и м е ж д у н и м и . Выполнение
-сех инструкций начинается с использования счетчика команд (PC) для получения адреса ин-
гтрукции в памяти, хранящей инструкции. После извлечения инструкции поля этой инструкции
нределяют используемые ею операнды, находящиеся в регистрах. После извлечения операндов
.*3 регистров они могут быть обработаны для вычисления адреса памяти (для загрузки или со
мнения), для вычисления арифметического результата (для целочисленных арифметико-ло-
ических инструкций) или для сравнения (для инструкций условного перехода). Если инструкция
относится к классу арифметико-логических, результат из АЛУ должен быть записан в регистр.
Если инструкция выполняет операцию загрузки или сохранения, результат из АЛУ используется
э качестве адреса для сохранения значения из регистров либо для загрузки значения из памяти
врегистры. Результат из АЛУ или из памяти записывается обратно в файл регистров’ . Условные
переходы требуют использования выхода АЛУ для определения адреса следующей инструкции,
который поступает либо из АЛУ (когда PC и смещение условного перехода складываются), либо
из сумматора, который увеличивает текущее значение PC на 4. Линии, связывающие функцио
нальные блоки, представляют собой шины, по которым передаются сразу несколько сигналов.
Стрелки используются для демонстрации направления информационных потоков. Поскольку
сигнальные магистрали могут пересекаться, наличие соединений в местах их пересечения от
мечено точками
Самопроверка
Сколько из пяти классических компонентов компьютера, показанных в начал
главы, включают в себя схемы, представленные на рис. 4.1 и 4.2?
4.2. Соглашения по логическому проектированию 337
Ьлок
управления.
Рис. 4.2. Основная реализация поднабора инструкций MIPS, включающая вся необхо
дим ы е мультиплексоры и шины управления. Верхний мультиплексор («Мих») управляет
значением, заменяющим значение PC (PC + 4 или адрес условного перехода); мультиплексор
управляется логическим элементом, который осуществляет операцию «И» над выходом АЛУ
«Нуль», и сигналом управления, свидегельстаующим о том, что выполняется инструкция условно
го перехода. Средний мультиплексор, чей выход возвращается к файлу регистров, используется
для управления выходом АЛУ (в случае выполнения арифметико-логической инструкции) или
выходом памяти данных (в случае загрузки) с целью записи в файл регистров. И наконец, самый
нижний мультиплексор используется для определения того, откуда АЛУ получит второй ввод:
из регистров (для арифметико-ло1 ической инструкции или инструкции условного перехода) или
из поля смещения (offset) инструкции (для инструкции загрузки или сохранения). Добавленные
шины управления имеют вполне понятное назначение и определяют операцию, выполняемую
АЛУ, а также необходимость чтения (или записи) данных и выполнения операции записи в реги
стры. Чтобы шины управления были заметнее, они выделены серым цветом
338 Глава 4. Процессор
Метод синхронизации
Метод синхронизации определяет, когда сигналы должны считываться, а когда
записываться. Определение моментов чтения и записи играет важную роль, по
скольку если сигнал записывается в то же время, когда и считывается, считывае
мое значение может соответствовать старому значению, только что записанному
значению или даже комбинации этих двух значений! Компьютерные конструкции
не могут мириться с такой непредсказуемостью. Метод синхронизации как раз
и разработан для обеспечения предсказуемости.
Чтобы упростить ситуацию, давайте допустим, что мы пользуемся методом
синхронизации по фронтам импульсов (edge-triggered clocking). Этот метод озна
чает, что любые значения, сохраненные в элементе последовательной логики, об
новляются только при прохождении фронта синхроимпульса. Поскольку хранить
значения данных могут только запоминающие элементы, на входы любого набора
комбинационной логики должны поступать сигналы от набора запоминающих
элементов, а выходные сигналы должны записываться в набор запоминающих
йлементов.
Вводом являются значения, которые были записаны во время предыдущего
тактового цикла, а выводом —значения, которые могут использоваться во время
следующего тактового цикла.
На рис. 4.3 показаны два запоминающих элемента, работающие в одном такто
вом цикле: все сигналы должны передаваться от запоминающего элемента 1 через
блок комбинационной логики к запоминающему элементу 2 за время одного так
тового цикла. Продолжительность тактового цикла определяется временем, не
обходимым для того, чтобы сигнал достиг запоминающего элемента 2.
Чтобы не усложнять картину, здесь не показан сигнал управления, иницииру
ющий запись, тогда как запись в запоминающий элемент ведется при каждом ак
тивном фронте синхроимпульса. В противоположность этому, если запоминающий
элемент не обновляется по каждому синхроимпульсу, требуется конкретный сигнал
управления, инициирующий запись. Синхроимпульс и управляющий сигнал за
писи являются входными сигналами, и содер
жимое запоминающего элемента изменяется
только тогда, когда выставлен управляющий Метод синхронизации
Подход, используемый для определения
сигнал записи и прошел фронт синхроимпульса. момента достоверности и стабильности
Метод синхронизации но фронту импульса данных относительно синхроимпульсов
позволяет читать содержимое регистра, пере
правлять значение через комбинационную ло Синхронизация по фронтам импульсов
Схема синхронизации, е которой все со
гику и записывать значение в этот же регистр стояния изменяются по фронту синхроим
за один тактовый цикл. Обобщенный пример пульса.
показан на рис. 4.4. Неважно, на каком имен
Сигнал управления
но фронте синхроимпульса, нарастающем или Сигнал, используемый для выбора, осу
ниспадающем, мы предположим проведение ществляемого мультиплексором, или для
записи, поскольку входы комбинационного ло инициирования опершими функционально
гического блока не могут изменяться кроме как го блока; является противоположностью
-сигналу данных», содержащему информа
по выбранному фронту синхроимпульса. При цию, с которой работает функциональный
методе синхронизации по фронту импульса блок
340 Глава 4. Процессор
Тактовым цикл------ ■
Рис. 4.3. Комбинационная логика, запоминающие элементы и синхронизация тесно
связаны друг с другом. В синхронной цифровой системе синхроимпульс определяет, когде
элементы, сохраняющие состояние, запишут значения во внутреннее хранилище. Любые входные
данные запоминающего элемента должны получить стабильное значение (то есть должно быт-
получено значение, не изменяющееся до следующего фронта синхроимпульса), пока активны;
фронт синхроимпульса не вызовет обновление состояния. Все запоминающие элементы, ттассма
триваемые в данной тлаве, включая память, считаются запускаемыми по фронту синхроимпульсе
Рис. 4.4. Метод синхронизации по фронту импульса позволяет шести чтение запомина
ющего элемента и запись а него за один и тот же тактовый цикл, не создавая при этом
соревнования, которое может привести к неопределенности в значениях данных. Раз.
меется, тактовый цикл должен быть достаточно продолжительным, чтобы входные значение
стабилизировались до поступления активного фронта синхроимпульса Внутри самого синхро
импульса никакой ответной реакции не происходит, поскольку обновление содержимого запс
минающего элемента происходит по его фронту. Если бы была возможна обратная реакция, этг
конструкция не смогла бы работать правильно. Наши конструкции в этой и в следующей лае-
основаны на методе синхронизации по фронту импульса, и на структурах, похожих на показанную
на данном рисунке
Самопроверка
Определите правдивость или ложность следующего утверждения: поскольку файл
регистров за один тактовый цикл подвергается чтению и записи, любые операци-
нные блоки MIPS, использующие запись по фронту синхроимпульса, должны
меть более одной копии файла регистров.
Уточнение. Существует также 64-разрядная версия MIPS-архитектуры, и, что вполне
естественно, большинство каналов в ее реализации будут иметь ширину 64 разряда.
К тому же мы используем термины «выставленный» и «невыставленный», потому что
бывает так, что единица представляет собой логически высокий уровень, а временами
она может представлять и логически низкий уровень.
Адрес
инструкции
Инструкция
Память
инструкций
выполнения всех этих требований показан на рис. 4.7, а: нам нужны всего четыре
•хода (три для номеров регистров и один для данных) и два выхода (оба для дан
ных). Входы для номеров регистров имеют ширину 5 разрядов для указания одно-
-г>из 32 регистров, а вход и два выхода для данных имеют ширину 32 разряда.
С ^5 О пчцация АЛУ
Считываемый
регистр 1 Считанные
Номера , ^5 Считываемый данные 1
регистров регистр 2
Файл > Данные
5 Записываемый регистров
141 регистр Считанные
Записываемые данные 2
Данные-^
данные
,\ ii f u l l П С Г Е .
Чтение ит памяти
">т*с 4 .В. Два блока, необходимые для реализации загрузок и сохранений в дополнение
< файлу регистров и АЛУ с рис. 4 .7 , — память данных и блок расширения знака. Блок
-амяти является запоминающим устройством с входами для адреса и для записываемых дан-
— > и одним выходом для результата чтения данных У это1 о блока имеются отдельные выводы
правления, хотя в конкретном тактовом цикле подтверждение может быть выставлено только на
лном из них. Блок памяти нуждается в сигнале чтения, поскольку, в отличие от файла регистров,
• -енис- значения с использованием неправильного адреса, как будет показано в главе 5 . может
вызвать проблемы Блок расширения знака имеет 16-разрядный вход, данные с которого превра
щаются при расширении знака в 32-разрядный результат, выставляемый на выходе (см. главу 2)
Мы предполагаем, что запись данных в память осуществлиегся по фронту синхроимпульса На
:змом деле у стандартных микросхем памяти есть сигнал разрешения записи, используемый
-эй этой операции. Хотя разрешение записи не управляется по фронту синхроимпульса, наша
• омструкция, управляемая по этому фронту, может быть легко приспособлена для работы с на
стоящими микросхемами памяти
Целевой адрес
условного перехеш
16
-Ч -
Покажите, как можно создать исполнительную часть операционного блока для выполнения
инструкции обращения к памяти и арифметико-логических инструкций, использующих
единый файл регистров и единое ЛЛУ для работы с обоими типами инструкций, добавив
любое количество необходимых для этого мультиплексоров.
Ответ
Для создания операционного блока с единым файлом регистров и единым АЛ У нужно обе
спечить поддержку двух разных источников для второго входа АЛ У, а также двух разны
источников для данных, хранящихся в файле регистров. Поэтому один мультиплексор
помещается на входе АЛУ, а второй —на входе данных файла регистров, Исполнительна*
часть объединенного операционного блока показана на рис. 4.10.
Рис. 4.10. Операционный блок для выполнения инструкций, предназначенных для работы
с памятью, и инструкций R-типа. В этом примере показано, как единый операционный бг:-
может быть собран из частей, показанных на рис. 4.7 и 4.8 путем, добавления мультиплексоров
Исходя из описания упражнения, здесь нужны два мультиплексора
Теперь можно объединить все составные части для создания единого операци
онного блока для МI PS-архитектуры, сложив вместе операционный блок для из
влечения инструкций (рис. 4.6), операционный блок для выполнения инструкции
обращения к памяти и инструкций R-типа (рис. 4.10) и операционный блок для
выполнения условных переходов (рис. 4.9). На рис. 4.11 показан омерапионныг
блок, полученный за счет объединения отдельных составных частей. Инструкция
условного перехода использует основное АЛУ для сравнения регистровых опе
рандов, поэтому сумматор с рис. 4.9 можно сохранить для вычисления целевой;
адреса условного перехода. Здесь потребуется еще один мультиплексор для выбора
между адресом инструкции, непосредственно следующей за текущей инструкцией
(PC + 4), и целевым адресом условного перехода, который записывается в PC.
После того как комплектование этого единого операционного блока завершен*
к нему можно д о б а в и т ь блок управления. Этот блок должен воспринимать входные
4.3. Создание операционного блока 349
Самопроверка
1 Что из нижеперечисленного справедливо для инструкции загрузки? Ответьте
применительно к операционному блоку, изображенному на рис. 4.10.
а) MemtoReg должен быть выставлен для извлечения данных из памяти и их
последующей отправки в файл регистров.
б) MemtoReg должен быть выставлен для правильного выбора регистра на
значения и последующей отправки его значения в файл регистров.
в) Для загрузки выставлять MemtoReg не нужно.
350 Глава 4. Процессор
Управление арифметико-логическим
устройством
В АЛ У для M IPS-архитектуры определены шесть следующих комбинаций, пред
назначенных для четырех управляющих входов:
Поле 4 п г г address
Позиция разрядов 31:26 25:21 20:16 ISO
в) инструкция условного перехода
Рис. 4.12. Три класса инструкций (R-типа, загрузки и сохранения, условного перехода),
использующие разные форматы инструкции. Инструкции безусловного перехода используют
еще один формат, который вскоре будет рассмотрен, а) Формат инструкций R-типа, у которых
значение opcode всегда равно 0. У этих инструкций имеется три регистровых операнда: rs, rt
и rd. Поля rs и rt являются полями источника, a rd является полем назначения. Функция АЛУ пред
ставлена полем funct и декодируется с помощью блока управления АЛУ. конструкция которого
была рассмотрена в предыдущем разделе. К реализуемым нами инструкциям R-типа относятся
сложение - add. вычитание — sub, И — AND, ИЛИ — OR и установка, если меньше чем — sit. Поле
shamt используется только для сдвигов; в данной главе оно будет проигнорировано, б) Формат
инструкций загрузки (opcode = 35,0) и сохранения (opcode = 4310). Регистр, указанный в поле rs
является базовым, и его значение складывается с 16-разрядным полем для формирования
адреса памяти. Для инструкций загрузок регисгр, указанный в поле rt, является регистром-
получателем загружаемого значения, Для инструкций сохранений регистр, указанный в поле
rt, является регистром-источником, чье значение должно быть сохранено в памяти. Формат
инструкции для условного перехода по равенству (opcode = 4), Регистры, указанные в полях rs
и rt, являются регистрами-источниками, проходящими тест на равенство. 16-разрядное поле
адреса подвергается расширению знака, сдвигу и добавляется к значению счетчика команд (PC)
для вычисления целевого адреса условного перехода
Эти девять сигналов управления (семь из табл. 4.3 и два для AUJOp) теперь м»
гут быть выставлены на основании шести входных сигналов в блоке управления
являющихся разрядами поля opcode с 31 по 26. На рис. 4.14 показан операционный
блок с блоком управления и управляющими сигналами.
Перед тем как составить для блока управления систему уравнений или таблиц}
истинности, нужно попытаться неформально определить функцию управления
Поскольку выставление сигналов на линии управления зависит только от со
держимого поля opcode, мы определяем для каждого из значений opcode, должен ли
сигнал управления иметь значение 0.1 или безразличное значение (X). На рис. 4.15
определен порядок сигналов управления для каждого значения поля opcode; эта
информация непосредственно следует из данных, отображенных в табл. 4.1, 4.3
и на рис. 4.14.
4.4. Простая схема реализации 357
э абота о п е р а ц и о н н о го б л о ка
всходя из информации, предоставленной в табл. 4.3 и на рис. 4.15, мы можем раз-
рм'ютать логику блока управления, но перед этим давайте посмотрим на то, как
я о тр у к ц н я использует операционный блок. На нескольких следующих изобра
жениях будет показан поток данных, проходящих через операционный блок и свя
тимых с выполнением трех разных классов инструкций. На каждом из них будут
■ .делены выставленные сигналы управления и активные элементы операционного
- >ка. Обратите внимание на то, что мультиплексор, на входе которого выставлен
а гнал 0, работает предопределенным образом, даже если его линия управления
*= выделена. Многоразрядные сигналы управления выделены в том случае, если
выставлен любой из входящих в состав сигналов.
Рис. 4.14. Простейший операционный блок с блоком управления. На вход блока управлении
подается значение 6 -разрядного поля opcode, взятое из инструкции. Выходы блока управления
состоят из трех одноразрядных сигналов, используемых для управления мультиплексорами
(RegDst. ALUSrc и MemtoReg), трех сигналов для управления процессами чтения и записи файла
регистров и памяти данных (RegWnte, MemRead и MemWrite) и одноразрядного сигнала, исполь
зуемого для определения возможного условного перехода (Branch), и двухраэрядного сигнала
для АЛУ (ALUOp). Для объединения сигнала управления условным переходом и АЛУ-выхода Нуль
(Zero) используется элемент И (AND); выход этого элемента управляет выбором следующего
значения PC. Обратите внимание на то. что теперь PCSrc является получаемым сигналом, а не
одним из тех сигналов, который приходит непосредственно из блока управления. Поэтому на
следующих изображениях название сигнала мы пропускаем
358 Глава 4. Процессор
R-формат 1 0 0 1 0 0 0 1 0
lw 0 1 1 t 1 0 0 0 0
sw X 1 X 0 0 1 0 0 0
beq X 0 X 0 0 0 1 0 1
На рис. 4.16 показана работа операционного блока при выполнении такой ин
струкции R-типа, как adc St 1, $t2. $13. Хотя все происходит за один тактовый цикл,
можно говорить о четырех шагах выполнения инструкции; эти шаги выстроены за
счет потока информации;
1. Извлечение инструкции и приращение значения счетчика команд (PC).
2. Считывание из регистра файлов значений $t2 и $t3; во время выполнения дан
ного шага кроме этого происходит вычисление основным блоком управления
значений, выставляемых на линиях управления.
3. Работа АЛУ с данными, считанными из файла регистров, с использованием кода
функции (разряды 5:0, поле fund инструкции) для генерации функции АЛУ.
4. Запись результата, полученного из АЛУ, в файл регистров с использованием
разрядов 15:11 инструкции для выбора регистра-получателя ($tl).
Аналогично этому можно проиллюстрировать выполнение инструкции загрузки
слова (load word):
lw $tl. offset($t2)
4.4. Простая схема реализации 359
Рис. 4.16. Операционный блок в работе при выполнении инструкций R-типа, таких как
add $t1 ,St2,$t3. На рисунке выделены активные пинии управления, части операционного блока
и соединения
360 Глава 4. Процессор
Входы Ор5 0 1 1 0
Ор4 0 0 0 0
ОрЗ 0 0 1 0
Ор2 0 0 0 1
Ор1 0 1 1 0
ОрО 0 1 1 0
Выходы RegDst 1 0 X X
ALUSrc 1 1 0
MemtoReg 0 1 X X
RegWrite 1 1 0 0
MemRead 0 1 0 0
Mem Write 0 1 0
Branch 0 0 0 1
ALUOpI 1 0 0 0
ALUOpO 0 0 0 1
Упражнение
Реализация безусловных переходов
На рис. 4.14 показана реализация многих инструкций, рассмотренных в главе 2. Но пропу
щен один класс инструкций —инструкция безусловного перехода Расширьте операцион
ный блок и блок управления, которые показаны на рис. 4.14, чтобы включить инструкцию
безусловного перехода. Опишите, как выставить сигнал на любой новой линии управления.
4.4. Простая схема реализации 363
Рис. 4.20. Формат инструкции для безусловного перехода (opcode = 2). Адрес назначения
для инструкции безусловного перехода формируется путем объединения старших 4 разрядов
текущего значения PC - 4 с 26-разрядным полем адреса (address) инструкции безусловного
перехода и добавления 0 0 в качестве двух самых младших разрядов
Рис. 4.21. Простые блок управления и операционный блок, расширенные для выполнения
инструкции безусловного перехода. Дополнительный мультиплексор (в верхней части спра
ва) используется для выбора между целевым адресом безусловного перехода и либо целевым
адресом условного перехода, либо адресом инструкции, непосредственно следующей за теку
щей инструкцией. Этот мультиплексор управляется сигналом jump. Целевой адрес безусловного
перехода получается за счет сдвига младших 26 разрядов инструкции безусловного перехода
на 2 разряда влево, что на самом деле приводит к добавлению в самые младшие разряды зна
чения 00 и последующего объединения старших 4 разрядов PC + 4 в качестве самых старших
разрядов, из чего складывается 32-разрядный адрес
Самопроверка
Посмотрите на сигналы управления, показанные на рис. 4.19. Можно ли объеди
нить некоторые из них? Могут ли некоторые выходы управляющих сигналов быть
заменены обратным значением других сигналов? (Подсказка: обратите внимание на
безразличные состояния.) Если да, то можно ли использовать один сигнал вместо
другого без добавления инвертора?
Время 10 11 12 13 14
Порядок Р=ГТ~ГТ
выполнения
задач
А
Б
В ЯЭ « 1
Г
время 7 8 9 10 11 12 13 14
Порядок 1
выполнения
задач
А 1суМ |
ю дй|
т Щ
Д »1
Рис. 4.22. Аналогия конвейеризации на примере прачечной. Энн, Брайан, Кэти и Дон нако
пили белье для стирки, сушки, складывания и переноса в шкаф. Для этой задачи каждая стадия:
стирка, сушка, складывание и перенос на место хранения — занимает 30 минут. Последователь
ная работа прачечной займет 8 часов для 4 загрузок, а конвейеризированная — 3,5 часа. Мы по
казали конвейерную стадию для разных 3ai руэок путем демонстрации копий четырех ресурсов
на двумерной шкале времени, но на самом деле мы располагаем только одним экземпляром
кажда о ресурса
Упражнение
Сравнение производительности одиогактной и конвейерной реализации
Чтобы конкретизировать дискуссию, давайте создадим конвейер. В данном упражнении и по
всей остальной части главы мы ограничим наше внимание восемью инструкциями: загрузки
слова (load word (1*)), сохранения слова (store w'ord (sw)). сложения (add (ado)), вычитания
(subtract (sub)), операции И (AND (arcl)), операции ИЛИ (OR (or)), операции установки,
если меньше чем (set less than (sit)) и операции условного перехода по равенству (branch
on equal (5eq)).
Сравните среднее время выполнения инструкций при однотактной реализации, в которой
выполнение каждой инструкции занимает один тактовый цикл, и при конвейерной реали
зации. Рабочее время для основных функциональных блоков в этом упражнении составляет
200 пикосекунд (пс) для обращения к памяти, 200 пс для операции АЛ У и 100 пс для чте
ния или записи файла регистров. В однотактной модели выполнение каждой инструкции
368 Глава 4. Процессор
занимает ровно один тактовый цикл, поэтому тактовый цикл должен быть растянут, чтобы
приспособиться под самую медленную инструкцию.
В табл. 4.4 показано время, необходимое для выполнения каждой из восьми инструкций.
Однотактная конструкция должна допускать выполнение самой медленной инструкции —
в табл. 4.4 это инструкция 1м, — поэтому время, требуемое для выполнения каждой ин
струкции, составляет 800 пс. По аналогии с картиной, показанной на рис. 4 22, на рис. 4.23
приводится сравнение неконвейеризированного и конвейеризированного выполнения трех
инструкций загрузки слова - load word. В соответствии с этим сравнением время между
первой и четвертой инструкцией в конструкции, не использующей конвейер, составляет
3 к 800 пс, или 2400 пс. Все стадии конвейера занимают один тактовый цикл, поэтому
тактовый цикл должен быть достаточно продолжительным, чтобы вместить в себя самую
медленную операцию Точно так же как однотактная конструкция должна быть равна про
должительности тактового цикла, равной времени выполнения самой медленной операции
(800 пс), хотя некоторые инструкции могут выполняться быстрее, за 500 пс, при конвейери
зированном выполнении тактовый цикл должен иметь время выполнения самой медленной
операции, которое составляет 200 пс, хотя некоторые стадии выполняются и за 100 пс. И все
же конвейеризация предлагает четырехкратный рост производительности: время между
первой и четвертой инструкцией составляет 3 х 200 пс, или 600 пс.
ния программы
(в инструкциях)
Структурные конфликты
Первый из этих типов называется структурным конфликтом Он означает, что
зборудованне не может поддержать комбинацию инструкций, которую мы хотим
выполнить за один и тот же тактовый цикл. Структурный конфликт в прачечной
возникнет, если будет использоваться комбинация стирки-сушки вместо отдель
ных стирки и сушки или если совместно с нами проживающие будут заняты чем-
нибудь другим и не перенесут белье к месту его хранения. Тогда наши тщательно
регламентированные планы работы конвейера будут нарушены.
Как уже говорилось, набор инструкций MIPS был разработан с учетом возмож
ности конвейеризации, значительно упрощая разработчикам обход структурных
конфликтов при конструировании конвейера. И тем не менее предположим, что
у нас вместо двух блоков памяти используется единый блок. Если конвейер, по
казанный на рис. 4.23, получил четыре инструкции, мы увидим, что за один и тот
же тактовый никл первая инструкция обращается к данным в памяти, в то время
как четвертая инструкция извлекает инструкцию из той же самой памяти. Без двух
блоков памяти наш конвейер может столкнуть
ся со структурным конфликтом. Структурмый конфликт
Ситуация, когда запланированная инструк
ция не может быть выполнена в подходя
Конфликты данных щем тактовом цикле, потому что обору
Конфликты данных возникают в том случае, дование не поддерживает комбинацию
инструкций, предназначенную для выпол
когда конвейер может быть остановлен из-за нения.
того, что один шаг должен будет ожидать за
вершения другого. Предположим, что вы обна Конфликт данных
ружили на столе для складывания белья носок Также называется конфликтом данных
конвейера. Ситуация, когда запланирован
без соответствующей пары. Одним из путей ная инструкция не может быть выполнена
решения проблемы может стать возвращение в нужный тактовый цикл, поскольку данные,
в свою комнату и поиск в комоде соотнетству- о которых она нуждается, еще недоступны.
372 Глава 4. Процессор
ющей пары. Вполне очевидно, что во время этого поиска партия белья будет вы
сушена и готова к складыванию, а та порция, которая будет выстирана и готова к
сушке, вынуждена будет ожидать своей очереди.
В компьютерном конвейере конфликт данных возникает из-за зависимости от
какой-нибудь инструкции из предыдущих, которая все еще находится в конвейере
(в процессе стирки такие взаимоотношения никогда не возникают). Например,
представим, что у нас есть инструкция сложения — add, за которой сразу же следует
инструкция вычитания —sub, которая использует сумму (SsO):
add tsO. StO. Stl
sub St2. tsO. St3
Без вмешательства конфликт данных мог бы просто остановить конвейер. Ин
струкция add нс записывает свой результат, пока не настанет мятая стадия, а это
означает, что мы впустую потеряем в конвейере три тактовых цикла.
Хотя в ликвидации всех подобных конфликтов мы можем положиться на
компиляторы, результаты могут быть неудовлетворительными. Эти зависимости
случаются довольно часто, и задержка является слишком продолжительной, чтобы
ожидать, что компилятор избавит нас от этой дилеммы.
Основное решение основано на том наблюдении, что нам не нужно ждать, пока
завершится выполнение инструкции, перед тем как попытаться решить проблему
конфликта данных. Для показанной выше программной последовательности как
только АЛ У выдаст сумму для инструкции сложения, мы можем предоставить ее
в качестве входа для инструкции вычитания. Добаатенне дополнительного обору
дования для извлечения недостающего элемента на ранней стадии из внутренних
ресурсов называется препровождением данных, или обходом.
Упражнение
Препровождение данных при вылолненнн двух инструкций
Покажите для двух предыдущих инструкций, какие стадии конвейера будут соединены
за счет препровождения данных. Используйте изображение на рис. 4.24 для представле
ния пути данных во время выполнения пяти стадий работы конвейера. Выстройте копию
пути данных для каждой инструкции по образцу конвейера прачечной, показанного на
рис. 4.22.
Ответ
На рис. 4.25 показана связь для передачи значения в SsOпосле исполнительной стадии ин
струкции adc в качестве входных данных в исполнительную стадию инструкции sub.
Порядок
(в инструкциях)
(w 4>а 2<X$t1)
Упражнение
Перестановка кода в целях задержек конвейера
Рассмотрим следующий фрагмент кода на языке С:
а - b + е:
с - b + f:
Так выглядит сгенерированный MIPS-код для этого фрагмента, при условии, что все пере
менные находятся в памяти и к ним можно обратиться с помощью смещения от значения
регистра $t0:
1w I t l . О(ПО)
lw St2. 4($t0)
add Jt3. J tl.$ t 2
sw Jt3. 12($t0)
lw Jt4, 8 (StO)
add Jt5. J t l . « 4
sw ItS. 16СИ0)
Найдите конфликты в этом фрагменте кода и переставьте инструкции так, чтобы избежать
любых задержек конвейера.
Ответ
Обе инструкции сложения подвержены конфликтам в силу своей соответственной зависимо
сти от непосредственно стоящих перед ними инструкций V Следует заметить, что развязка
этой ситуации исключает ряд других потенциальных конфликтов, включая зависимость
первой инструкции add от первой инструкции lw и любые конфликты для инструкций со
хранения. Перемещение третьей инструкции lw на третью позицию в кодовом фрагменте
исключает оба конфликта:
4.5. Обзор конвейеризации 375
!■ S t l . OCStO)
иг. 4(но)
v* Jt4. 8(tt0)
add U3. U1.H2
s* из. 12 (StO)
add U5. U1.U4
sw U5. 16<U0)
• процессоре с конвейером и препровождением данных переставленная последователь-
<ть к тому же уменьшит количество циклов на два по сравнению с первоначальной
жреией.
Конфликты управления
Третий тип конфликтов называется конфликтом управления и возникает из по
требности принимать решение на основе результата выполнения одной инструкции
во время выполнения другой инструкции.
Предположим, что наш персонал прачеч
ной получил удачный заказ на стирку формы Конфликт за грузки-использования
футбольной команды. Зная о несовершенстве данных
нашей прачечной, нужно определить, доста Специфическая форма конфликта данных,
при которой данные, загруженные инструк
точно ли моющих средств и соответствует ли цией load, еще не стали доступны к тому
температура воды, чтобы отстирать форму, но моменту, когда они понадобились другой
при этом не привести к ее ускоренному износу, инструкции.
В нашем прачечном конвейере нужно ждать
Замедление конвейера
завершения второй стадии, чтобы осмотреть вы Также называется пузырем. Задержка,
сушенную форму и определить, нужно менять инициированная в целях разрешения кон
настройку стиральной машины или нет. Как фликта.
следует поступить? Конфликт управления
Вот как выглядят первые два решения кон Также называется конфликтом условного
фликта управления п прачечной и их компью перехода. Возникает, когда нужная инструк
терные эквиваленты. ция не может быть выполнена в нужном так
товом цикле конвейера по причине того,
Зад ерж ка. Нужно все делать последовательно, что извлеченная инструкция не является
пока не будет высушена первая партия, а затем той инструкцией, которая нужна, то есть
повторить процесс, пока не будет найдена пра поток адресов инструкций не соответствует
вильная формула. ожиданиям конвейера.
376 Глава 4. Процессор
вы боры
. АЛУ
200 пс ГЫн м я л
i l l i l l
|Ь
I М АЛУ
Выборка
ДЛИНЫ
»
Й
Рис. 4 .2 7 . Конвейер, демонстрирующий задержку при каждом условном переходе в ка
честве разрешения конфликта управления. В этом примере предполагается, что условный
переход состоялся и инструкция, которая находится по целевому адресу условного перехода,
является инструкцией OR. Это задержка конвейера на одну стадию, или пузырь, после условного
перехода В реальной ситуации процесс создания задержки, как мы увидим в разделе 4.8, вы
глядит немного сложнее Но влияние на производительность будет таким же, как и при вставке
пузыря
Упражнение
Ответ
В главе 3 в табл. 3.11 показано, что условные переходы составляют 17% от общего количества
инструкций, выполняемых в контрольных задачах SPECint2006 Поскольку все остальные
запущенные инструкции имеют CPI, равный 1, и условные переходы затрачивают на эадерж-
4.5. Обзор конвейеризации 377
Если ваш прогноз верен, то этот выбор не приведет к замедлению работы кон-
: пера А если он неверен, вам нужно будет извлечь ту партию, которая стиралась,
'ока вы строили прогнозы.
Компьютер действительно использует прогноз для обработки условных пере
водов. Один из простых подходов заключается в постоянном прогнозировании
того, что переходы не состоятся. Когда прогноз сбывается, конвейер работает па
одной скорост и. Его задержку вызывают только состоявшиеся переходы. Пример
подобной работы показан на рис. 4.32.
Болес сложная версия прогнозирования условного перехода предусматривает
прогнозирование выполнения одних переходов и невыполнения других. В нашей
аналогии темная, или домашняя, форма должна стираться по одной формуле,
а светлая, или гостевая, форма — подругой. И программировании в нижней части
цикла находятся условные переходы на вершину цикла. Поскольку они, скорее
всего, состоятся и произойдет переход назад, для переходов на более ранние адреса
мы можем всегда прогнозировать выполнение.
Такие жесткие подходы к прогнозированию условного перехода основываются
а стереотипе поведения и не рассчитаны на индивидуальный характер отдельной
инструкции условного перехода. Абсолютной противоположностью являются
динамические аппаратные средства прогнозирования, которые строят свой прогноз
в зависимости от поведения каждого условного перехода и способны изменять
прогноз на переход за время жизни программы. Следуя нашей аналогии, при ди
намическом прогнозировании кто-нибудь будет следить за степенью загрязнения
формы и прогнозировать особенности формулы, выстраивая следующий прогноз
в зависимости от степени успеха предыдущего.
Одним из популярных подходов к динами
ческому прогнозированию условных переходов
является ведение истории для каждого состояв Прогнозирование условного перехода
шегося и несостоявшегося условного перехода, Метод разрешения конфликта условною
а затем использования недавнего поведения из перехода, при котором для этого перехода
прогнозируется заданный исход и соответ
прошлого для предсказания будущего. Как бу ствующее ему развитие событий вм есю
дет показано далее, рост количества и типа хро ожидания подтверждения фактического
нологических данных отразится на результате исхода.
378 Глава 4. Процессор
Порядок
выполнения Время 200 400 600 800 1000 1200 1400
----------------------- 1-----------------------1 1-----------------------1-------------- ~ т -------------------- 1----------------------- 1—
программы
(в инструкциях)
add $4, $5, $6
lw $3,300(50)
Порядок
выполнения Время 200 400 600 000 1000 1200 1400
I
программы
(в инструкциях)
i if
В ы б о р ка
а
И |«п«ч(яве
АЛУ
имструмцяя ДЛИНЫ !
В ы б о р ка
1!
АЛУ I j l
д анн ы м
200 пс ш
Рис. 4.28. Прогноз того, что условные переходы не будут выполнены, как средство раз
решения конфликта управления. В верхней части показан конвейер, когда условный переход
не состоялся. В нижней части показан конвейер, когда условный переход состоялся. Как было
показано на рис. 4.27, вставка пузыря является упрощенной картиной того, что происходит на
самом деле, по крайней мере, в период первого тактового цикла, который следует сразу же за
условным переходом. Подробности будут рассмотрены в разделе 4 8
Самопроверка
Для каждой из показанных ниже кодовых последовательностей определите, могут
ли они вызвать задержку, можно ли ее избежать, используя только лишь препро
вождение данных, или выполнение может обойтись без задержки или препрово
ждения данных.
Общее представление
конвейеризация увеличивает количество одновременно выполняемых инструкций
1 скорость, с которой инструкции запускаются и завершаются. Конвейеризация не
зжращает время, требуемое для завершения отдельной инструкции, которое также
зазывается латентностью. Например, конвейер с пятью стадиями по-прежнему
атрачивает 5 тактовых циклов для завершения инструкции. В понятиях, использо-
занных в главе 1, конвейеризация повышает пропускную способность инструкций,
1 не время выполнения, или латентность, отдельно взятой инструкции.
Набор инструкций может либо упростить, либо усложнить жизнь разработ
чикам конвейера, которые должны справляться со структурными конфликтами,
а также с конфликтами управления и данных. Прогнозирование условного пере
хода и препровождение данных помогают ускорить работу компьютера, сохраняя
получение правильных ответов.
lw $ 1 ,100($0)
lw $ 2 ,2OCHS0)
lw S3, 3OWS0)
Глядя на рис. 4.30, можно подумать, что для трех инструкций нужны три опе
рационных блока. Н о на самом деле мы добавили регистры для хранения данных,
поэтому части единого операционного блока могут совместно использоваться
в процессе выполнения инструкции.
Например, как показано на рис. 4.30, память инструкций задействована только
во время одной из пяти стадий выполнения инструкции и может совместно ис
пользоваться следующими инструкциями во время других четырех стадий. Чтобы
сохранить в памяти значение отдельной инструкции для ее остальных четырех
стадий, значение, считанное из памяти инструкций, должно быть сохранено в ре
гистре. Подобные аргументы относятся к каждой стадии конвейера, поэтому реги
стры должны быть помещены везде, где есть разделительные линии. Возвращаясь
384 Глава 4. Процессор
к нашей аналогии с прачечной, у нас должна быть корзина между каждой парой
стадий, в которой белье хранилось бы для следующего шага.
На рис. 4.31 показан конвейеризированный операционный блок с выделенными
регистрами конвейера. Все инструкции продвигаются во время каждого тактового
цикла от одного конвейерного регистра к другому. Имена регистрам даны по назва
ниям двух стадий, разделенных данным регистром. Например, регистр конвейера,
расположенный между стадиями IF и ID, называется IF /ID .
Разумеется, каждая инструкция обновляет значение счетчика команд ( P C ),
либо приращивая его значение, либо присваивая ему целевой адрес условного
перехода. Поэтому P C может рассматриваться как регистр конвейера: один из тех,
который способствует работе конвейера на стадии IF. Н о в отличие от закрашен
ных регистров конвейера, показанных на рис. 4.31, P C является частью видимой
архитектурной единицы; его содержимое должно быть сохранено при возникно
вении исключения, в то время как содержимое регистров конвейера должно быть
сброшено. По аналогии с прачечной, счетчик команд должен соответствовать той
корзине, в которой содержится партия нестираного белья перед шагом стирки.
Чтобы изложить принцип работы конвейера, во всем тексте данной главы мы
будем показывать последовательность рисунков, демонстрирующую его работу.
М ож ет показаться, что дополнительные страницы потребуют от вас намного
больше времени, чтобы в них разобраться. Н о эти опасения совершенно напрасны;
вопреки возможным ожиданиям, изучение последовательных изображений займет
намного меньше времени, поскольку у вас появится возможность их сравнивать,
чтобы увидеть изменения, происходящие с каждым тактовым циклом. В разделе 4.7
дается описание всего происходящ его при возникновении конф ликта данных
между инструкциями конвейера; поэтому на данный момент этот вопрос мы про
пустим.
Н а рис. 4.32-4.34 изображена первая последовательность, на которой выде
лена активная часть операционного блока в момент, когда инструкция загрузки
проходит пять стадий конвейерного выполнения. И н струкц и я загрузки пока
зана первой, потому что при ее выполнении активны все пять стадий. Как и на
рис. 4.24-4.26, мы выделили правую половину регистров (или памяти), когда они
находятся в процессе чт ени я, и выделили их левую половину, когда они находятся
в процессе записи.
Обратите внимание на то, что в конце стадии обратной записи регистра конвей
ера нет. Все инструкции должны обновить какое-нибудь состояние в процессоре —
файл регистров, память или счетчик команд (P C ), — поэтому отдельный регистр
конвейера для обновляемого состояния будет не нужен. Например, инструкция
загрузки поместит свой результат в один из 32 регистров, а одна из следующих
инструкций, которой понадобятся данные, будет просто читать соответствующий
регистр.
Н а каждом рисунке мы показали аббревиатуру инструкции lw с названием той
стадии конвейера, которая находится в активном состоянии. Рассматриваются
следующие пять стадий:
1. И звлечение инст рукции. В верхней части рис. 4.32 показана инструкция в про
цессе ее чтения из памяти с использованием адреса в счетчике команд (P C ),
В Операционный блок и система управления, оснащенные конвейером
Рис. 4 .3 1 . Конвейеризированная версия операционного блока с рис. 4.2 9 . Выделенные регистры конвейера разделяют все стадии
конвейера Они обозначены по именам тех стадий, которые ими разделены; например, первый из них имеет обозначение IF/1D, потому что он
разделяет стадии извлечения инструкции (instruction fetch) и декодирования инструкции (instruction decode). Регистры должны иметь доста
точную ширину, чтобы хранить все данные, соответствующие проходящим через них линиям. Например, регистр IF/ID должен иметь ширину
64 разряда, потому что он должен содержать и 32-разрядную инструкцию, извлеченную из памяти, и приращенное значение 32-разрядного
адреса счетчика команд (PC). Далее регистры будут расширяться, но на данный момент остальные три регистра конвейера содержат 128.97
и 64 разряда соответственно
385
386 Глава 4. Процессор
lw
Рис. 4.34. МЕМ и WB: четвертая и питая стадии конвейерного выполнения инструкции
загрузки, с выделенными частями операционного блока с рис. 4.3 1 , используемыми на
данной стадии. Информация из памяти данных считывается с использованием адреса из ре
гистра конвейера ЕХ/МЕМ, и данные помещаются в регистр конвейера МЕМ/WB Затем данные
считываются из регистра конвейера MEM/W 8 и записываются в файл регистров, показанный
в середине операционного блока Примечание: этот недостаток в данной конструкции устраня
ется на рис 4.37
390 Глава 4. Процессор
3. И сполнение или вы числение адреса. Н а рис. 4.35 показан третий шаг; действую
щий адрес помещается в регистр конвейера Е Х / М Е М .
4. Обраи^ение к памяти. В верхней части рис. 4.36 показаны данные, записываемые
в память. Обратите внимание на то, что регистр, содержащий данные для сохра
нения, был считан на более ранней стадии и сохранен в I D / E X . Единственный
способ сделать данные доступными в процессе выполнения стадии М Е М — это
поместить их в регистр конвейера Е Х / М Е М на стадии Е Х , точно так же, как мы
сохраняли в Е Х / М Е М действующий адрес.
5. О брат ная запись. В нижней части рис. 4.36 показан завершающий шаг сохра
нения. Для этой инструкции на стадии обратной записи ничего не происходит.
Поскольку любая инструкция, находящаяся за инструкцией сохранения, уже
выполняется, у нас нет способов ускорения таких инструкций. Следовательно,
инструкция проходит ст адию, даже если ей нечего там делать, поскольку следу
ющие за ней инструкции уже находятся в процессе выполнения с максимальной
скоростью.
Инструкция сохранения показывает, что для прохождения чего-либо от ранней
к более поздней стадии конвейера информация должна быть помещена в регистр
конвейера, в противном случае информация будет потеряна при входе в стадию
конвейера следующей инструкции. Для инструкции сохранения нам нужно пере
дать данные, считанные из одного из регистров на стадии ID, в стадию М Е М , где
они будут сохранены в памяти. Данные сначата были помешены в регистр конвей
ера ID / Е Х , а затем переданы в регистр конвейера Е Х / М Е М .
Загрузка и сохранение иллюстрируют второй ключевой момент: каждый логиче
ский компонент операционного блока, например память инструкций, порты чтения
регистра. А Л У, память данных и порт записи регистра, могут использоваться только
во время одной стадии конвейера. В противном случае мы столкнемся со ст рук
т урны м конф ликт ом (см. раздел «Конфликты, связанные с работой конвейера»).
Следовательно, эти компоненты и их системы управления должны быть связаны
только с одной стадией конвейера.
Теперь мы должны выявить ошибку в конструкции, выполняющей инструкцию
загрузки. А вы заметили эту ош ибку? Какой регистр изменился на финальной
стадии загрузки? Если говорить конкретнее, то какая инструкция предоставляет
номер регистра, в который записываются данные? Инструкция в регистре конвей
ера IF / ID предоставляет номер регистра, в который будет вестись запись, но ведь
эта инструкция появляется значительно позже инструкции загрузки!
Следовательно, нам нужно сохранить номер регистра-получателя в инструк
ции загрузки. Аналогично тому как инструкция сохранения передает содержимое
регистра из регистра конвейера ID / Е Х в регистр конвейера Е Х / М Е М с целью его
использовании на стадии М Е М , инструкция загрузки должна передать номер из
регистра конвейера ID / Е Х через регистр конвейера Е Х / М Е М в регистр конвейера
M E M / W B с целью его использования на стадии W B . Еще один способ осмыслить
передачу номера регистра заключается в том, что для общего использования кон
вейеризированного операционного блока нам нужно так сохранить инструкцию,
прочитанную на стадии IF, чтобы каждый регистр конвейера содержал ту часть
инструкции, которая необходима для данной и для последующих стадий.
4 6 Операционный блок и система управления, оснащенные конвейером
IMB mx fk’mfm MfM.'WH
Рис. 4 .3 5 . EX: третья стадия конвейерного выполнения инструкции сохранения. В отличие от третьей стадии выполнения инструкции
загрузки, показанной на рис 4 33, в регисф конвейера ЕХ/МЕМ загружается значение второго регистра, для того чтобы оно было использовано
в следующей стадии. Хотя нам не помешало бы постоянно записывать значение этого второго регистра в регистр конвейера ЕХ/МЕМ, мы за
писываем его только при выполнении инструкции сохранения, чтобы было проще разобраться с работой конвейера
Q
Ю
392 Глава 4. Процессор
<w
Рис. 4.36. MEM и WB: четвертая и пятая стадии конвейерного выполнения инструкции
сохранения. На четвертой стадии данные записываются в память данных для сохранения.
Учтите, что данные поступают из регистра конвейера ЕХ/МЕМ, поэтому в содержимом регистра
конвейера MEM/WB ничего не меняется. Как только данные будут записаны в память, инструк
ции сохранения уже нечего будет делать, поэтому на пятой стадии ничего происходить не будет
4.6. Операционный блок и система управления, оснащенные конвейером 393
Конвейеры, представленные
в графическом виде
Конвейеризация может быть довольно трудной для понимания, поскольку за
каждый тактовый цикл одним операционным блоком одновременно выполняется
множество инструкций. Чтобы во всем этом разобраться, применяются два ос
новных способа демонстрации конвейера: диаграмм а работ ы конвейера с изобра
ж ением нескольких т акт овы х ц и к ю в, например схема, изображенная на рис. 4.30,
и диаграмм а работ ы конвейера с изображ ением одного тактового цикла, например
схема, изображенная на рис. 4.32-4.36. Диаграммы работы конвейера с изобра
жением нескольких тактовых циклов выглядят проще, но не содержат всех под
робностей. Рассмотрим, к примеру, следующую последовательность из пяти и н
струкций:
U $ 10 . 20 ( $ 1 )
sub $11. $2. $3
add $12 $3. $4
lw $13. 24($1)
add $14. $5. $6
На рис. 4.39 показана диаграмма работы конвейера с изображением нескольких
тактовых циклов, использующаяся для этих инструкций. Н а этой схеме направле
ние времени показано слева направо, а прогресс выполнения инструкций - сверху
вниз. Изображение стадий конвейера привязано к оси инструкций и соответ
ствую щ им тактовы м циклам. Э т и условные операционные блоки составляют
графическое изображение пяти стадий нашего конвейера. Н а рис. 4.40 показана
более традиционная схема работы конвейера с изображением нескольких тактовых
циклов. Обратите внимание на то, что на рис. 4.39 показаны физические ресурсы,
используемые на каждой стадии, а на рис. 4.40 используется название каждой
стадии.
Схема работы конвейера с изображением одного тактового цикла показывает
состояние всего операционного блока в течение одного тактового цикла, и все
пять инструкций в конвейере различаются надписями над соответствующ ими
стадиями конвейера. Этот тип изображения используется для того, чтобы показать
подробности происходящего внутри конвейера за время каждого тактового цикла.
Д ля этого обычно используются последовательные рисунки, демонстрирующие
4 6. Операционный блок и система управления, оснащенные конвейером 395
жидок
«голнения
эвграммы
I шетрукциях)
■и $10,20(51)
« Л $11, $2, S3
add $12,53, $4
k*S13,24<$t)
add$14,$S. S6
Р и с . 4 .4 0 . Т р а д и ц и о н н а я с х е м а р а б о ты к о н в е й е р а с и зо б р а ж е н и е м н е с к о л ь к и х та кто в ы х
ц и кл о в д л я в ы п о л н е н и я п яти и н стр у к ц и й , п ок аза н н ы х на р и с . 4 .3 9
Р и с . 4 .4 1 . С х е м а р а б о ты к о н в е й е р а с и з о б р а ж е н и е м о д н о го та к то в о го ц и кл а , с о о т в е т
с т в у ю щ а я т а к т о в о м у ц и кл у 5 к о н в е й е р а , и зо б р а ж е н н о го на р и с . 4 .3 9 и 4 .4 0 . Как видите,
рисунок с изображением одного тактового цикла является вертикальным срезом диаграммы
с изображением нескольких тактовых циклов
Самопроверка
Группа студентов обсуждала эффективность работы конвейера из пяти стадий,
когда один из студентов заметил, что не все инструкции активны на каждой ста-
4 6. Операционный блок и система управления, оснащенные конвейером 397
:ии конвейера. После того как было принято решение проигнорировать влияние
шнфликтов, студенты пришли к следующим пяти заключениям. Какие из этих
включений являются верными?
Если позволить инструкциям безусловных и условных переходов, а также и н
струкциям, применяющим А Л У, использовать меньше пяти стадий, требуемых
для выполнения инструкции загрузки, то это при любых обстоятельствах по
высит производительность конвейера.
. Попытка позволить некоторым инструкциям использовать меньшее количество
стадий не поможет, поскольку пропускная способность определяется продол
жительностью тактового цикла; количество стадий конвейера влияет на латент
ность, а не на пропускную способность.
3. Заставить инструкции, применяющие А Л У , использовать меньшее количество
стадий невозможно, поскольку им необходимо выполнять обратную запись
результата, а вот инструкции условного и безусловного перехода могут исполь
зовать и меньшее количество стадий, поэтому есть возможности для усовершен
ствования их конвейерного выполнения.
4 Вместо того чтобы пытаться заставить инструкции сокращать количество ста
дий, нужно исследовать возможность удлинения конвейера, чтобы инструкции
использовали большее количество, но более коротких стадий. Таким образом
можно будет повысить производительность.
К онвейеризированная си ст е м а управления
В компьютере 6600, возможно, даже больше,
чем в любом из предыдущих компьютеров, ис
пользуется ни на что нс похожая система управ
ления.
Джеймс Торнтон
Теперь, точно так же как мы в разделе 4.3 добавляли систему управления к одно
тактному операционному блоку, давайте добавим ее к конвейеризированному
операционному блоку. Начнем с простой конструкции. В разделах 4.7-4.Э мы
вскроем все конфликты конвейера, возникающие в реальном мире.
Для начала подпишем линии управления на уже имеющемся операционном
блоке. Э ти линии показаны на рис. 4.42. В данном случае, насколько это было
возможно, использовались заимствования из системы управления простым опе
рационным блоком, показанной на рис. 4.14. В частности, использовалась та же
логика управления А Л У, логика условных переходов, мультиплексор номера ре-
гистра-иолучателя и линии управления. Определения этим ф ункциям были даны
в табл. 4.1, 4.3 и на рис. 4.15. Ключевая информация, облегчающая отслеживание
дальнейшего рассмотрения данного вопроса, повторно приведена в табл. 4.5,4.6 и
на рис. 4.43.
398
Глава 4. Процессор
Рис. 4.42. Конвейеризированный операционный блок, изображенный на рис. 4.3 7 , с обозначенными линиями управления. В этом
операционном блоке для источника адреса счетчика команд (PC), номера регистра-получателя, АЛУ позаимствована логика управления, рас
смотренная в разделе 4,4. Учтите, что теперь нам на стадии ЕХ в качестве управляете! о входа АЛУ понадобится 6 -раэрядное поле funct (код
функции), следовательно, эти разряды также должны быть включены в регистр конвейера ID/EX. Следует напомнить, что эти же шесть разрядов
являются в инструкциях также шестью самыми младшими разрядами поля непосредственного значения (immediate), поэтому регистр кон
вейера ID/ЕХ может предоставить их из поля непосредственного значения, поскольку расширение знака не изменит значение этих разрядов
4.6 Операционный блок и система управления, оснащенные конвейером 399
Ч-format 1 1 0 0 0 0 0 1 0
[tor 0 0 0 1 0 1 0 1 1
SW X 0 0 1 0 0 1 0 X
oeq X 0 1 0 1 0 0 0 X
Рис. 4.43. Значения сигналов на линиях управления, аналогичные тем, что были показаны
ва рис. 4.15, но объединенные в три группы, соответствующие последним трем стадивм
конвейера
WB
Инструкция^
Блок М WB
управ
ления
ЕХ М _ W8
Порядок выполнения
программы
(в инструкциях)
На рис. 4.46 показано, что значения, считанные из регистра $2, не будут ре
зультатом выполнения инструкции sub до тех пор, пока чтение не будет вестись во
4.7. Конфликты данных: сравнение препровождения данных и задержки 405
Упражнение
Выявление зависимости
Классифицируйте зависимости в последовательности, приведенной в начале раздела
sub S2, S1.S3 # В регистр $2 ведется запись инструкцией sub
and I12.S2.S5 # Первый операнд (S2) зависит от инструкции sub
or S13.S6.J2 # Второй операнд (S2) зависит от инструкции sub
add SH.S2.S2 # Первый ($2) и второй (S2) операнды зависят от sub
sw S15.100CS2) # База (S2) зависит от иыструкции sub
406 Глава 4. Процессор
Ответ
Как уже упоминалось, зависимость suo-arvd относится к конфликту типа 1а. Все остальные
конфликты классифицируются следующим образом:
♦ Зависимость sub ос относится к конфликту типа 26:
*€М/'(ЛЗ.Registered - 10/СХ ReguterRt * 12.
♦ Две зависимости sub-add нс являются конфликтами, поскольку на ID -стадии выполнения
инструкции add файл регистров предоставляет верные данные.
♦ Между инструкциями sub и swконфликт данных не возникает, потому что swсчитывает
значение регистра $2 в тактовом цикле, который следует после того, как инструкция sub
записывает данные в регистр J2.
'срядок
вяюлиеиия
«ограммы
■ инструкциях)
sub ,$1,53
and $1 2 , ,$5
or $13, $6 ,
add $14, ,
sw $15,100
или нет. У нас уже есть ноле r t (разряды 20 16). Перед препровождением в |>есистр
I D / E X не нужно было включать пространство для хранения поля r s . Следователь
но, поле r s (разряды 25-21) добавлено к ID / E X .
Теперь давайте запишем оба условия для определения конфликтов и выставле
ния управляющих сигналов для их разрешения:
1. Е Х конфликт:
если (Е Х /М Е М R e g W n t e
и (Е Х /М Е М R e g i s t e r R d * 0)
и ( Е Х / М Е М .R e g i s t e r R d * I D / E X .R e g is t e r s ) ) F c 'w a r d A - М
если ( E X / M fc M .R e g W n te
и (E X /M E M R e g i s t e r R d * 0)
и (Е Х /М Е М R e g i s t e r R d - ID / E X R e g i s t e r R t ) ) F o rw a rd B - 10
если (MEM/W0 R e g W r it e
и ( M E M / W B .R e g is t e r R d * 0)
и (MEM/WB R e g i s t e r R d * ID /E X R e g is t e r R t ) ) F o rw a rd B - 01
а) без препровождения
б) с препровождением
Л к . 4.48. В верхней части показаны АЯУ и регистры конвейера до добавления препровохдения
ажчных В нижней части мультиплексоры были расширены для добавления всех маршрутов пре-
аровождения данных, и мы показали блок препровождения. Все новое оборудование выделено
жрым цветом. Этот рисунок является условным изображением, поскольку в нем опущены такие
тодробмоези полноценного операционного блока, как оборудование для расширения знака. Об-
звтите внимание на то, что поле Ю/ЕХ RegisterRt показано дважды один раз для подключения
< мультиплексору (mux), а второй раз для подключения к блоку препровохдения, но на самом
зеле оно представляет один и тот же сигнал Как и раньше, здесь проигнорировано препрово
ждение сохраняемого значения для инструкции сохранения. Следует также заметить, что данный
механизм работает и для инструкции stt
410 Глава 4. Процессор
если ( M E M / W B .R e g W r ite
и (М Е Ч / W B .R e g i s t e r R d * 0)
и н е ( Е Х / Ж М . R e g W r it e и ( E X / M E M . R e g is t e r e d * 0)
и ( E X / H E H . R e g is t e r R d * I D / E X .R e g is t e r R t )
и (MEM/WB R e g i s t e r R d - ID /E X R e g is t e r R t ) ) F o rw a rd B - 01
Управление
мультиплексором Источник Объяснение
(mux)
ForwardA = ОО ID/EX Первый операнд АЛУ поступает из файла per ист рое
Forward А = 10 EX/MEM Первый операнд АЛУ препровождается из предшествую
щего результата АЛУ
ForwardA - 01 MEM/WB Первый операнд АЛУ препровождается из памяти данных
или из предшествующего результата АЛУ
ForwardB - ОО ID/EX Второй операнд АЛУ поступает из файла регистров
ForwardB = 10 EX/MEM Второй операнд АЛУ препровождается из предшествую
щего результата АЛУ
ForwardB = 01 MEM/WB Второй операнд АЛУ препроеождаегся из памяги данных
или из предшествующего результата АЛУ
Рис. 4.4 9 . Операционный блок, модифицированный для разрешения конфликтов за счет препровождения данных. По сравнению
с операционным блоком, показанным на рис. 4.45. здесь добавлены мультиплексоры на входах АЛУ Но этот рисунок является еще более
условным изображением, поскольку в нем опущены такие подробности полноценного операционного блока, как оборудование для условных
переходов и оборудование для расширения знака
411
412 Глава 4. Процессор
Рис. 4.50. Крупный план операционного блока, изображенного на рис. 4.4В, показываю
щий мультиплексор 2:1, добавленный для выбора непосредственного значения со знаком
а качестве входа АЛУ
выполнения
циях)
» . 20(S1 )
indS 4, i.\$ S
- ж S8, $б
*doS9 .
; iit $ i , $ь, $7
~я*яок выполнения
эпраммы
«струкциях)
Рис. 4.52. Способ вставки задержки в конвейер. Пузырь д о б авл яется, начиная с такто вого
цикла 4 . п утем и з м е н е н и я и н стр укц и и a n d на и н стр укц и ю п ор. О б р а ти т е вн и м ан и е на то, ч ю и н
струкция and р еально и зв л екается и д е к о д и р у е т с я в т еч е н и е тактовых циклов 2 и 3 , но е е стад ия
ЕХ з а д е р ж и в а е тс я д о наступл ен и я такт о в о го ц и кл а 5 (п о сравн ению с п о з и ц и е й б е з з а д е р ж ки ,
и зо б р а ж е н н о й е такто в о м ц и кл е 4 ). П од обны м о б р а з о м , инструкция O R и зв л екается в теч е н и е
такто в ого ц и кл а 3 , но е е стад и я ID з а д е р ж и в а е тс я д о н аступл ен ия т акто в о го цикл а 5 (по с р а в н е
нию с п о з и ц и е й б е з з а д е р ж к и в такто в о м ц и кл е 4 ). П о сл е д об авл ения пузы ря все зав и си м о сти
с м е щ а ю тс я по в р ем ен и в п ер ед , и в п ос л е д ую щ е м конф ликты не во зн икаю т
Общее представление
Хотя компилятор для разрешения конфликтов в основном полагается на обору
дование, обеспечивая, таким образом, правильное выполнение, для достижения
наилучшей производительности он должен понимать тонкости работы конвейера.
В противном случае неожиданные задержки будут снижать производительность
скомпилированного кода.
Ю/ЕХ
PtWnfc-
’ Перевод 3. Е. Александровой.
4.8 Конфликты управления 417
I тактовых циклах)
—•«1512,52,55
• o r $13,56.52
r-3 l* $4,5«$7)
Упражнение
Конвейеризированный условный переход
Покажите, что произойдет, когда условный переход предпринимается в представленной
последовательности инструкций, при условии, что конвейер оптимизирован для несосто
явшихся условных переходов и что мы переместили выполнение условного перехода на
стадию ID:
36 sub no. $4. $B
40 beq $1, $3. 7 # переход относительно PC на 40 + 4 + 7 * 4 - 72
4 4 and $12, $ 2 . $5
4 0 or $13. $ 2 , $6
add $14. $4. $2
56 s i t $ 1 5 . $ 6 . $7
72 lw $4. 50($7)
Ответ
На рис. 4.55 показано, что произойдет, когда условный переход состоится В отличие от
показанного на рис. 4,54, здесь всего лишь один конвейерный пузырь при состоявшемся
условном переходе.
Д и н а м и ч е с к о е п р о гн о з и р о в а н и е у с л о в н о го
перехода
Предположение о том, что переход не состоится, является одной из простейших
форм прогнозирования условного перехода. В этом случае мы прогнозируем, что
перехода не будет, сбрасывая конвейер, когда прогноз оказывается ошибочным. Для
простого конвейера из пяти стадий такой подход, возможно, в совокупности с про
гнозом компилятора, наверное, вполне адекватен. Для более глубоких конвейеров
издержки условных переходов, измеренные в тактовых циклах, увеличиваются.
Аналогично этому, при запуске сразу нескольких инструкций (см. раздел 4.10) ра
стут издержки перехода, измеряющиеся в потерянных инструкциях. Это сочетание
означает, что в интенсивном конвейере простая статическая схема прогнозирования
будет, наверное, слишком сильно и неоправданно снижать производительность.
Как уже говорилось в разделе 4.5, при наличии более совершенного оборудования
можно попытаться спрогнозировать исход уловного перехода в процессе выпол
нения программы.
Один из подходов состоит в поиске адреса инструкции с целью определения,
был ли осуществлен условный переход, когда инструкция выполнялась в послед-
.. .... ... ний раз, и если был, приступать к извлечению
Динамическое прогнозирование новой инструкции из того же самого места, что
условного перехода и н последний раз. Такая технология называется
П р о гн о зи р о в ан и е п ер ехо д а в п р о ц ессе вы- динамическим прогнозированием условного
п о л н е н и я п р о гр а м м ы с и с п о л ь з о в а н и е м г
и н ф о р м ац и и , д обы той в э то м ж е п р о ц е с с е перехода.
4.8. Конфликты управления 421
Рис. 4.55. На стадии ID тактового цикла 3 определяется, что условный переход должен
состояться, поэтому в качестве следующего адреса PC выбирается значение 72 и обну
ляется инструкция, извлеченная для следующего тактового цикла. Н а такто в о м ц и кл е 4
в качеств е результата с о с то я в ш е го с я у сл о в н о го п ер е х о д а п о ка з ан а извл еченн ая инструкция по
а д р е с у 7 2 и ед и нств енн ы й пузырь, или и н стр укц и я пор, в ко н в е й е р е. (П о скол ьку на с а м о м д е л е
инструкц ия пор является ин стр укц и ей sll $ 0 , $ 0 , 0 , вопрос о том , дол ж на быть вы делена с тад ия ID
в такто в ом ц и кл е 4 или нет, о с т а е тс я сп о р н ы м .)
422 Глава 4. Процессор
Упражнение
Циклы и прогнозирование
Рассмотрим условный переход в цикле, который состоялся девят ь раз подряд, после чего не
состоялся один раз. Какова точность прогнозирования для этого перехода, при условии, что
разряд прогнозирования для него находится в буфере прогнозирования?
Ответ
Состоялся
Рис. 4.57. Составление слота задержки перехода. В ерхн ие блоки н каж д о й п ар е показываю т
к о д д о состав л ени я , а н и ж н и е — п осл е состав л ени я . В п р и м е р е *а~ с л о т з а д е р ж к и со став л ен из
н е з а в и с и м о й и н стр укц и и , ко то рая наход ил ась д о и н стр укц и и п ер е х о д а . Э то н аилучш ий выход.
Подходы «б» и «в» использую тся в т ом случае, когда п о д хо д »а~ н ев о зм о ж е н . В кодовой п о сл ед о
вательности для п р и м е р о в «б» и *в * и спо л ь зов ан и е $s1 в условии п ер е х о д а н е д а е т ин стр укц ии
a d d (чьим р еги с тр о м -п о л у ч ате л е м является S s 1 ) пер ем еститься в слот з ад е р ж к и пер еход а. В ко
дов о й последовательности для п р и м ер а - б - слот зад е р ж ки п ерехода составляется и з инструкции,
ко то р а я сл уж и т целью пер еход а; обы чно ц ел ев ая и н стр укц и я буд ет нуж даться в ко пи р ов ан и и ,
потом у что п о -д р у го м у добраться д о н е е н евозм ож но, П од ход «б - является б о л ее предпочтитель
ны м, когда условный п ер ехо д м о ж е т состоя ть ся с вы сокой д о л е й веро я тн ости: н ап р и м е р , если
это п ер ехо д при вы полнении цикла. И н ако н ец , слот з а д е р ж ки пер еход а м о ж ет быть составлен и з
ин струкц ии, не вы полняемой при выходе и з цикла, как в п р и м е р е «в*. Чтобы д анн ая о п ти м и зац и я
бы ло д о п усти м а для п р и м е р а «б» или «в», д ол ж но быть вполне п р и е м л ем о вы полнение и н стр ук
ции sub, когда п ер е х о д о сущ еств л яется в н ео ж и д а н н о м н ап р авл ен ии. П о д п рием л ем остью мы
п о н и м а е м , что р аб ота будет про дел ан а впустую , но на правильность вы полнения п рограм м ы это
не повлияет, Так м о ж е т получиться, к п ри м еру, есл и на м о м е н т о сущ еств л ен и я п ер ехо д а в н е
о ж и д ан н о м н ап р ав л ен и и $ t4 был н еиспользованны м вр ем енн ы м р еги с тр о м
4.8. Конфликты управления 425
инструкция movn 19. $11. $4 копирует содержимое регистра 11 в регистр 8, при ус
ловии, что значение в регистре 4 не равно нулю; в противном случае эта инструкция
бездействует. Набор инструкций ARM имеет в большинстве инструкций поле условия.
: чопроверка
в о т р и т е три схемы прогнозирования условного перехода: прогнозирование
щ --э . что переход не состоится, того, что он состоится, и динамическое прогно-
щреванне. Предположим, что все эти схемы свободны от издержек при удачном
вгн ози рован и и и имеют издержку едва цикла при неудачном прогнозировании,
р п ш 'ю ж и м , что С|>едняя точность прогнозирования динамического предсказа
н ы составляет 90%. Какой из блоков прогнозирования станет лучшим выбором
Н * следующих условных переходов?
I Условный переход, который выполняется с частотой 5%.
4.9. Исключения
Создание компьютера с возможностями автома
тического [последовательного! программного
прерывания не было легкой задачей, поскольку
количество инструкций, находящихся на разных
стадиях процесса выполнения при поступлении
сигнала прерывания, может быть довольно боль
шим.
Ф р э д Б р у к с м ла д ш и й
И сто чн и к
Т ип соб ы ти я Т е р м и н о л о ги я MIPS
происхож дения
А д р е с в е кто р а и скл ю ч е н и я
Тип и скл ю ч е н и я
(в ш е стн а д ц а те р и ч н о м виде)
^ о п р е д е л е н н а я и нструкц ия 8 0 0 0 0 0 0 0 .,,
4 (м ф м е т и ч е с к о е п ер е п о л н е н и е 8 0 0 0 0 1 8 0 ,,
Упражнение
Исключение в конвейеризированном компьютере
Предположим, что для последовательности инструкций
4016 sub $11 $2. $4
4416 and $12. $2. $5
4816 or $13 $2. $6
4С16 add $1. $2. $1
5016 sit $15. $6 $7
5416 1* $16. 50($7)
Ответ
На рис. 4.60 показаны события начиная с выполнения инструкции ado на стадии ЕХ. Пере
полнение обнаруживается на этой стадии, и в счетчик команд принудительно вводится
значение 8000 0180|в. На тактовом цикле 7 показывается, что add и следующие инструкции
сбрасываются и извлекается первая инструкция кода исключения, Обратите внимание на то,
что сохраняется адрес гой инструкции, которая следует за инструкцией add: 4Cts + 4 - 501в.
Гзмопроверка
■исключение должно быть обнаружено первым в данной последовательности?
»:■: Я . $2, Я # арифметическое переполнение
2.JB" $1. $2. Я # неопределенная инструкция
Щ ы ь $1. S2. Я # ошибка оборудования
Понятие предположения
-кгим из наиболее важных методов получения и использования большей степе-
» параллелизма на уровне инструкций является выстраивание предположения,
в стр аи в ан и е предположение - это подход, позволяющий компилятору или
Чрщессору «догадаться» о свойствах инструкции, чтобы можно было приступить
. выполнению других инструкций, которые могут зависеть от той инструкции,
отнош ении которой выстраиваюсь предположение. Например, мы можем выстра
дать предположение относительно исхода условного перехода, позволяя заранее
■шолнить инструкции, следующие за этим переходом. Можно также, к примеру,
•елположить, что сохранение, предшествующее загрузке, не ссылается на тот же
iipcc, что позволит загрузке быть выполненной до сохранения. Трудности, воз-
« кающие при использовании предположения, заключаются в том, что оно может
ч л ъ неверным. Поэтому любой механизм предположений должен включать как
■под проверки того, была ли догадка верна, так и метод устранения последствий
' инструкций, выполненных на основе предположения. Реализация таких возмож-
жзстей по возвращению к исходным позициям усложняет конструкцию.
Предположение может выстраиваться компилятором или оборудованием. На-
фнмер, компилятор может использовать предположение для изменения порядка
следования инструкций, перемещения инструкции через инструкцию условного
аерехода или перемещения инструкции загрузки через инструкцию сохранения.
Оборудование процессора может осуществлять такие же преобразования в ходе
выполнения программы, используя технологии, которые еще будут рассмотрены
ъ данном разделе.
Механизмы восстановления, используемые для неправильных предположений,
сличаются разнообразием. В том случае, когда предположение выстраивается
•фограммным обеспечением, компилятор обычно вставляет дополнительные ин-
лрукции, проверяющие точность предположения, и предоставляет подпрограмму
исправления ситуации, использующуюся в случае несостоятельности предполо
жения. В том случае, когда предположение выстраивается оборудованием, про
цессор обычно помещает в буфер результаты действий, предпринятых на основе
предположения, до тех пор, пока не убедится в том, что они больше не являются
предположительными. Если предположение было правильным, выполнение ин
струкций завершается за счет того, что содержимому буферов позволяется быть
записанным в регистры или в память. Если предположение было неверным, обо
рудование сбрасывает буферы и выполняет правильную последовательность ин
струкций. .........
Выстраивание предположения становится Выстраивание предположения
причиной возникновения еще одной возмож П о д х о д , б л а го д а р я к о то р о м у к о м п и л я то р
или про цессо р догады вается о п оследстви
ной проблемы: предположение в отношении ях вы полнения и н стр укц и и для их у с т р а н е
определенных инструкций может вызвать ис ния в случае, е с л и о ни оказы ваю т влияние
ключения, которых раньше не было. Допустим, н а вы полнение д р у ги х и н стр укц ий.
438 Глава 4. Процессор
И нструкция з а гр у з к и или с о х р а IF ID EX M EM WB
нения
И нструкция А Л У -о п е р а ц и и или IF ID EX M EM WB
условного п ер еход а
И нструкция з а гр у з к и или с о х р а IF ID EX M EM WB
нения
И нструкц и я А Л У -о п е р а ц и и или IF ID EX M EM WB
условного п ер еход а
И нструкция з а гр у з к и или с о х р а IF ID EX M EM WB
нения
440 Глава 4. Процессор
Рис. 4 .6 1 . Операционный блок для статического параллельного запуска двух инструкций. Н а р и сун ке вы делены д оп ол н и тел ь н ы е
элем енты о боруд ования, необход им ы е для параллельного зап уска двух и н стр укц ий: д оп о л н и !ел ь ны е 3 2 р азр я д а и з п ам я ти и н ст р укц и й , д ва
дополнительны х п ор та ч тен и я и о дин д оп о л н и !еп ь н ы й порт з ап и си в ф айле р еги с тр о в и е щ е о дно А Л У П р е д п о л а га е тс я , что н и ж н е е А Л У з а
н и м ается в ы числением ад р е с о в для и н стр укц и й п ер ен о са данны х, а вер хн ее А Л У з а н и м а е т с я всем
441
р о я л ь н ы м
442 Глава 4. Процессор
Упражнение
Простая диспетчеризация кода при праллельном запуске инструкций
Как можно было бы провести диспетчеризацию следующего цикла для статического кон
вейера с параллельным запуском двух MIPS-инструкций?
Iw no. O(Ssl) # ttO-злеиент иассива
dddu ttO.StO.ts2 § прибавление скаляра из !s2
SW ttO. 0(tsl) * сохранение результата
addi tsl.tsl -4 ♦ декреиемт указателя
bne tsl.tzero.Looo i условньй переход, если, tsl'-O
Измените порядок следования инструкций, чтобы свести к минимуму холостую работу кон
вейера, при условии, что условные переходы спрогнозированы н с конфликтами управления
справляется оборудование.
Ответ
В первых трех инструкциях, как и в последних двух, имеется зависимость от данных.
В табл. 4.9 показан лучший план выполнения этих инструкций. Следует заметить, что толь
ко одна пара инструкций задействует оба слота запуска. Каждая итерация программного
цикла занимает четыре тактовых цикла; при четырех тактовых циклах на выполнение пяти
инструкций мы получаем обескураживающий показатель CPI, равный 0,8, но сравнению
С наилучшим из возможных, рапным 0,5, или показатель IPC, равный 1.25, по сравнению
с 2,0. Учтите, что при вычислении CPI или IPC мы не брали в расчет пустые инструкции
пор, выполняемые в качестве полезных, Если бы это было сделано, то улучшился бы пока
затель CPI, но не производительность!
Таблица 4 .9 . Код после д и с п етч е р и зац и и , как он мог бы выглядеть в M IPS -
ко наейере с параллельным запуском двух инструкций. Пустые
слоты представляют собой инструкции пор
Инструкция АЛ У Инструкция
Тактовый цикл
или условного перехода переноса данных
Loop; Iw $ t0 , 0 ($ s 1 ) 1
addi $ s 1 ,S s 1 ,-4 2
ad d u $ tO ,$lO ,$s2 3
b ne S s 1 ,$ ze ro ,L o o p sw $10, 4 { $ s l ) 4
Упражнение
Развертывание цикла
Развертывание циклов для конвейеров с параллель
Т е х н о л о ги я д о с т и ж е н и я б о л е е в ы со к о й
п ро изв о д и тел ь н ости о т ц иклов, и спо л ь зу
ным запуском нескольких инструкций
ем ы х для о б р а щ е н и я к м а с с и в а м , п р е д у
Посмотрим, насколько хорошо работают развертыва
с м а т р и в а ю щ а я с о з д а н и е м н о ж е с тв е н н ы х ние цикла и диспетчеризация применительно к ранее
ко п и й тел а цикла и о б щ у ю д и с п е т ч е р и з а показанному примеру. Для простоты представим, что
цию и н стр укц и й и з разны х и тер ац и й индекс цикла кратен четырем.
4.10. Параллелизм и расширенный параллелизм на уровне инструкций 443
■втучается, что для диспетчеризации цикла без задержек нам нужно сделать четыре копии
шю ц и к л а . После развертывания и исключения ненужных инструкций, составляющих из-
*Т*ки цикла, все, что останется от цикла, будет представлять собой четыре копии каждой
* инструкций )w, add и s* плюс одну инструкцию sddi и одну инструкцию Ьче. Развернутый
п р о ш е д ш и й диспетчеризацию, показан в табл. 4,10
I И нструкция АЛ У
или у сл о в н о го п е р е х о д а
И нструкция
п ер ено са данны х
Т актовы й цикл
п/нмкыженш’ &
444 Глава 4. Процессор
Таблица 4 .1 0 (продолжение)
Инструкция АЛ У Инструкция
Тактовый цикл
или условного перехода переноса данных
ad d u $ t0 ,$ t0 .$ s 2 lw St2, 8 ($ s 1 ) 3
ad d u $ tl,$ t 1 ,$ s ? lw St3. 4 ( S s t ) 4
addu S t2 ,$ t2 ,S s 2 sw $ t 0 ,1 6 ( $ s 1 ) 5
addu $ t3 ,S t3 ,S s 2 sw S t1 .1 2 (S s 1 ) 6
sw $12, 8 ( $ s 1 ) 7
bne $ s 1 ,$ re ro ,L o o p sw $ t3 , 4 ( $ s 1 ) в
lw $to. 20($s2)
addu Stl. $to. St2
sun is4. *S4. « 3
s lti *t5. *s4. 20
Лаже если инструкция sue готова к выполнению, она сначала должна дождать-
а сверш ения инструкции lw и addu, что может при медленной памяти занять
рвожество тактовых циклов. (В главе 5 рассматриваются неудачные обращения
веда-памяти, которые иногда становятся причиной очень медленного обращения
П а м я ти .) Динамическая диспетчеризация конвейера позволяет частично или
^■ностью избегать возникновения подобных конфликтов.
Общее представление
Конвейеризация и выполнение с параллельным запуском инструкций повышают
пиковую пропускную способность инструкций и пытаются использовать парал
лелизм на уровне инструкций (П.Р). Но взаимозависимости, возникающие при
доступе к данным и при управлении процессом выполнения программы, назнача
ют верхний предел устойчивой производительности, поскольку процессору при
ходится иногда ожидать разрешения взаимозависимостей. Подходы, основанные
главным образом на программных методах использования ILP, базируются на
способности компилятора обнаруживать и сокращать влияние подобных взаимо
зависимостей, а подходы, основанные главным образом на работе оборудования,
зависят от расширений конвейера и механизмов запуска инструкций. Предпо
ложения, выдаваемые компилятором или оборудованием, могут повысить уро
вень потенциальной возможности использования ILP, хотя их нужно применять
с оглядкой, поскольку неверные предположения чаще всего приводят к снижению
производительности.
1тп4п<ии » j ?>« u»
Энергоэффективность и усовершенствованная
конвейеризация
Отрицательным фактором повышения использования параллелизма на уровне
жструкций за счет динамического параллельного запуска и выстраивания пред-
■хложенип является снижение энергоэффективности. Каждое нововведение могло
за в л е к а т ь к работе большее количество транзисторов, что приводило к суще-
ггвенному снижению энергоэффективности. И сейчас, когда мы уперлись в стену
теплового барьера, рассматриваются конструкции, содержащие сразу несколько
процессоров на одном кристалле, где процессоры нс настолько глубоко конвей
еризированы и не настолько агрессивны в плане выстраивания предположений,
а к их предшественники.
Существует представление о том, что более простые процессоры не настолько
'•ыстры, как их более сложные собратья, но при этом они выдают лучший пока
затель производительности в пересчете на ватт потребляемой энергии, поэтому
ни могут выдать более высокую производительность на один кристалл, когда
^инструкции испытывают ограничения, связанные больше с выделяемой тепловой
мощностью, чем с количеством транзисторов.
В табл. 4.11 показано количество стадий конвейера, ширина запуска, уровень
выстраивания предположений, тактовая частота, количество ядер на кристалл
я потребляемая мощность некоторых микропроцессоров. Обратите внимание на
450 Глава 4. Процессор
Intel 4 8 6 1989 2 5 М Гц 5 1 Н ет 1 5 Вт
Самопроверка
Ок*аелнте, имеют ли следующие технологии или компоненты отношение в основ-
*■ к программным или к аппаратным подходам использования ILP. В некоторых
в п а я х ответ может относиться к обоим подходам.
% Прогнозирование условного перехода.
JL Параллельный запуск инструкций.
Слово инструкций очень большой длины - VLIW.
£ Суперскаляр
i Динамическая диспетчеризация.
& Выполнение с изменением последовательности инструкций.
X Выстраивание предположений.
•. Буфер восстановления последовательности.
1 Переименование регистров.
Ьуфер
Самопроверка
Верпы ли следующие утверждения:
Конвейер Opteron Х4, обладающий свойством параллельного запуска, выпол
няет непосредственно х86-инструкции.
2. В Х4 используется динамическая диспетчеризация, но без выстраивания пред
положений.
3. В микроархитек гурс Х4 имеется намного больше регистров, чем требует х86.
1 В Х4 используется менее половины стадий конвейеров ранее выпускавшегося
микропроцессора Pentium 4 Prescott (см. табл. 4.11).
4.14. Упражнения
Предоставлены Милошем Првуловичем (Milos Prvulovic) из Технологического
института Джорджии.
У п р а ж н е н и е 4.1
В базовой однотактной реализации разными
_ инструкциями использую тся разные аппа-
В р ем я вы полнения, п р и с у щ е е той или иной ратные блоки. Следующие три задачи в этом
и н стр укц и и . упражнении используют инструкции:
4.14 Упражнения 457
И н стр укц и я И н те р п р е та ц и я
я add Rd.R5.Rt P e r [R d ]= P e r(R s ]+ P e r [R l)
1 lw Rt.Offs(Rs) P e r[R t]= n a M B T b [P ec [R s ]+ С м е щ ]
4.1.1 [5j <4.1> Какими будут для этих инструкций значения сигналов управле-
**я, генерируемых блоком управления, показанном на рис. 4.2?
4.1.2 [5] <4.1> Какие ресурсы (блоки) выполняют полезную функцию для
раной инструкции?
4.1.3 [10] <4.1> Какие ресурсы (блоки) производят данные на выходе, которые
о 1 используются для этих инструкций? Какие ресурсы не производят данных на
выходе для этой инструкции?
У п р а ж н е н и е 4 .2
Базовая однотактная М IPS-реализация на рис. 4.2 способна выполнять лишь не
которые инструкции. К существующей архитектуре набора инструкций могут быть
добавлены новые инструкции, но решение о целесообразности таких действий,
кроме всего прочего, зависит от стоимости и сложности подобных добавлений,
вносимых в операционный блок и в блок управления процессора. Первые три за
дачи данного упражнения ссылаются на следующую новую инструкцию:
Инструкция Интерпретация
6 Si 1 Rt.Rd.Shift P e r[R d ]= P e r[R t] < < Shift (сд в и г влево на Shift р азр я д о в )
4.2.1 [10] <4.1> Какие из имеющихся блоков (если есть таковые) могут быть
использованы для этой инструкции?
4.2.2 [10] <4.1> Какие новые функциональные блоки (если в них есть потреб
ность) нужны для этой инструкции?
458 Глава 4. Процессор
4.2.3 (10] <4.1> Какие новые сигналы нужны (и нужны ли они) от блока управ
ления для поддержки этой инструкции?
4.2.4 [10] <4.1> Какой будет продолжительность тактового цикла при исполь
зовании данного усовершенствования и без него?
4.2.5 [10] <4.1> Какое ускорение будет достигнуто при добавлении этого усо
вершенствования?
4.2.6 [10] <4.1> Сравните соотношение стоимости и производительности при
использовании данного усовершенствования и без него.
У п р а ж н е н и е 4 .3
Задачи данного упражнения ссылаются на следующий логический блок:
Логический блок
4.3.1 [5] <4.1, 4.2> Содержит ли этот логический блок одни только логические
схемы, одни только триггеры или имеет и то и другое?
4.3.2 [20] <4.1, 4.2> Покажите, как может быть реализован этот блок. Исполь
зуйте только И, ИЛИ, НЕ и D-элементы.
4.14. Упражнения 459
4.3.3 [ 10) <4.1,4.2> Выполните упражнение 4.3.2 еще раз, но все используемые
вми логические элементы И и ИЛИ должны иметь два входа.
• 2 0 пс 1 3 0 пс 2 +0 пс ♦1 4 0 пс 6
6 5 0 пс 1 100 пс 2 +40 пс +1 1 6 0 пс 2
У п р аж н ен и е 4 .4
11ри реализации логического выражения в цифровой логике нужно использовать
доступные логические элементы, чтобы реализовать оператор, для которого не
приспособлен логический элемент. Задачи в данном упражнении ссылаются на
следующие логические выражения:
С и гн а л у п р а в л е н и я 1 С и гн а л у п р а в л е н и я 2
а (((А И Л И В) И Л И С ) И Л И (А И С )) И Л И (А И В) (А И Л И В ) И Л И С
в (((A OR В) и с кл ю ч аю щ ее И Л И В ) И Л И (А И Л И С )) И Л И (А И В) АИВ
4.4.1 [5] <4.2> Создайте логическую схему для сигнала управления 1. Ваша схе
ма должна непосредственно реализовать заданное выражение (не следует занимать
ся реорганизацией выражения с целью его «оптимизации*), используя логические
элементы НЕ и двухвходовые логические элементы И, ИЛИ и исключающее ИЛИ.
4.4.2 [10] Если предположить, что у всех логических элементов одинаковая
латентность, то какой будет длина (в элементах) критического пути в вашей схеме
из упражнения 4.4.1?
4.4.3 [10] <4.2> При реализации нескольких логических выражений можно
сократить стоимость за счет использования одних и тех же сигналов в более чем
одном выражении. Выполните упражнение 4.4.1 еще раз, но теперь реализуйте
оба сигнала управления, 1 и 2, и попытайтесь задействовать «общие* цепи между
460 Глава 4. Процессор
выражениями там, где это возможно. Для остальных трех задач этого упражнения
представим, что нам доступны показанные ниже основные элементы цифровой
логики, обладающие следующими показателями латентности и стоимости:
Д вухвходовое
Д вухвходовое
НЕ Д вухвходояое И и ск л ю ч а ю щ е е
ИЛ И
ИЛИ
а 20 пс 1 30 пс 2 34 пс 3 40 пс 6
б 50 пс 1 100 пс 2 120 пс 2 150пс 2
4.4.4 (10] <4.2> Какова длина критического пути в вашей схеме из упражне
ния 4.4.3?
4.4.5 ( 10J <4.2> Какова стоимость пашей схемы из упражнения 4.4.3?
4.4.6110] <4.2> Какова доля стоимости, сэкономленная в вашей схеме из упраж
нения 4.4.3, за счет совместной, а не раздельной реализации этих двух сигналов
управления?
У п р а ж н е н и е 4 .5
Цель данного упражнения состоит в том, чтобы помочь вам ознакомиться с кон
струкцией и работой последовательных логических схем. Задачи в данном упраж
нении ссылаются на следующую операцию АЛ У:
О п е р ац и я АЛ У
а П р и б ав л ен и е единицы (Х< 1)
в С д в и | влево на д в а р азр я д а ( Х « 2 )
Исключающее
НЕ и или ИЛИ
D-элемент
Латент Стои Латент Стои Латент Стои Латент Стои Латент Стои
ность мость ность мость ность мость ность мость ность мость
а 20 пс 1 30 пс 2 20 пс 2 30 пс 4 40 пс 6
б 40 пс 1 50 пс 2 60 пс 2 80 пс 3 80 пс 12
Время, указанное для D-элемента, является временем его установки. Вход дан-
-ых триггера должен иметь нужное единичное значение в установочное время до
грохождения фронта синхроимпульса (окончания тактового цикла), что позволит
сохранить это значение в триггере.
4.5.3 (10] <4.2> Каким будет продолжительность тактового цикла для состав-
чиной вами схемы в упражнении 4.5.1? Сколько времени займет выполнение
'•2 разрядной операции?
4.5.4 [10] <4.2> Каким будет продолжительность тактового цикла для состав
ленной вами схемы в упражнении 4.5.2? Какое ускорение будет получено за счет
использования этой схемы вместо схемы, составленной в упражнении 4.5.1 для
32-разрядной операции?
4.5.5 (10] <4.2> Вычислите стоимость для схемы, составленной в упражнении
4.5.1, а затем для схемы, составленной в упражнении 4.5.2.
4.5.6 (5] <4.2> Сравните соотношение стоимости и производительности для
двух схем, составленных в упражнениях 4.5.1 и 4.5.2. Для этих задач производи
тельность схемы является величиной, обратной времени, которое необходимо для
проведения 32-разрядной операции.
Упражнение 4.6
Задачи в этом упражнении предполагают, что логические блоки, необходимые
для реализации операционного блока процессора, имеют следующие показатели
латентности:
Расши
Блок сдвига
Память Мульти Файл Память ритель
Сумматор АЛУ ■лево нв
инструкций плексор регистров данных знака
(Add) (ALU) два (Shift-
(1-М ет) (Мид) (Begs) (D-Mem) (Sign-
left-2)
extend)
а 400 пс 100 пс 30 пс 120 пс 200 пс 350 пс 20 пс 2 пс
в 500 пс 150пс 100 пс 180 пс 220 пс 1000 пс 90 пс 20 пс
4.6.1 [10] <4.3> Каким должен быть период тактового цикла, если в процессоре
нужно лишь извлекать идущие друг за другом инструкции (см. рис. 4.6)?
4.6.2 (10] <4.3> Рассмотрим операционный блок, подобный показанному
на рис. 4.11, но для процессора, который имеет только один тип инструкций:
462 Глава 4. Процессор
Ресурс
а П р и б ав л ен и е 4 (к зн ачен и ю PC )
б П ам ять данны х
4.6.4 [10] <4.3> Для какого типа инструкций требуется данный ресурс?
4.6.5 [20] <4.3> Для какого тина инструкций (если таковой имеется) этот ресурс
находится на критическом пути?
4.6.6 [10] <4.3> Предположим, что обеспечивается поддержка только лишь
инструкций beq и add. Дайте объяснение тому, как изменения н заданной латент
ности этих ресурсов влияют на продолжительность тактового цикла процессора,
мри условии, что показатели латентности других ресурсов не изменяются.
Упражнение 4.7
В данном упражнении мы изучим, как латентность отдельных компонентов опе
рационного блока влияет на продолжительность тактового цикла всего операци
онного блока и как эти компоненты используются инструкциями. Для задач этого
упражнения будут использоваться следующие показатели латентности логических
схем операционного блока:
Расши
Блок сдвига
Память Мульти Файл Память ритель
Сумматор АЛУ влево на
инструкций плексор регистров данных знака
(Add) (ALU) два (Shtft-
(1-М ет) (Mux) (Regs) (D-Mem) (Sign-
left-2)
extend)
а 4 0 0 пс 100 пс 30 пс 120 пс 2 0 0 пс 3 5 0 пс 2 0 пс One
в 5 0 0 пс 1 5 0 пс 1 0 0 пс 180 пс 2 2 0 пс 1 000 пс 9 0 пс 2 0 пс
4.7.1 [10] <4.3> Какой будет продолжительность тактового цикла, если нужно
будет но,одерживать только один тип инструкций, связанный с работой АЛУ (add,
and, и т.д.)?
4.7.2 [10] <4.3> Какой будет продолжительность тактового цикла, если нужно
будет поддерживать только инструкции lw?
4.7.3 [20] <4.3> Какой будет продолжительность тактового цикла, если нужно
будет поддерживать инструкции add, beq, lw и sw?
Для остальных задач этого упражнения предположим, что задержки конвейера
отсутствуют, а выполняемые инструкции распределяются следующим образом:
4.14. Упражнения 463
4.7.4 [10] <4.3> В какой доле всех циклов используется память данных?
4.7.5 [10] <4.3> В какой даче всех циклов необходимо использовать ввод в схе
му расширения знака? Что делает эта схема в циклах, в которых ее ввод не нужен?
4.7.6 [10] <4.3> Если можно улучшить показатель латентности одного из за
емны х компонентов операционного блока на 10%, то какой из компонентов нужно
аы брать? Каким будет ускорение работы от этого улучшения?
Упражнение 4.8
1ри производстве кремниевых микросхем дефекты в исходных материалах (напри
мер, в кремнии) и производственные ошибки могут в итоге привести к созданию
дефектных схем. Весьма распространенным является дефект, при котором один
проводник оказывает влияние на появление сигнала в другом проводнике. Это
называется перекрестной наводкой. К специальному классу перекрестной наводки
гное иго я тот случай, когда сигнал связан с проводником, на котором выставлено
постоянное логическое значение (например, с питающим проводником). В таком
случае мы имеем дело с ошибкой типа постоянного нуля или постоянной единицы,
и находящийся под влиянием сигнал имеет соответственно логическое значение 0
или 1.
Следующие задачи ссылаются на показанный ниже сигнал с рис. 4.21:
Сигнал
Ошибка
a П остоя нн ая е д и н и ц а
4.8.4 (10] <4.3, 4.4> Повторите упражнение 4.8.1, но теперь попробуйте про
тестировать наличие этой ошибки в управляющем сигнале Mem Read.
4.8.5 [10] <4.3, 4.4> Повторите упражнение 4.8.1, но теперь попробуйте про
тестировать наличие этой ошибки в управляющем сигнале Jump.
4.8.6 [40] <4.3, 4.4> Используя единый тест, описание которого было дано
в упражнении 4.8.1, мы можем протестировать ошибки в нескольких разных сигна
лах, но обычно не во всех этих сигналах. Дайте описание серии тестов, обнаружива
ющих эту ошибку на всех выходах мультиплексоров (каждого выходного разряда
из каждого из пяти мультиплексоров). Попробуйте, по возможности, сделать это с
помощью нескольких тестов, состоящих из одной инструкции.
Упражнение 4.9
И данном упражнении будет изучена работа однотактного операционного блока
применительно к одной конкретной инструкции. Задачи данного упражнения
ссылаются на следующую M IPS-инструкцию:
Инструкция
a lw $ 1 .4 0 ( $ 6 )
в Label: b n e S 1 .$ 2 ,L a b e l
Сигнал управления 1
a RegDst MemRead
б RegWrrte Mem Read
4.9.4 [20] <4.4> Какие значения имеют эти два сигнала для данной инструкции?
4.9.5 [20] <4.4> Нарисуйте для операционного блока, изображенного на
рис. 4.21, логическую диаграмму той части блока управления, которая выставляет
только первый сигнал. Предположим, что нам нужно поддерживать только ин
струкции lw, sw, beq, add и j (переход).
4.9.6 1201 <4.4> еще раз выполните упражнение 4.9.5, но уже дтя выставления
обоих сигналов.
Упражнение 4.10
В этом упражнении будет изучено, как продолжительность тактового цикла про
цессора влияет на конструкцию блока управления, и наоборот. В задачах данного
упражнения предполагается, что логические блоки, используемые для реализации
операционного блока, имеют следующие показатели латентности:
Блок Блок
Расши
Память Файл сдвига упрев-
Сумма Мульти Память ритель
инструк АЛУ реги влево
тор плексор данных з н а к а
ций (АШ ) стров на два АЛУ
(Add) (Мик) (О -М е т) (Sign-
(1-Mem) (Re^s) (Shift- (ALU
extend)
loft-2) Ctrl)
4.10.1 [ 10] <4.2,4.4> Сколько времени должна занять у блока управления гене
рация сигнала Mem Write, чтобы не был удлинен критический путь операционного
блока, показанного на рис. 4.21?
4.10.2 [20] <4.2. 4.4> На генерацию какого управляющего сигнала на рис. 4.21
тратится больше всего времени и каков должен быть этот показатель у блока управ
ления, если нужно избежать присутствия этой генерации в критическом пути?
4.10.3 120] <4.2, 4.4> Выдача какого из сигналов управления на рис. 4.21 наи
более критична по времени и сколько времени должно уйти у блока управления на
его генерацию, чтобы этот процесс не попал в критический путь?
Упражнение 4.11
В данном упражнении будет подробно изучено, как выполняется инструкция
в однотактном операционном блоке. Задачи данного упражнения ссылаются на
тактовый цикл, в котором процессор извлекает следующее слово инструкции:
Слово инструкции
а 10001100010000110000000000010000
в 00010000001000110000000000001100
4.11.1 [5] <4.4> Какими будут данные на выходах блока расширения знака
и блока перехода «Сдвиг влево на два» (в верхнем левом углу рис. 4.21) для этого
слова инструкции?
4.11.2 [10] <4.4> Какими будут значения на входах управления блоков АЛУ
для этой инструкции?
4.11.3 [10] <4.4> Каким будет новый адрес в счетчике команд (PC ) после вы
полнения этой инсгрукции? Выделите путь, через который нужно пройти, чтобы
определить эго значение.
4.11.4 [10) <4.4> Покажите для каждого мультиплексора Mux знамения его
■.-годных данных во время выполнения этой инструкции, а также значения этих
аегистров.
4.11.5 [10| <4.4> Какими будут входные значения для АЛУ и двух сумматоров?
4.11.6 [ 10] <4.4> Какими будут значения на всех входах для блока «Регистры*?
Упражнение 4.12
? данном упражнении будет изучено влияние конвейеризации на продолжитель-
■ость тактового цикла процессора. Для задач данного упражнения предполагается,
п о отдельные стадии в операционном блоке имеют следующие показатели латент-
аости:
IF ID ЕХ МЕМ WB
а 300 пс 400 пс 350 пс 500 пс 100 пс
б 200 пс 150 пс 120 пс 190 пс 140 пс
АЛУ beq Iw 8W
а 50% 25% 15% 10%
б 30% 25% 30% 15%
4.12.4 [10] <4.5> Каким будет объем использования памяти данных (в процентах
от используемых циклов) при условии, что задержки или конфликты отсутствуют?
4.12.5 [10] <4.5> Каким будет объем использования порта записи в регистр
блока «Регистры» при условии, что задержки или конфликты отсутствуют?
4.12.6 [30] <4.5> Вместо однотактной организации можно воспользоваться
многотактной, где выполнение каждой инструкции занимает несколько циклов,
но выполнение инструкции должно завершиться до того, как будет извлечена
следующая инструкция. При такой организации инструкция проходит только
через те стадии, которые ей действительно необходимы (например, инструкция ST
проходит только через четыре стадии, потому что ей не нужна стадия WB). Срав
ните продолжительности тактовых циклов и показатели времени выполнения для
однотактной, многотактной и конвейеризированной организации.
468 Глава 4. Процессор
Упражнение 4.13
В данном упражнении будет изучено влияние зависимости от данных на работу
базового пятистадийного конвейера, рассмотренного в разделе 4.5. Задачи данного
упражнения ссылаются на следующую последовательность инструкций:
Последовательность инструкции
а lw S1.40(J6)
add J6.J2.t2
sw $6.50(Я)
б lw J5.-16($5)
sw J5.-16(S5)
add J5.S5.J5
Упражнение 4.14
В данном упражнении будет изучено влияние конфликтов ресурсов, конфликтов
управления и конструкции архитектуры набора инструкций на конвейеризирован
ное выполнение. Задачи данного упражнения ссылаются на следующий фрагмент
MIPS-кода:
4.14. Упражнения 469
Последовательность инструкций
а $1.40(16)
beq $2.10.Label : Преапопоккн. что $2 - * $0
sw 16.50(12)
Label: add 12.13.14
sw 13.50(14)
б 1* 15.-16(15)
SW$4.-16(14)
lw $3.-20(14)
beq $2.$0.Label : Предпо(кшин. что 12 !- $0
(— add 15.11.14
4.14.1 [10] <4.5> Для данной задачи предположим, что все условные переходы
удачно спрогнозированы (что исключает все конфликты управления) и не исполь
зуются никакие слоты задержки. Если у нас используется только одна память (для
инструкций и данных), то при необходимости каждого извлечения инструкции в том
же цикле, в котором другая инструкция обращается к данным, у нас неизменно будет
возникать структурный конфликт. Чтобы гарантировать дальнейший прогресс, этот
конфликт должен быть разрешен в пользу инструкции, обращающейся к данным.
Каким будет общее время выполнения этой последовательности инструкций в пя
тистадийном конвейере, имеющем только одну область памяти? Мы видели, что
конфликты данных могут быть разрешены путем добавления к коду пор-инструкций.
Можно ли сделать то же самое с этим структурным конфликтом? Почему?
4.14.2 [20] <4.5> Лля данной задачи предположим, что все условные переходы
удачно спрогнозированы (что исключает все конфликты управления) и не исполь
зуются никакие слоты задержки. Если изменить инструкции загрузки-сохранения,
чтобы они в качестве адреса использовали регистр (без смещения), этим инструк
циям больше не понадобится использование АЛ У. В результате этого стадии МЕМ
и ЕХ могут быть совмещены и у конвейера останутся только четыре стадии. Изме
ните данный код так, чтобы он соответствовал этой измененной архитектуре набора
инструкций Каким будет ускорение при выполнении данной последовательности
инструкций, если предположить, что это изменение не повлияет на продолжитель
ность тактового цикла?
4.14.3 [ 10) <4.5> Какое ускорение будет получено при выполнении этого кода,
если исходы условных переходов будут определены на стадии 1D, по сравнению
с выполнением, при котором исходы будут определяться на стадии ЕХ, если при
этих условных переходах будут отсутствовать слоты задержки?
IF ID ЕХ МЕМ WB
а 100 пс 120 пс 90 пс 130 пс 60 пс
б 180 пс 100 пс 170 пс 220 пс 60 пс
4.14.4 110] <4.5> Используя эти показатели латентности стадий конвейера, по
вторите вычисления ускорения из упражнения 4.14.2, но теперь примите в расчет
470 Глава 4. Процессор
Упражнение 4.15
В данном упражнении будет изучено, как архитектура набора инструкций влияет
на конструкцию конвейера. Задачи данного упражнения ссылают ся на следующую
новую инструкцию:
По о д н о й за ка ж д ы е
К о л и че ств о за м е н Д о п о л н и те л ь н ы е ци кл ы з а д е р ж к и
п -и н с т р у к ц и й
ш 2 20 1
б 3 60 0
4.15.6 |1 0 | <4.5> Каким будет увеличение скорости, достигаемое добавлением
-той новой инструкции? В своих вычислениях нужно исходить из того, что пока-
атель CPI исходной программы (без новой инструкции) равен 1.
Упражнение 4.16
Первые зри задачи этого упражнения ссылаются на следующую МIPS-инструкцию:
И н стр укц и я
а 1и $1,40(16)
add $6.*5.$6
6
4.16.1 [5] <4.6> Что хранится в каждом регистре, расположенном между двумя
стадиями конвейера в процессе выполнения данной инструкции?
4.16.2 |5) <4.6> Какие регистры должны быть прочитаны и какие регистры
читаются на самом деле?
4.16.3 (5) <4.6> Что делает эта инструкция на стадиях ЕХ и МЕМ?
Ц икл
а Loop: lw $1.40(16)
add $5.$5,$8
add $6.$6.$8
sw $1.20(*5)
beq $1 $0.Loop
б Loop: add $1.$2.$3
sw $0.0(11)
sw $0.4($1)
add $2.$2.$4
beq $2.$0.Loop
Упражнение 4 .17
Для задач данного упражнения предполагается, что инструкции выполняются
конвейеризированным процессором в следующих пропорциях:
add beq lw sw
4.17.1 J5] <4.6> В каком процентном отношении ко всем тактовым циклам сум
матор условного перехода на стадии ЕХ генерирует реально используемое значение
при отсутствии задержек и при 60% показателе выполнения условных переходов?
4.17.2 [5] <4.6> Как часто (в процентном отношении ко всем циклам) дей
ствительно понадобится использование всех трех портов файла регистров (двух
на чтение и одного на запись) в одном и том же цикле, если не будет задержек?
4.17.3 [5] <4.6> Как часто (в процентном отношении ко всем циклам) будет
использоваться память данных, если не будет задержек?
Упражнение 4.18
Первые три задачи данного упражнения ссылаются на выполнение следующей ин
струкции в конвейеризированном операционном блоке с рис. 4.45 и предполагают
следующую продолжительность тактового цикла, латентность АЛУ и латентность
мультиплексора Mux:
Г---------
Продолжительность
Инструкция Латентность АЛУ Латентность Mux
тактового цикла
а add S1.S2.S3 1 0 0 пс 8 0 пс 10 п с
в S it S2.S1.S3 8 0 пс 5 0 пс 2 0 пс
4.18.1 [ 10] <4.6> Какими для каждой стадии конвейера будут значения сигналов
управления, выставленных этой инструкцией на данной стадии?
4.18.2 [10] <4.6, 4.7> Сколько времени займет генерация сигнала управления
ALUSrc? Сравните это показатель с показателем для однотактной организации.
4.18.3 Каково значение сигнала PCSrc для этой инструкции? Этот сигнал
генерируется на раннем этапе стадии МЕМ (для этого используется только один
логический элемент И). Какую можно привести причину в пользу того, чтобы
сделать это на стадии ЕХ? Какую можно привести причину против того, чтобы
сделать это на стадии ЕХ?
Сигнал 1 Сигнал 2
Упражнение 4.19
Это упражнение предназначено для того, чтобы помочь разобраться в балансе
«стоимость—сложность- производительность» перенаправления данных в конвей
еризированном процессоре. Задачи в данном упражнении ссылаются на конвейери
зированные операционные блоки, изображенные на рис. 4.41. В этих задачах пред
полагается, что для каждой инструкции, выполняемой в процессоре, следующая
за ней инструкция имеет специфичный тип зависимости данных «чтение после
записи». Тип зависит от стадии (ЕХ или МЕМ) и следующей инструкции (первая
инструкция, которая следует за той, которая произвела результат, вторая инструк
ция, которая следует за ней, или обе эти инструкции). Предполагается, что запись
в регистр происходит в первой половине тактового цикла а чтение регистра про
исходит во второй половине цикла, поэтому зависимости «ЕХ к третьей* и «МЕМ
ко второй» в расчет нс берутся, поскольку они не могут привести в конфликтам
данных. Также предполагается, что в отсутствие конфликтов данных показатель
CPI процессора равен единице.
4.19.1 (10] <4.7> Какая доля циклов придется на задержки, связанные с кон
фликтами данных, если не будет использовано препровождение данных?
4.19.2 [5] <4.7> Какая доля циклов придется на задержки, связанные с кон
фликтами данных, если будет использовано полное препровождение данных (пре
провождение всех результатов, которые могут ему подвергаться)?
4.19.3 (10] <4.7> Предположим, что мы нс можем иметь мультиплексоры
с тремя входами, которые необходимы для полного препровождения данных. Мы
должны решить, откуда лучше осуществлять препровождение: только из регистра
конвейера ЕХ/М ЕМ (препровождение в следующий цикл) или только из регистра
конвейера M EM /W B (препровождение через два цикла). Какой из двух вариантов
приводит к меньшему количеству циклов задержки данных?
ЕХ
ЕХ ЕХ ЕХ(Препр.
(Лрепр.
IF ID (без (с П О Л Н Ы М только из МЕМ WB
только из
прелр.) прелр.) MEM/WB)
ЕХ/МЕМ)
а 100 пс 50 пс 75 пс 110 пс ЮОпс 100 пс ЮОпс 60 пс
с 250 пс 300 пс 200 пс 350 пс 320 пс ЗЮпс 300 пс 200 пс
4.14. Упражнения 475
Упражнение 4.20
Задачи данного упражнения ссылаются на следующие последовательности ин
сгрукций:
Последовательность инструкций
а 1* *1.40(1?)
add *2.*3.13
add 11.$1.$2
sw 11.20(12)
б add 11.12.13
sw 12.0(11)
Iw 11.4(12)
add 12.12.11
Для остальных трех задач данного упражнения предполагается, что перед вы
полнением инструкций все значения в памяти данных равны нулю, а регистры с $0
по 13 имеют следующие исходные значения:
so SI *2 S3
a 0 1 31 1000
б 0 -2 63 2500
4.20.4 (5) <4.7> Какое значение будет препровождено первым и какое значение
будет им переписано?
476 Глава 4. Процессор
Упражнение 4.21
Это упражнение предназначено для того чтобы помочь вам разобраться во взаимо
отношениях между препровождением, обнаружением конфликтов и конструкцией
архитектуры набора инструкций. Задачи данного упражнения ссылаются на при
веденные далее последовательности инструкций и предполагают, что они выпол
няются операционным блоком, имеющим конвейер из пяти стадий:
П о с л е д о в а т е л ь н о с т ь и нстр у к ц и й
а lw $1.40(*6)
add S2.S3.S1
add S1.S6.S4
sw *2.20C*4>
and S I. 11.$4
б add S I. IS.S3
sw $1.0(S2)
Iw S1.4CS2)
add S5.S5.S1
sw S I.0(12)
Упражнение 4.22
Это упражнение предназначено для того, чтобы помочь вам разобраться во взаимо
отношениях между слотами задержки, конфликтами управления и выполнением
условных переходов в конвейеризированном процессоре. В данном упражнение
предполагается, что следующий M IPS-код выполняется на процессоре, имеющем
пятнстадийный конвейер, полное препровождение и блок прогнозирования ус
ловных переходов:
а Label 1: lw 11,40(16)
bea 12.13.Label2 . Состоялся
add 11.16.14
Label2: beq 11.12.Label 1 . He состоялся
sw 12.20(14)
and 11.11.14
б add 11.15.13
Label 1: sw 11.0(12)
add 12.12.13
beq l2.i4.Labell : не состоялся
add 15.15.11
sw 11.0(12)
4.22.1 [10] <4.8> Нарисуйте для этого кода конвейерную диаграмму выполне
ния, при условии, что слоты задержки отсутствуют, а условные переходы выпол
няются на стадии ЕХ.
4.22.2 [10] <4.8> Выполните упражнение 4.22.1 еще раз, но теперь при условии
использования слотов задержки. Теперь в этом коде инструкция, которая следует
за инструкцией условного перехода, является инструкцией слота задержки для
этого условного перехода.
4.22.3 [20] <4.8> Один из способов перемещения разрешения условного пере
хода на одну стадию раньше заключается в отказе от использования операции АЛ У
в условных переходах. Инструкции условного перехода должны иметь вид «bez
Rd,Label» и «bnez Rd,Label* и осуществлять условный переход, когда регистр со
ответственно имеет или не имеет нулевое значение. Внесите изменения в этот код
для использования вместо инструкции Deq этих инструкций условного перехода.
Можно предположить, что для использования в качестве временного регистра
доступен регистр $8 и что может быть использована инструкция R-типа seq (set if
equal —установка по равенству).
Упражнение 4.23
Важность наличия хорошего блока прогнозирования условных переходов зависит
от того, насколько часто выполняются условные переходы. Наряду с точностью
блока прогнозирования определяется также и время, затрачиваемое на задержки,
связанные с неверно спрогнозированными условными переходами. В данном
упражнении следует представить, что динамические инструкции среди разных
категорий инструкции имеют следующее распределение:
R-типа beq jmp lw sw
а 50% 15% 10% 15% 10%
в 30% 10% 5% 35% 20%
4.23.2 [10J <4.8> Выполните упражнение 4.23.1 еще раз для предсказателя
«никогда не состоится».
4.23.3 [ 10] <4.8> Выполните упражнение 4.23.1 еще раз для двухразрядного
нредсказателя.
4.23.4 [10] <4.8> Какое ускорение может быть достигнуто при использова
нии двухразрядного предсказателя, если мы сможем преобразоваться половину
•.нструкций условного перехода путем замены инструкции условного перехода
инструкцией АЛУ? Предположим, что у инструкций, действия которых будут
предсказаны правильно и неправильно, имеются равные шансы на замену.
4.23.5 [10] <4.8> Какое ускорение может быть достигнуто при использова
нии двухразрядного предсказателя, если мы сможем преобразоваться полови
ну инструкций условного перехода путем замены инструкции условного пере-
\ода двумя инструкциями АЛУ? Предположим, что у инструкций, действия
которых будут предсказаны правильно и неправильно, имеются ранные шансы на
замену.
4.23.6 [10] <4.8> Действия одних инструкций условного перехода более пред-
казуемы, чем действия других. Если мы знаем, что 80% всех выполненных ин
струкций условного перехода являются легкими для предсказания условными
переходами к началу цикла, то какой будет точность двухразрядного предсказателя
для оставшихся 20% инструкций условного перехода?
Упражнение 4.24
В данном упражнении оценивается точность различных предсказателей условных
переходов для следующих повторяющихся схем их исходов (например, в цикле):
И схо д ы усл ов ны х п е р е хо д о в
а С, С. НС, С
б С, С, С, НС, НС
4.24.1 [5] <4.8> Какой будет точность предсказателя «всегда состоится* и пред
сказателя «никогда не состоится» для этой последовательности исходов условных
переходов?
4.24.2 [5| <4.8> Какой будет точность двухразрядного предсказателя для пер
вых четырех условных переходов в этой схеме при условии, что предсказатель
начинает свою работу из состояния, показанного в нижнем левом углу рис. 4.56
(«Предсказание, что не состоится»).
4.24.3 [10] <4.8> Какой будет точность двухразрядного предсказателя, если эта
схема постоянно повторяется?
4.24.4 [30] <4.8> Придумайте конструкцию предсказателя, достигающего со
вершенной точности, если эта схема постоянно повторяется. Ваш предсказатель
должен быть последовательной схемой с одним выходом, выдающим предсказание
(1 для предсказания, что переход состоится, и 0 для предсказания, что он не со
стоится), и со входами, предназначенными только лишь для тактовых импульсов
480 Глава 4. Процессор
Упражнение 4.25
В данном упражнении исследуется, как обработка исключений влияет на конструк
цию конвейера. Первые три задачи данного упражнения ссылаются на следующие
две инструкции:
Инструкция 1 Инструкция 2
4.25.1 (5] <4.9> Какое исключение может каждая из этих инструкций иници
ировать? Укажите стадию конвейера, на которой обнаруживается каждое из этих
исключений.
4.25.2 [10] <4.9> Покажите, как должна быть изменена организация конвейера,
чтобы появилась возможность обработки этого исключения, если для каждого ис
ключения имеется отдельный адрес обработчика. Можно предположить, что адреса
этих обработчиков были известны еще при конструировании процессора.
4.25.3 [10] <4.9> Если вторая инструкция из этой таблицы извлекается сразу
же после первой инструкции, опишите, что происходит в конвейере, когда первая
инструкция становится причиной первого исключения из тех, что перечислены
при выполнении упражнения 4.25.1.
О б р а б о тч и к О б раб о тч ик О б раб о тч ик
О б раб о тч ик
О брабо тчик недопусти неопределен недопустим о
сб оя о б о р у д о
пе реп ол н ен и я м о го ад ре са ной и н с т р у к го а д р е са
вания
д ан н ы х ци и и н с тр у кц и и
в 0 x0 0 0 0 0 0 0 В 0 x0 0 0 0 0 0 1 0 0 x 0 0 0 0 0 0 10 0 x0 0 0 0 0 0 2 0 0x00000028
4.14. Упражнения 481
Упражнение 4.26
В данном упражнении исследуется влияние обработки исключений на конструк
цию блока управления и на продолжительность тактового цикла процессора. Пер
вые три задачи данного упражнения ссылаются на следующие M IPS-инструкции.
инициирующие исключение:
a ad d S 0 .S 1 .S 2 Арифметическое переполнение
б 1м S 2 . 4 0 C S 3 ) Неправильный адрес в памяти данных
IF 10 ЕХ МЕМ WB
б 2 0 0 пс 170 пс 2 Ю пс 2 1 0 пс 150пс
482 Глава 4. Процессор
4.26.4 [10] <4.9> Каким будет общее ускорение при перемещении проверки на
переполнение на стадию МЕМ, если исключение, связанное с переполнением, про
исходит один раз для каждых 100 000 выполняемых инструкций? Предполагается,
что такое изменение уменьшает показатель латентности стадии ЕХ на 30 пс и что
показатель IPC, достигаемый конвейеризированным процессором при отсутствии
исключений, равен 1.
4.26.5 [20] <4.9> Можем ли мы сгенерировать сигналы управления исключени
ем не на стадии ID, а на стадии ЕХ? Объясните, как это будет работать или почему
это не будет работать, используя инструкцию «Ьпе $4,$5,Label* и эти показатели
латентности стадии конвейера в качестве примера.
4.26.6 110] <4.9> Определите, сколько сигналов сброса должен сгенерировать
блок управления при условии, что латентность каждого мультиплексора (M ux)
равна 40 пс? Какой из сигналов является наиболее важным?
Упражнение 4.27
В данном упражнении исследуется взаимодействие обработки исключения с ин
струкциями условного перехода и инструкциями загрузки-сохранения. Задачи
данного упражнения ссылаются на следующие инструкции условного перехода
и соответствующие инструкции слота задержки:
У сл овны й п е р е хо д и с л о т з а д е р ж к и
а beq $1.50.Label
sw $6. SO($1)
б beq *5.$0.Label
Г О Г $5,И.И
а sw *6.50С*1>
б sw $5.60(13)
4.14. Упражнения 483
4.27.4 [10] <4.9> Что произойдет, если условный переход состоялся, инструк-
«•ч, находящаяся на метке «Label», оказалась недопустимой, первой инструкцией
ц^иботчика исключения оказалась показанная выше инструкция swи эта инструк
ция сохранения обращается но недопустимому адресу данных?
4.27.5 [10] <4.9> Если вычисление адреса загрузки-сохранения может привести
■переполнению, можем ли мы отложить обнаружение исключения, связанного
|переполнением до стадии МЕМ? Для объяснения происходящего используйте
■данную инструкцию сохранения.
4.27.6 [ 10] <4.9> Для отладки полезно будет иметь возможность обнаружения
■омента. когда конкретное значение записывается по конкретному адресу памяти.
Мы хотим добавить два новых регистра: WADDR и WVAL Процессор должен ини
циировать исключение, когда значение, равное значению регистра WVAL, готово
. записи по адресу, значение которого находится в регистре WADDR. Какие изме-
кния вы внесете в конвейер для реатизации этого замысла? Как эта инструкция sw
If. дет обработана вашим модифицированным операционным блоком?
Упражнение 4.28
3 данном упражнении сравнивается производительность процессоров с запуском
одной инструкции с параллельным запуском двух инструкций, при котором учи
тывается преобразование программ, произведенное для оптимизации выполнения
та процессоре с параллельным запуском двух инструкций. Задачи данного упраж
нения ссылаются на следующий цикл (написанный на языке С):
Код на языке С
t>[1D—
a[i ]:
L for(i-0:#[1]!-a[l+l]:1++)
am-O;
i i a b c Свободны
a $1 $2 S3 $4 $5 $6 ,$7 ,$ 8
6 $4 $5 S6 $7 $8 S1.S2.S3
4.28.1 [10| <4.10> Транслируйте этот С-код в инструкции MIPS. Ваша транс
ляция должна быть непосредственной, без перест ановки инструкций с целью полу
чения более высокой производительности.
4.28.2 [10] < 4 .10> Если выход из цикла осуществляется после выполнения
только двух итераций, нарисуйте конвейерную диаграмму для вашего M IPS-кода
из упражнения 4.28.1, выполняемого на процессоре с параллельным запуском двух
484 Глава 4. Процессор
Упражнение 4.29
В данном упражнении рассматривается выполнение цикла на суперскалярном
процессоре со статической диспетчеризацией. Чтобы упростить упражнение, пред
положим, что в одном и том же цикле разнотипные инструкции могут выполняться
в любом сочетании, например на супсрскалярном процессоре с параллельным
запуском трех инструкций ими могут быть три АЛУ-операции, три инструкции
условного перехода, три инструкции загрузки-сохранения или любая комбинация
этих инструкций. Учтите, что это снимает только лишь ограничения, касающиеся
ресурсов, но взаимозависимости, касающиеся данных и управления, должны по-
прежнему обрабатываться соответствующим образом. Задачи в данном упражнении
ссылаются на следующий цикл:
Цикл
а Loop: 1м S1.40(S6)
add $5.55.$1
sw $1.20(15)
addi $6.16.4
addi $5.$5.-4
oeq $6.$0.Loop
в L O O P: add 11.$2,13
s m $0.0(11)
addi $2,12.4
beq $2.10.Loop
4.14. Упражнения 485
i .29.1 (10) <4.10> Если выполняется большое количество (например, 1 000 000)
•—раций данного цикла, определите долю всех операций чтения регистров, кото-
м и дут полезны при использовании суперскалярного процессора со статическим
■раллельным запуском двух инструкций.
4.29.2 [10) <4.10> Если выполняется большое количество (например, 1 000 000)
■►раций данного цикла, определите долю всех операций чтения регистров, кото-
■>»< будут полезны при использовании суперскалярного процессора со статиче-
хнм параллельным запуском трех инструкций. Сравните полученный результат
г результатом для процессора с параллельным запуском двух инструкций из
рлжнения 4.29.1.
4.29.3 [ 10) <4.10> Если выполняется большое количество (например, 1 000 000)
гтераций данного цикла, определите долю всех циклов, в которых порты записи
•. \ или трех регистров используются в супсрскалярном процессоре со статиче-
твш параллельным запуском трех инструкций.
4.29.4 [20] <4.10> Проведите однократное развертывание этого цикла и спла
нируйте выполнение его инструкций для суперскалярного процессора со статиче-
г- им параллельным запуском двух инструкций. Предположим, что в цикле всегда
выполняется четное количество итераций. При внесении изменений в код для
ключсния зависимостей можно использовать регистры от $10 и до $20.
4.29.5 120) < 4.10> Каким будет ускорение от использования вашего кода из
пражнення 4.29.4 вместо исходного кода при выполнении его на суперскалярном
процессоре с параллельным запуском двух инструкций? Предположим, что в этом
цикле выполняется большое количество итераций (например, 1 000 000).
4.29.6 [10] <4.10> Каким будет ускорение от использования вашего кода из
•пражнения 4.29.4 вместо исходного кода при выполнении его на конвейеризиро
ванном процессоре (с запуском только одной инструкции за один тактовый цикл)?
Предположим, что в этом цикле выполняется большое количество итераций (на
пример, 1 000 000).
Упражнение 4.30
В данном упражнении у нас будет ряд допущений. Во-первых, мы предположим,
что суиерскалярный процессор с параллельным запуском N-инструкций может
выполнить любые N инструкций в одном и том же тактовом цикле, независимо
от их типов. Во-вторых, мы предположим, что каждая инструкция выбирается
независимо, безотносительно той инструкции которая ей предшествует или сле
дует за ней. В-третьих, мы предположим, что зависимости, связанные с данными,
не приводят к задержкам, что не используются слоты задержки и что условные
переходы выполняются в конвейере на стадии ЕХ. И наконец, мы предположим,
что инструкции, выполняемые в программе, распределены следующим образом:
4.30.1 (5) <4.10> Каким будет показатель CPI, достигаемый при выполнении
этой программы на статическом суперскалярном процессоре с параллельным за
пуском двух инструкций?
4.30.2 [ 10J <4.10> Каким будет ускорение, достигнутое за счет добавления воз
можности предсказания двух условных переходов за один цикл на статическом
суперскалярном процессоре с параллельным запуском двух инструкций, чей пред
сказатель способен обслужить лишь один условный переход за один цикл? Предпо
ложим, что для условных переходов, которые предсказатель не может обработать,
применяется политика задержки при условном переходе.
4.30.3 [10) <4.10> Какое ускорение достигается добавлением второго порта
записи в файл регистров к статическому суперскалярному процессору, имеющему
только один порт записи в файл регистров?
4.30.4 [5] <4.10> Какое ускорение достигается за счет доведения до совершен
ства работы предсказателя условных переходов на статическом сунерскалярном
процессоре с параллельным запуском двух инструкций?
4.30.5 [ 10] <4.10> Выполните упражнение 4.30.4 еще раз, но теперь для процес
сора с параллельным запуском четырех инструкций. Какое можно сделать заклю
чение о важности удачного предсказания условных переходов, когда в процессоре
увеличивается количество параллельно запускаемых инструкций?
4.30.6 <4.10> Выполните упражнение 4.30.5 еще раз, но теперь при условии,
что у процессора с параллельным запуском имеется 50 стадий конвейера. Предпо
ложим, что каждая из исходных пят и стадий разбита на десять новых стадий и что
условные переходы выполняются в первых из десяти новых стадий F.X. Какое
можно сделать заключение о важности удачного предсказания условных переходов,
когда у процессора увеличивается глубина конвейера?
У п р а ж н е н и е 4 .31
Задачи данного упражнения ссылаются на следующий цикл, представленный как
в виде кода х86, так и в виде M IPS-трансляции этого кода. Можно предположить,
что до выхода из этого цикла выполняется большое количество итераций. При
определении производительности это означает, что вам нужно только определить,
какая будет производительность в «устоявшемся состоянии», а не для нескольких
первых и нескольких последних итераций цикла. Также можно предположить
полную поддержку препровождения данных и совершенное предсказание услов
ных переходов без слотов задержки, при которых вызывают беспокойство только
конфликты ресурсов и конфликты данных. Обратите внимание на то, что у боль
шинства инструкций х86, используемых в этой задаче, имеется по два операнда.
Последний (как правило, второй) операнд инструкции показывает как значение
данных первого источника, так и расположение итоговых данных. Если операции
требуется значение данных второго источника, оно показывается другим операндом
инструкции. Например, инструкция «sub (edx).eax* считывает данные из места
памяти, указанного в регистре e d x , вычитает это значение из значения регистра е а х
и помешает результат обратно в регистр е а х .
4.14. Упражнения 487
4.31.1 [20] <4.11> Какой показатель CPI будет достигнут, если M IPS-версия
агиго цикла будет выполняться на процессоре со статической диспетчеризацией,
пгорый имеет конвейер из пяти стадий и запускает только одну инструкцию за
п л н тактовый цикл?
4.31.2 [20] < 4.11> Какой показатель CPI будет достигнут, если х86-версия
Г<>т цикла будет выполняться на процессоре со статической диспетчеризацией,
с горый имеет конвейер из семи стадий и запускает только одну инструкцию за
п и н тактовый цикл? Стадии конвейера называются IF, ID, ARD, MRD, EXE
i WB. Стадии IF и ID аналогичны таким же стадиям в пятистадийном конвейере
•4IPS. На стадии ARD вычисляется адрес считываемого места в памяти, на стадии
MRD выполняется чтение из памяти, на стадии EXE выполняется операция, а на
гадии WB результат записывается в регистр или в память. Память данных имеет
орт чтения (для инструкций на стадии MRD) и отдельный порт записи (для ин-
грукций на стадии WB).
4.31.3 [20] < 4 .11> Какой показатель CPI будет достигнут, если х86-версия
ттого цикла будет выполняться на процессоре, который производит внутреннюю
трансляцию этих инструкций в M IPS-подобные микрооперации, а затем выполняет
.ш микрооперации на пятистадийном конвейере со статической диспетчериза-
ией и запуском одной инструкции за один тактовый цикл. Учтите, что счетчик
инструкций, используемый при вычислении CPI для этого процессора, является
счетчиком инструкций х86.
4.31.4 [20] <4.11> Какой показатель CPI будет достигнут, если M IPS-версия
э т о т цикла выполняется на процессоре с динамической диспетчеризацией и с запу
ском одной инструкции за один тактовый цикл? Предположим, что наш процессор
не осуществляет переименование регистров, поэтому вы можете только изменить
порядок следования инструкций, не имеющих зависимостей от данных.
4.31.5 [30] <4.10, 4.11> Предположим, что доступно большое количество сво
бодных регистров. Выполните переименование регистров в M IPS-версии этого
цикла для устранения как можно большего количества зависимостей от данных,
существующих между инструкциями в одной и той же итерации цикла. А теперь
488 Глава 4. Процессор
У п р а ж н е н и е 4 .3 2
Для задач данного упражнения предполагается, что условные переходы состав
ляют некоторую долю от всех выполняемых инструкций и имеют определенный
показатель точности предсказания исхода условного перехода. Предположим, что
процессор никогда не задерживает свою работу из-за зависимостей, связанных
с данными и ресурсами, то есть процессор всегда извлекает и выполняет макси
мальное количество инструкций за цикл, ест и отсутствуют конфликты управления.
Для зависимостей, связанных с управлением, процессор использует предсказание
условных переходов и продолжает извлечение инструкций из предсказанного пути.
Если условный переход был предсказан неправильно, когда разрешен исход услов
ною перехода, инструкции, извлеченные после неверно предсказанного перехода,
сбрасываются, и следующий цикл процессор начинает с извлечения инструкций
из правильного пути.
♦ 32.3 [51 <4.11 > Сколько инструкций извлечено из неправильного пути для
c ju o ro неверно спрогнозированного условного перехода в процессоре с парал-
» ьным запуском четырех инструкций?
4.32.4 (10J < 4.11> Каким будет ускорение, вызванное заменой процессора
* расширением возможности по параллельному запуску с четырех до восьми ин-
гтукций? Предполагается, что процессор с восемью параллельно запускаемыми
-трукциями отличается от процессора с четырьмя параллельно запускаемыми
ш- трукциями только количеством инструкций, приходящихся на один цикл, а вс
* -м остальном они идентичны (в глубине конвейера, стадии обнаружения исхода
«лонного перехода и т. д.).
4.32.5 [10) <4.11> Каким будет ускорение работы, если условные переходы
■гдут выполняться на одну стадию раньше в процессоре с параллельным запуском
-ырех инструкций?
4.32.6 [10] <4.11> Каким будет ускорение работы, если условные переходы
«дут выполняться на одну стадию раньше в процессоре с параллельным запуском
* сьми инструкций? Проанализируйте разницу между этим результатом и резуль-
jto m . полученным при решении упражнения 4.32.5.
У пр аж н ен ие 4 .3 3
В данном упражнении исследуется влияние предсказания условного перехода на
!роизводительность глубоко конвейеризированного процессора с параллельным
запуском инструкций. Задачи данного упражнения ссылаются на процессор со
ледующим количеством стадий конвейера и следующим количеством запускаемых
в одном тактовом цикле инструкций:
а 10 4
6 25 2
4.33.1 [10] <4.11 > Сколько портов чтения файла регистров должен иметь про
цессор, чтобы избежать любых конфликтов ресурсов при чтении регистров?
4.33.2 [10] <4.11 > Каким ожидается улучшение производительности по срав
нению с процессором с запуском одной инструкции за тактовый цикл, имеющим
пятистадийный конвейер, при отсутствии неправильно предсказанных условных
переходов и зависимостей от данных? Предположим, что продолжительность так
тового цикла уменьшается пропорционально количеству стадий конвейера.
4.33.3 [10] <4.11> Выполните упражнение 4.33.2 еще раз, но теперь при усло
вии, что у каждой выполняемой инструкции имеется зависимость данных по типу
«чтение после записи» с инструкцией, выполняющейся сразу после нее. Можете
предположить, что вам не нужны циклы задержки, то есть препровождение данных
позволяет следующим друг за другом инструкциям выполняться в непрерывных
циклах.
490 Глава 4. Процессор
Для остальных трех задач данного упражнения, если задача не определена иначе,
нужно принять в качестве условия некоторую статистику, касающуюся процент
ного отношения инструкций условного перехода, точности предсказания и потерь
производите;!ьности из-за неточности предсказаний:
4.33.4 [10] <4.11> Какой процент от всех циклов полностью тратится на из
влечение инструкций из неверных путей при заданной доле инструкций условных
переходов и точности предсказания условных переходов? Показатель снижения
производительности следует проигнорировать.
4.33.3 [20] <4.11> Какой должна быть точность предсказаний условных пере
ходов, если мы хотим ограничить задержки, связанные с неправильно предсказан
ными условными переходами показателем, не превышающим данный процентный
показатель, относящийся к идеальному (без задержек) времени выполнения?
Заданный показатель точности предсказания следует проигнорировать.
4.33.6 [ 10] <4.11 > Какой должна быть точность предсказаний условных пере
ходов, если нам нужно получить ускорение 0,5 (половинное) относительно этого
же процессора, но только с идеальным предсказателем условных переходов?
У п р а ж н е н и е 4 .3 4
Данное упражнение разработано, чтобы помочь вам разобраться в смысле за
блуждения «Конвейеризация —это просто* из раздела 4.12. Первые четыре задачи
данного упражнения ссылаются на М IPS-инструкции:
Инструкция Интерпретация
а add Rd.Rs.Rt Per[Rd]=Pei [RsJ+PerfRIJ
в 1w Rt,Offs(Rs) Pei [Rt|=naMBTb(Per(Rs] «Смещение]
Инструкция Интерпретация
л : beq R s. R t. Label Если Per[Rs] == Per[Rt) PC=PC-Смещение
and R d. R s. Rt Per[Rd]* Per[Rs]& Per[RtJ
4.34.4 [10] <4.13> Опишите, как нужно расширить ваш операционный блок
*-• упражнения 4.34.1, чтобы он мог поддерживать также и эту инструкцию. Ваш
рагширеннмй операционный блок должен быть сконструирован для поддержки
Валько указанных двух инструкций.
4.34.5 [10] <4.13> Выполните упражнение 4.34.2 еще раз для вашего расширен-
■ого операционного блока из упражнения 4.34.4.
4.34.6 [ 10] <4.13> Выполните упражнение 4.34.3 еще раз для вашего расширен-
■ого операционного блока из упражнения 4.34.4.
У пр аж н ен ие 4 .3 5
Зго упражнение должно помочь вам лучше разобраться со взаимоотношениями
между конструкцией архитектуры набора инструкций и конвейеризацией. Для за
дач данного упражнения предполагается, что у нас имеется конвейеризированный
роцессор с параллельным запуском нескольких инструкций с определенными
показателями: количество стаций конвейера, количество параллельных инструк
ций, запускаемых в одном тактовом цикле, сталия, в которой определяется исход
условного перехода, и точность его предсказания:
4.35.1 [5] <4.8, 4.13> Конфликты управления могут быть устранены путем до
бавления слотов задержки условных переходов. Сколько слотов задержки должно
следовать за каждым условным переходом, если мы хотим исключить все конфлик
ты управления в данном процессоре?
4.35.2 110] < 4.8,4.13> Каким будет ускорение, достигаемое за счет использова
ния четырех слотов замедления условных переходов для сокращения конфликтов
управления в данном процессоре? Предположим, что зависимости данных между
инструкциями отсутствуют и что все четыре слота задержки могут быть заполнены
полезными инструкциями без увеличения количества выполняемых инструкций.
492 Глава 4. Процессор
}
в forCi«0:afi]!«d|"i+l]:1++)(
)
Упражнение 4.36
Это упражнение предназначено для того что бы помочь вам лучше разобраться
с последним заблуждением из раздела 4.12 «Недооценка особенностей набора
инструкций может отрицательно сказаться на конвейеризации*. Первые четыре
задачи данного упражнения ссылаются на следующие новые Ml PS-инструкции:
Инструкция Интерпретация
а lwinc R t.O ffs e t(R s ) P e r[R t> Панять С Р е г[ R s 3*-Спеи|ениеJ
P e rC R s ]- P e r[ R s ] * 4
Задержки, Задержки,
add beq tw SW addm связанные связанные
с управлением с данными
1 35% 20% 20% 10 % 5% 5% 5%
6 25% 10 % 25% 10 % 10 % 10 % 10 %
Упражнение 4.37
В данном упражнении исследуются некоторые побочные эффекты, присущие
конвейеризации, такие как продолжительность тактового цикла и использова
ние ресурсов оборудования. Первые три задачи данного упражнения ссылаются
на M IPS-код, написанный с учетом того, что процессор не использует слоты за
держки:
494 Глава 4. Процессор
а lw $1.40(16)
beq $ 1 .* 0 .Label : Предполагаете», что *1 - « SO
sw $6.50(11)
Label: add $ 2 .J 3 . i l
sw $2.50(11)
6 lw $5.-16(15)
sw $ 5 .-1 6 (*5)
lw $5,-20(15)
beq $ 5 ,1 0 .Label : Предполагается, что $5!-10
add $5.$5.$5
4.37.1 [5] < 4.3,4.14> Какие части основного однотактного процессора исполь
зуются всеми этими инструкциями? Какие части используются меньше всего?
4.37.2 (10) <4.6, 4.14> Какова востребованность порта чтения и порта записи
блока памяти данных?
4.37.3 [10] <4.6, 4.14> Предположим, что у нас уже имеется однотактная кон
струкция. Сколько разрядов нам понадобится для регистров конвейера для реали
зации конвейеризированной конструкции?
Остальные три задачи данного упражнения предполагают, что компоненты
операционного блока имеют следующие показатели латентности:
Память
Сум Мульти Файл Память Расширитель Блок сдвига
инструк АЛУ
матор плексор регистров данных знака влево на два
ций (ALU)
(Add) (Mux) (Regs) (□ -М е т ) (Sign-extend) (Shift-left-2)
(1-Mem)
a 400 nc 1 0 0 nc 30 пс 1 2 0 пс 2 0 0 пс 350 пс 2 0 пс One
6 500 nc 150 nc 10 0 пс 180 пс 2 2 0 пс 1 0 0 0 пс 90 пс 2 0 пс
Упражнение 4.38
В данном упражнении исследуются энергоэффективность и ее взаимоотношения
с производительностью. Задачи данного упражнения предполагают использова
ние некоторых показателей: расход энергии на работу памяти инструкций, файл
1>егистров и память данных. Можете предположить, что все остальные компоненты
операционного блока потребляют незначительное количество энергии.
4.14. Упражнения 495
4.38.1 [10] <4.3, 4.6, 4.14> Сколько энергии тратится на выполнение инструк
ции add в одногактной конструкции и в конструкции с конвейером, состоящим из
м ти стадий?
4.38.2 [10] <4.6, 4.14> Какая Ml PS-инструкция имеет наихудший показатель
мергонотребления и сколько энергии тратится на ее выполнение?
4.38.3 [10] <4.6, 4.14> Если главная цель состоит в снижении энергопотре
бления, то как вы бы изменили конструкцию конвейера? Насколько сократятся
s процентах энергозатраты на выполнение инструкции lw после этих изменений?
4.38.4 [10] <4.6, 4.14> Каково будет влияние ваших изменений из упражне
ния 4.38.3 на производительность?
4.38.5 [10] <4.6, 4.14> Мы можем убрать сигнал MemRead и заставить память
данных считываться при каждом тактовом цикле, например мы можем постоянно
иметь M emRead-1. Объясните, почему процессор по-прежнему работает правильно
после такого изменения. Каково влияние этого изменения на тактовую частоту и на
энергопотребление?
4.38.6 [10] <4.6, 4.14> Если неактивный блок потребляет 10% от мощности,
затрачиваемой в активном состоянии, то какую энергию потребляет память ин
струкции в каждом тактовом цикле? Какой процент от всей энергии, потребляемой
памятью инструкций, приходится на эту энергию холостого режима?
Упражнение 4.39
В задачах данного упражнения предполагается, что в процессе выполнения про
граммы циклы процессора «тратятся* следующим образом: цикл «тратится* на ин
струкцию. если процессор завершает выполнение этого типа инструкции в данном
тактовом цикле; цикл «тратится* на задержку, если процессор не может завершить
выполнение инструкции в данном цикле по причине задержки.
496 Глава 4. Процессор
Задержки, Задержки,
add beq Км SW связанные связанные
с управлением с данными
а 35% 20% 20% 10 % 10 % 5%
б 25% 10 % 25% 10 % 20% 10 %
IF ID ЕХ МЕМ WB
а 300 вс / 120 пДж 400 пс / 60 пДж 350 пс / 500 п с / 10 0 п с /
75 пДж 130 пДж 20 пДж
в 200 пс / 150 пДж 150 пс / 60 пДж 12 0 п с / 190 пс / 140 п с /
50 пДж 150 пДж 20 пДж
П роцессор Память
5.1. Введение 499
5.1. Введение
С самых первых дней существования компьютерной техники программистам хо
телось иметь неограниченные объемы быстродействующей памяти. Темы, рассма
триваемые в данной главе, помогают программистам в воплощении этой иллюзии
в жизнь. Перед тем как приступить к созданию этой иллюзии, давайте рассмотрим
простую аналогию, которая послужит иллюстрацией используемых нами ключевых
принципов и механизмов.
Предположим, что вам приходилось в студенческие времена писать курсовую
работу о важных исторических событиях в мире компьютерного оборудования. Вы
сидите за столом в библиотеке с подборкой книг, которые вы сняли с полок и изу
чаете. Оказалось, что часть важных компьютеров, о которых нужно было написать,
описаны в имеющихся у вас книгах, но в них нет никаких сведений о компьютере
EDSAC. Поэтому вы возвращаетесь к полкам и ищете еще одну книгу. Вы нашли
книгу о первых английских компьютерах, в которой есть сведения о EDSAC. Как
только у вас на столе окажет ся хорошая подборка литературы, возникнет высокая
вероятность, что многое о том, что вам нужно, будет найдено в этих книгах, и ос
новная часть времени будет затрачена на работу.
Такой же принцип позволяет нам создать иллюзию большого объема памяти,
к которой можно обращаться так же быстро, как и к очень маленькому по объему
устройству памяти. Точно так же, как у вас не возникает потребность просмотра
сразу всех книг в библиотеке, программа не обращается одновременно с равной
вероятностью ко всему своему коду или данным. В противном случае было бы не
возможно обеспечить быстрый доступ к основному объему памяти и при этом ос
нащать компьютеры большими объемами памяти, точно так же, как вам было бы
невозможно поместить все книги, имеющиеся в библиотеке, на вашем столе и со
хранить возможность быстрого поиска нужного материала,
В обоих случаях, и при работе в библиотеке, и в работе программы, в основу
кладется принцип локальности. Этот принцип гласит, что программы в любой
момент времени обращаются к относительно небольшой части своего адресного
пространства, точно так же, как вы обращаетесь к очень маленькой части библио
течной коллекции. Существуют две разновидности локальности:
♦ Локальное! ь, связанная со временем: если
Локальность, связанная со временем
было обращение к элементу, то есть веро
Принцип, в котором утверждается, что если
ятность, что к нему скоро последует новое было обращение к элементу данных, то вы
обращение. Если вы недавно приносили сока вероятность, что к нему скоро после-
книгу на свой стол для просмотра, то, воз дув! новое обращение.
можно, совсем скоро она понадобится вам Локальность, связанная
еще раз. с пространством
♦ Локальность, связанная с пространством: Принцип локальности, в котором утвержда
ется, что если было обращение к элементу
если было обращение к элементу, то, скорее данных, то высока вероятность, что скоро
всего, скоро будет обращение и к тем эле последует обращение и к элементам дан
ментам, чьи адреса находятся поблизости. ных по соседним адресам.
500 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
Память ORAM
Рис. 5.1. Основная структура иерархии памяти. За счет иерархической реализации системы
памяти у пользователя создается иллюзия, что она по объему соответствует самому большому
уровню иерархии, но может быть доступна, как будто из! отоелена из самых быстродействующих
элементов Флэш-память заменила диски во многих встраиваемых устройствах и может привести
к появлению нового уровня в иерархии запоминающих устройств для настольных компьютеров
и серверов; см. раздел 6 4
-ж. оказывает влияние на многие другие аспекты компьютера, включая и то, как
ц рационная система управляет памятью и вводом-выводом, как компиляторы
•ерируют код и даже то, как приложения используют возможности компьютера,
меетея, поскольку все программы тратят много времени на доступ к памяти,
7 тема памяти неизменно является главным фактором в определении произво-
- ельности. Зависимость достижения высокой производительности от иерархии
вы яти означает, что программисты, привыкшие думать о памяти, как о неком
хномерном запоминающем устройстве с произвольным доступом, теперь для по
чтения высокой производительности должны понимать, что память представляет
юой сложную иерархию. Вся важность такого представления о системе памяти
.дет показана на следующих примерах, в частности она будет продемонстрирована
-а рис. 5.15.
Рис. 5 .2 . Каждую пару уровней ■ иерархии памяти можно представлять а виде верхнего
и нижнего уровней. В пределах каждого уровня порция присутствующей или отсутствующей
е нем информации называется блоком или строкой. Обычно при копировании каких-либо данных
между уровнями передается сразу весь блох
Поскольку системы памяти играют важную роль для достижения высокой про
изводительности, разработчики компьютеров уделяют большое внимание этим
системам и разрабатывают сложные механизмы для повышения производительно
сти их работы. Б данной главе будут рассмотрены основные концептуальные идеи,
но при этом будет использоваться множество упрощений и абстракций, чтобы не
усложнять материал.
Общее представление
Программы демонстрируют как локальность, связанную со временем, то есть тен
денцию к повторному использованию недавно запрошенных элементов данных,
так и локальность, связанную с пространством, то есть тенденцию обращения
к элементам данных, находящимся по соседству с недавно запрошенными элемен
тами данных. Иерархии памяти используют локальность, связанную со временем,
располагая последние запрошенные данные ближе к процессору. А локальность.
504 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
Рис. 5.3. На этой схеме показана структура иерархии памяти: по мере увеличения рас
стояния от процессора растет и объем. Эта структура с соответствующими рабочими меха
низмами позволяет процессору иметь время доступа, которое определяется главным образом
уровнем 1 иерархии, и при этом обладать памятью с объемом, соответствующим уровню п.
Воплощение в жизнь этой иллюзии и является темой данной главы. Хотя в нижней части иерар
хии обычно находится локальный диск, в некоторых системах в качестве следующих уровней
иерархии используется мат нитная лента или файловый сервер, доступный по локальной сети
Самопроверка
Какие из следующих утверждений в целом соответствуют действительности?
1. Кэш-намять использует локальность, связанную со временем.
2. При чтении возвращаемое значение зависит от того, какой блок находится
в кэш памяти.
3. Основная стоимость иерархии памяти приходится на самый верхний уровень.
4. Основной объем иерархии памяти приходится на самый нижний уровень.
5.2. Основы кэш-памяти 505
В нашем примере с библиотекой стол работает как кэш — укромное место для
хранения вещей (книг), которые нужно изучить. Название кэш было выбрано для
представления дополнительного уровня иерархии памяти между процессором
и оперативной памятью в первом коммерческом компьютере. Кэш является про
стой заменой устройств памяти в операционном блоке, рассмотренном в главе 4.
Но в наши дни употребление слова кэш в данном смысле стало доминирующим,
этот термин используется также для ссылки на любые устройства хранения ин
формации, предназначенные для использования принципа локальности доступа.
Сначала кэш-память появилась на исследовательских компьютерах начата 1960-х
годов, а чуть позже, в том же десятилетии, она появилась и на компьютерах, пред
назначенных для управления производством; сегодня кэш-память является атри
бутом всех универсальных компьютеров, от серверов и до маломощных встроенных
процессоров.
В данном разделе сначата будет рассмотрена очень простая кэш память, в кото
рой процессор делает пословные запросы, а блоки также состоят из одного слова.
(Читатели, уже знакомые с основами кэш-памяти, могут раздел 5.2 пропустить.)
На рис. 5.4 эта простая кэш-память показана до и после запроса элемента данных,
который изначально в ней отсутствовал. Перед запросом в кэш-памяти находилась
коллекция данных, на которые были последние ссылки X,, Х2, ..., Хп _,, а процессор
запросил слово Хл, которого в кэш памяти нет. Этот запрос оказался неудачным,
и слово Хв было перенесено из оперативной памяти в кэш.
При рассмотрении сценария на рис. 5.4 возникают два вопроса. Как мы узнаем,
что элемент данных находится в кэш-намяти? И потом, если он там, то как мы его
найдем? Ответы на эти вопросы взаимосвязаны. Если каждое слово может попадать
во вполне определенное одно и то же место в кэш-памяти, то найти слово, находя
щееся в кэш-намяти, будет нетрудно. Наиболее простым способом определения
места в кэш-памяти для каждого слова является определение места в кэш-памяти
на основе адреса слова в памяти. Такая структура кэша называется непосредствен
но отображенной, поскольку каждое место в памяти отображается непосредствен
но на одно место в кэш-памяти. Обычное отображение между адресами и местами
в кэше для кэш-памяти с непосредственным отображением, как правило, устроено
довольно просто. Например, почти во всех устройствах кэш-памяти с непосред
ственным отображением для поиска блока используется следующее проецирова
ние:
(Адрес блока) modulo (Количество блоков
в кэш-памяти)
Если количество записей в кэш-памяти яв Кэш-память с непосредственным
отображением
ляется степенью числа 2, то модуль (modulo) Структура кэша, а которой каждое место
может быть вычислен просто за счет использо в памяти проецируется на одно конкретное
вания младших log, (размер кэш-памяти вбло- место в кэш-памяж.
506 Глава 5- Объемная и быстродействующая: анализ иерархии памяти
Х4 Х«
X, X,
Хп-1 Xfi - 2
. V , X ,.,
х>. *2.
х} X,
Рис. 5.4. Кэш-память непосредственно перед и сразу после обращения к слову X , из
начально отсутствующему в кэш-памяти Это обращение становится причиной промаха,
заставляющего кэш-память извлечь Х„ из памяти и вставить о себя этот элемент
Обращение к кэш-памяти
Ниже показана последовательность из девяти обращений к памяти, приходя
щихся на пустую кэш-память, состоящую из восьми блоков, включая действие,
предпринимаемое при каждом обращении. На рис. 5.6 показано, как содержимое
кэш памяти изменяется после каждого промаха. Поскольку в кэш памяти восемь
блоков, самые младшие три разряда адреса дают номер блока:
508 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
16 10 0 0 0 , попадание : 1 0 0 0 0 , mod 8 ) = 0 0 0 ,
Из-за того, что кэш память не заполнена, несколько первых обращений будут
неудачными; подписи на рис. 5.6 описывают действия для каждого обращения
к памяти. На восьмом обращении для блока возникает конфликтное требование.
Слово по адресу 18 (100102) должно быть помешено в блок кэш-памяти 2 (0102).
Следовательно, оно должно заменить слово из адреса 26 (110102), которое уже на
ходится в блоке кэш-памяти 2 (0102). Такое поведение позволяет кэш памяти вос
пользоваться локальностью, связанной со временем: слова, обращение к которым
состоялось недавно, заменяют те слова, обращение к которым было чуть раньше.
Эта ситуация является прямой аналогией с необходимостью наличия книги
с полки и необходимостью дополнительного места на столе — какая-то книга,
которая уже на нем лежит, должна быть возвращена на полку. В кэш-памяти с не
посредственным отображением есть только одно место, куда можно поместить
только что запрошенный элемент, и, следовательно, только один вариант замены.
Нам известно, куда обращаться в кэш-памяти для каждого возможного адреса:
самые младшие разряды адреса могут быть использованы для поиска уникальной
записи в кэш-памяти, на которую мог быть спроецирован адрес. На рис. 5.7 пока
зано, как адрес, к которому идет обращение, делится на:
♦ поле тега, которое используется для сравнения со значением ноля тега кэш
памяти;
♦ индекс кэш-памяти, который используется для выбора блока.
Индекс блока кэш-памяти наряду с содержимым тега этого блока уникальным
образом определяют адрес в памяти того слова, которое содержится в блоке кэш
памяти. Поскольку поле индекса используется в качестве адреса для обращения к
кэш-памяти и поскольку поле, состоящее из и разрядов, имеет 2° значений, общее
количество записей в кэш-памяти с. непосредственным отображением должно
быть кратным степени числа 2. В МIPS-архитектуре, поскольку слона выровнены
таким образом, чтобы быть кратными четырем байтам, самые младшие два разряда
5.2. Основы кэш-памяти 509
каждого адреса определяют байт внутри слова. Следовательно, самые младшие два
разряда при выборе слова в блоке игнорируются.
Общее количество разрядов, необходимых для кэш-памяти, определяется
функцией от размера кэш-памяти и размера адресного пространства, поскольку
езш-память включает в себя как место для хранения данных, гак и теги. Размером
рассмотренного ранее блока было одно слово, но обычно блок состоит из несколь
ких слов. Для следующей ситуации:
♦ 32-разрядный байтовый адрес:
♦ кэш-память с непосредственным отображением:
♦ размер кэш памяти в 2я блоков, следовательно, для индекса используются п бит;
♦ размер блока 2" слов (2""2 байт), следовательно, для слова внутри блока ис
пользуются т разрядов, и два разряда используются для байтовой части адреса
размер поля тега составляет
32 —(л + т + 2).
Общее количество разрядов в кэш памяти с непосредственным отображением
составляет
2" к (размер блока + размер тега + размер поля достоверности).
Поскольку размер блока равен 2™слов (2"’ 5бит) и нам нужен один бит для поля
достоверности (V), количество бит в такой кэш памяти будет равно
2я к ( 2 - х 32 + (32 - п - т - 2 ) + 1) - 2я х (2м х 32 + 31 - п - т ) .
Хотя здесь представлен реальный размер в битах, соглашение о названиях тре
бует исключить размер тега и поля достоверности и учитывать только размер дан
ных. Поэтому кэш-память на рис. 5.7 называется кэш-памятью размером 4 Кбайт.
Ответ
Мы знаем, что 16 Кбайт —это 4 К (2,г) слов. При размере блока, равном 4 слова (22), в кэш
памяти содержится 1024 (210) блока. У каждого блока имеется 4 х 32, или 128, битов данных
плюс тег, в котором 3 2 - 1 0 - 2 - 2 бита, плюс бит достоверности. Таким образом, общий
размер кэш-памяти равен
210 х (4 х 32 + (32 - 10 - 2 - 2) + 1) - 210х 147 - 147 Кбит,
или 18,4 Кбайт для 16 Кбайт кэш-иамя ги. Для этой кэш-памяти общее количество битов
почти в 1,15 раз больше, чем необходимо для хранения данных.
510 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
Рис. 5.7. Для данной кэш-памяти младшая часть адреса используется для выбора записи
кэш-памяти, состоящей из слова данных и тега. Эта кэш-память сохраняет 1024 слов или
4 Кбайт. В данной главе мы предполагаем использование 32-раэрядных адресов. Тег. имеющийся
в кэш-памяти, сравнивается со старшей частью адреса для определения, соответствует ли запись
в кэш-памяти запрошенному адресу. Поскольку кэш-память содержит 21С(или 1024) слов и р аз
мер блока составляет одно слово, для индекса кэш-памяти используются 10 разрядов, оставляя
32 - 10 - 2 = 20 разрядов для сравнения с тегом Если тег и старшие 20 разрядов адреса равны
друг другу и бит достоверности установлен, значит, обращение к кэш-памяти было успешным,
и слово предоставляется процессору. В противном случае обращение заканчивается неудачей
Ответ
В начале раздела была дана формула для поиска блока:
(Адрес блока) modulo (Количество блоков в кэш-памяти)
где адрес блока это
Адрес байта
Байтов в блоке
Следует учесть, что этот адрес блока относится к блоку, содержащему все адреса между
5.2. Основы кэш-памяти 513
Адрес байта
х Байтов н блоке
Байтов в блоке
и
.Адрес байта
х Байтов в блоке + (Байтов в блоке -1 ).
Байтов в блоке
Таким образом, при 16 байтах на блок байтовый адрес 1200 является адресом блока
1200 '
= 75,
16
который проецируется на блок кэш-памяти (75 по модулю 64) = 11. На самом лете этот блок
проецируется на все адреса между 1200 и 1215.
16 32 64 128 256
Р а зм е р б л о ка
Рис. 5.8. Зависимость коэффициента промахов от размера блока. Заметьте, что коэффи
циент промахов повышается, осли размер блока становится слишком большим относительно
размера кэш памяти. Каждая линия представляет собой кэш-память разного размера. (Этот
рисунок не зависит от ассоциативности, которая вскоре будет рассмотрена ) К сожалению,
прохождение тестов SPEC2000 заняло бы много времени, если бы был включен размер блока,
поэтому эти данные основаны на тестах SPEC92
514 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
О бработка зап и си
Запись осуществляется несколько иначе. Применительно к инструкции сохране
ния данные записываются только в кош-память данных (без внесения изменений
в оперативную память); затем, после записи в кэш, в памяти будет храниться зна
чение, отличное от хранящегося в кэш памяти. В таком случае говорится о том,
что кэш-память и оперативная память являются н е с о о т в е т с т в у ю щ и м и друг другу.
Простейший способ обеспечения соответствия оперативной памяти и кэш-памяти
заключается в неизменной записи данных и в оперативную память, и в кэш-память.
Эта схема называется сквозной записью.
Другим ключевым аспектом записи является то, что происходит при промахе
записи. Сначала из памяти извлекаются слова блока. После того как блок из
влечен и помещен в кэш, мы можем переписать слово, вызвавшее промах, в блок
кэш-памяти. Также это слово с использованием его полного адреса записывается
в оперативную память.
Хотя эта конструкция довольно просто справляется с записью, она не даст вы
сокой производительности. При использовании сквозной записи каждая запись
становится причиной записи данных в оперативную память. Эта запись займет
много времени, возможно, не менее 100 тактовых циклов процессора, и может
существенно замедлить его работу. Например, представим, что 10% инструкций яв
ляются сохранениями. Если показатель СР1 без учета промахов в кэш памяти был
равен 1,0, затрата 100 дополнительных циклов на каждую запись приведет к тому,
что показатель CPI будет равен 1,0 + 100 * 10% =11, снижая производительность
более чем в 10 раз.
Одно из решений заключается в использовании буфера записи. Буфер записи
хранит данные в ожидании их записи в память. После записи данных в кэш-память
и в буфер записи процессор может продолжить выполнение программы. Когда за
пись в оперативную память завершается, место в буфере памяти освобождается.
Когда буфер записи полон, а процессору подошло время вести запись, он должен
остановить свою работу и дождаться освобождения места в буфере. Разумеется,
если скорость, с которой память может завершить запись, меньше скорости, с ко
торой процессор инициирует операции записи, не поможет никакой объем буфера,
потому что операции записи будут инициироваться быстрее, чем система памяти
сможет их воспринимать.
Скорость, с которой инициируются операции записи, может также быть ниже
скорости, с которой память может их воспринимать, но задержки могут все же
......... ......... происходить. Это может происходить при вне
Сквозная запись запном росте количества инициируемых опера
Схема, при которой в процессе записи ций записи. Для сокращения случаев таких за
всегда обновляется и кэш-память, и сл е
дующий, расположенный ниже уровень ие держ ек процессоры обычно увеличиваю т
рархии памяти, обеспечивая согласование глубину буфера записи, размещая в нем более
м еж д у этими двумя уровнями одного элемента.
Альтернативой схеме сквозной записи слу
Буфер записи
Очередь, содержащая данные, ожидающие жит схема отложенной записи, или о т л о ж е н
записи в память. н о г о к о п и р о в а н и я . В схеме отложенной записи,
5.2. Основы кэш-памяти 517
П р и м е р к э ш -п а м я т и : п р о ц е с с о р In te n sity
F a stM A T H
Intrinsity FastMATH является быстродействующим встроенным микропроцессо
ром, использующим МIPS-архитектуру и простую реализацию кэш памяти. Ближе
к концу главы будет рассмотрена более сложная конструкция кэш-памяти про
цессора AMD Opteron Х4 (Barcelona), но из педагогических соображений начнем
мы с простого, но все же настоящего примера. На рис. 5.9 показана организация
кэш-намяти данных процессора Intrinsity FastMATH.
Этот процессор имеет 12-стадийный конвейер, похожий на тот, который рас
сматривался в главе 4. При работе на пиковой скорости процессор может запросить
в каждом цикле как слово инструкции, так и слово данных. Для удовлет ворения
потребностей конвейера без задержек используются отдельные устройства кэш
памяти инструкций и данных. Каждый кэш имеет объем 16 Кбайт, или 4 Кслов.
и состоит из блоков размером в 16 слов.
Запросы на чтение кэш памяти устроены просто. Поскольку используется от
дельная кэш память для данных и инструкций, нам нужны отдельные управляю
щие сигналы чтения и записи для каждой кэш-памяти. (Вспомним, что при промахе
нам нужно обновить кэш-память инструкций.) Таким образом, для запроса чтения
для обоих блоков кэш-памяти требуются следующие шаги:
1. Отправка адреса соответствующей кэш-памяти. Адрес поступает либо из счет
чика команд (для инструкции) либо из АЛ У (для данных).
2. Если кэш-память посылает сигнал попадания, запрошенное слово становится
доступным. Поскольку в нужном блоке содержится 16 слов, необходимо вы
брать из них только одно. Поле индекса блока используется для управления
5.2. Основы кэш-памяти 519
Вот как выглядят коэффициенты промахов для кэш памяти с размером таким
же, как у процессора Intrinsity FastMATH, и для объединенной кэш памяти, чей
размер равен сумме размеров двух устройств кэш-памяти:
♦ общий размер кэш-памяти: 32 Кбайт;
♦ эффективный коэффициент промахов раздельных устройств кэш-памяти: 3,24%;
♦ коэффициент промахов объединенной кэш памяти: 3,18%.
Коэффициент раздельной кэш-памяти лишь немногим хуже.
Преимущество удвоенной пропускной способности кэш-памяти, которое за
ключается в одновременной поддержке доступа
к инструкциям и данным, вполне компенсирует
Раздельная кэш-память недостаток небольшого увеличения коэффи
Схема, в которой уровень иерархии памяти циента промахов. Раздел 5.3 показывает, что
составлен из двух независимых устройств данное наблюдение предостерегает от исполь
кэш-памяти, работающих в параллельном зования коэффициента промахов в качестве
режиме по отношению друг к другу, при
чем один из них работает с инструкциями, единственного показателя производительности
а другой с данными. кэшпамяти.
5.2. Основы кэш-памяти 521
«конструирование с и с т е м ы п а м я т и с п о д д е р ж к о й
«э ш -п а м я т и
1т- махи при обращениях к кэш-памяти удовлетворяются за счет обращения
•оперативной памяти, которая построена на DRAM-элементах. В разделе 5.1 мы
■цели, что главными характеристиками DRAM-элементов являются стоимость
» плотность. Хотя сократить латентность извлечения первого слова из памяти
Довольно трудно, издержки промахов можно сократить за счет повышения про-
■•скной способности от оперативной памяти к кэш-памяти. Такое сокращение даст
возможность использовать более крупные блоки при сохранении низких издержек
№ промахи, характерных для блоков меньшего размера.
Процессор традиционно соединяется с памятью по шине. (Как будет показано
♦ главе б, эта традиция изменяется, но более современная технология соединений
♦данной главе никакой роли не играет, поэтому мы будет пользоваться гермином
•шина*.) Тактовая частота у шины обычно намного ниже, чем у процессора. Ско
рость работы этой шины влияет на издержки промахов.
Для оценки влияния различных способов организации памяти давайте опреде-
ьч набор гипотетических составляющих времени обращения к памяти. Предпо
ложим. что он состоит из:
♦ 1 тактового цикла шины, необходимого для отправки адреса.
♦ 15 тактовых циклов шины для инициализации обращения к каждому DRAM-
элементу.
♦ 1 тактового цикла шины для отправки слова данных.
Если блок нашей кэш памяти состоит из четырех слов и мы располагаем банком
DRAM-элементов шириной в одно слово, издержки промаха составят 1 + 4 * 1 5 + 4 *
■ 1 - 65 тактовых циклов шины памяти. Таким образом, количество байтов, пере
носимых за один тактовый цикл шины при одном промахе, будет равно
— -0 ,2 5 .
65
На рис. 5.10 показаны три варианта конструкции системы памяти. Первый ва
риант соответствует нашим предположениям: память имеет ширину в одно слово,
и все обращения осуществляются последовательно. Во втором варианте полоса про
пускания к памяти увеличена за счет расширения памяти и шины между памятью
и процессором, что допускает параллельное обращение сразу к нескольким словам
блока. В третьем варианте полоса пропускания увеличена за счет расширения
памяти, но не соединительной шины. Таким образом, мы по-прежнему платим ту
же цену за передачу каждого слова, но можем избежать более одной оплаты ла
тентности доступа. Давайте посмотрим, насколько другие два варианта улучшают
показатель 65-цикловой издержки промаха, характерный для первого варианта,
показанного на рис. 5.10, а .
Расширение памяти и шины приводит к пропорциональному увеличению про
пускной способности памяти, уменьшая при этом такие составляющие издержки
522 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
промаха, как время доступа и время переноса данных. При оперативной памяти
шириной в два слова издержки промаха падают с 65 тактовых циклов шины памяти
до 1 + (2 к 15) + 2 х 1 = 33 тактовых циклов этой шины. Пропускная способность
для одного промаха составляет в таком случае 0,48 (почти вдвое выше) байт на
тактовый цикл шины для памяти шириной в два слова. Основной ценой такого
улучшения становится более широкая шина и потенциальное увеличение времени
доступа к кэш-памяти из-за мультиплексора и логики управления между процес
сором и кэш-памятью.
6) б о л е е ш и р о к а я о р га н и за ц и я п а м я ти в) о р г а н и з а ц и я п а м я т и с ч е р е д о в а н и е м а д р е с о в
а) о р г а н и з а ц и я п а м я т и
ш и р и н о й в о д н о сл о во
Рис. 9.10. Главным методом достижения более высокой пропускной способности памяти
является увеличение физической или логической ширины системы памяти. На данном
рисунке пропускная способность памяти увеличивается двумя способами. В самой простой
конструкции, а, используется память, в которой все компоненты имеют ширину е одно слово:
в конструкции б показаны расширенные память, шина и кэш; а в конструкции в показана узкая
шина и кэш при памяти с чередованием адресов. В конструкции б логика между кэш-памятью
и процессором состоит из мультиплексора, используемого при чтении, и логики управления для
обновления соответствующих слов кэш-памяти при записи
Таблица 5 .2 . Р азм ер DRAM-элем ентое до 199 6 года каждые три года увели
чивался в четыре раза, а затем рост сущ ественно зам едлился.
Сокращение времени доступа происходило медленнее, а стоимость па
дала практически со скоростью роста плотности, хотя стоимость часто
зависела и от других факторов, например oi баланса спроса и предло
жения. Инфляция не повлияла на стоимость хранения гигабайта данных
Краткие выводы
Данный раздел начинался с изучения простейшей кэш-памяти: с непосредственным
отображением и блоком, состоящим из одного слова. В кэш-памяти такой конструк
ции контроль промахов довольно прост, поскольку слово может помещаться только
в конкретное место и для каждого слова есть отдельный тег. Для поддержания
с<х>тветствия содержимого оперативной и кэш-памяти может быть использована
схема сквозной записи, при которой каждая запись в кэш-память вызывает также
обновление оперативной памяти. Альтернативой сквозной записи служит схема
отложенной записи, при которой блок копируется обратно в оперативную память
при его замене. Эта схема еще будет рассматриваться в следующих разделах.
Для того чтобы воспользоваться преимуществами локальности в пространстве,
у кэш-памяти должен быть размер блока больше одного слова. Использование
более крупных блоков уменьшает коэффициент промахов и повышает эффектив-
5.3. Измерение и повышение производительности кэш-памяти 525
Самопроверка
Скорость работы системы памяти влияет на решения конструкторов о размере бло
ка кэш-памяти. Какие из следующих конструкторских установок в целом верны?
Чем меньше латентность памяти, тем меньше размер блока кэш-памятн.
2. Чем меньше латентность памяти, тем больше размер блока кэш памяти.
3. Чем выше пропускная способность памяти, тем меньше размер блока кэш
памяти.
4. Чем выше пропускная способность памяти, тем больше размер блока кэш
памяти.
С записью дело обстоит сложнее. Для схемы сквозной записи у нас есть два ис
точника задержек: промахи при записи, которые обычно фебуют извлечения блока
перед тем, как продолжить запись (подробности работы с записями даны в подраз
деле «Обработка записи»), и задержки буфера записи, которые происходят, когда
буфер переполняется. Таким образом, количество циклов ожидания при записи
равно сумме следующих двух составляющих:
„ ( Количество чтений
Количество циклов ожидания при чтении - -------------------------- х
^ На профамму
х Количество промахов при чтении х Издержки промахов при чтении) +
+ Ожидания буфера записи
„ Количество инструкций
Количество циклон ожидания памяти “ ------------------------ —------- х
На программу
Коэффициент промахов „
х ------—--------- ---------------- х Издержки промахов
На инструкцию
Упражнение
Вычисление производительности кэш -памяти
При условии, что коэффициент промахов при обращениях к кэш памяти инструкций равен
2%, а коэффициент промахов при обращениях к кэшпамяти данных равен 4%. Если процес
сор без задержек памяти имеет показатель CPI, равный 2, и издержки промахов составляют
для всех промахов 100 циклов, нужно определить, насколько быстрее процессор будет рабо
тать с совершенной кэш-памятью, при обращении к которой никогда не бывает промахов.
Предположим, что частота всех загрузок и сохранений составляет 36%.
Ответ
Количество циклов ожидания памяти при промахах, связанных с обращениями к кэш
памяти инструкций, в расчете на количество инструкций (I) равно
Циклов при промахах в получении инструкций = I к 2% * 100 = 2,00 х I
При частоте всех загрузок и сохранений, равной 36%, мы можем определить количество
циклов ожидания памяти при промахах, связанных с обращениями к кэш-памяти данных:
Циклов при промахах в получении данных = 1 * 36% * 4% * 100 - 1,44 х 1
Общее количество циклов ожидания памяти будет равно 2,001 + 1.44 I - 3,44 I. Это более чем
три цикла ожидания памяти на одну инструкцию. Соответственно, общий показатель CPI,
528 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
включая циклы ожидания памяти, равен 2 + 3,44 - 5,44. Поскольку количество инструкций
или тактовая частота не изменялись, соотношение процессорных времен равно:
«т-тыиим (скажем, три квадратных метра), то нужную книгу на этом столе вы ис*
а .[и бы дольше. Увеличение времени попадания, скорее всего, заставит добавить
< конвейеру еще одну стадию, поскольку попадание в кэш-память может занять
лтколько циклов. Хотя влияние более глубокого конвейера на производитель-
«ость рассчитать труднее. Рано или поздно увеличение времени попадания для
inлее объемной кэшпамяти может полностью свести на нет эффект от улучшения
коэффициента попадания, приводя к снижению производительности процессора.
Чтобы зафиксировать факт влияния на производительность времени доступа к
данным, как при попаданиях, так и при промахах, разработчики иногда используют
ре()не< время д о с т у п а к д а н н ы м (average memory access time — AM AT) в качестве
пособа изучения альтернативных конструкций кэш-памяти. Среднее время до
ступа к данным учитывает как попадания, так и промахи и частоту различных
брашений; для него можно составить следующее уравнение:
АМАТ = Время попадания + Коэффициент промахов к Издержка промаха
Упражнение
Вычисление среднего времени доступа к памяти
Определите АМАТ для процессора с продолжительностью тактовою цикла в 1 нс, издерж
кой промаха н 20 тактовых циклов, коэффициентом промахов, равным 0,05 промахов на
инструкцию, и временем доступа к кэш памяти (включая определение факта попадании),
равном одному тактовому циклу. Предположим, что издержки промахов при чтении и при
записи имеют одинаковые значения, а все остальные паузы при записи игнорируются.
Ответ
Среднее время доступа к памяти на одну инструкцию равно
АМАТ - В'эечя г к у ч м н и я + ч п з ф е и . . и е н т промахов * К э а е р и к а з р о и а х а
- 1 ♦ 0.05 * 20
* 2 та кто в ы х цикла
илы 2 ис.
Тег
Поиск
Однокаиальмая ассоциативная
(с непосредственным отображением)
Четырехканальизя ассоциативная
0
1
Тег Данные Тег Данные Тег Данные Тег Данные Тег Данные Тег Данные Тег Данные Тег Дан»ые
Упражнение
Промахи и количество каналов ассоциативности в кэш-памяти
Предположим, что у нас имеется три небольшие по объему кэшпамяти, каждая из которых
состоит из четырех однословных блоков. Одна кэш память является полностью ассоциатив
ной, вторая имеет двухканальную ассоциативность, а третья является кэш-памятью с непо
средственным отображением. Определите количество промахов для каждой организации
кэш-памяти для следующей последовательности адресов блоков: 0,8,0,6 и 8.
Ответ
Проще всего выполнить упражнение для кэш памяти с непосредственным отображением.
Сначала давайте определим, на какой блок кэш-памяти проецируется каждый адрес блока:
Адрес блока Блок каш-памяти
0 (0 по модулю 4) = 0
6 (6 по модулю 4) = 2
8 (8 по модулю 4) = 0
Теперь можно заполнить кэшпамять после каждого обращения, используя пустые записи,
чтобы обозначить недостоверность блока, жирный шрифт для того, чтобы показать добав
ленную в кэш-память новую запись для соответствующего обращения, а обычный шрифт
для обозначения старой записи в кэш-памяти:
В кэш памяти с непосредственным отображением произошло пять промахов при пяти об
ращениях.
У кэш-памяти с множественной ассоциативностью имеется два набора (с индексами 0 и 1)
с двумя элементами в каждом наборе. Давайте сначала определим, на какой набор проеци
руется каждый адрес блока:
Адрес блока Набор кзш-памяти
0 (0 по модулю 2) = 0
6 (6 по модулю 2) = 0
8 (8 по модулю 2) = 0
5.3 Измерение и повышение производительности кэш-памяти 533
■■гкольку у нас есть выбор, какую запись в наборе заменить в случае промаха, нам трсбу-
т л правило замены. В кэш-памяти с множественной ассоциативностью обычно в наборе
^меняется блок с наиболее длительным отсутствием обращений; то есть заменяется блок,
В|орым воспользовались в самом отдаленном прошлом. (Другие правила замены будут
вл ее рассмотрены более подробно.)
t и использовании данного правила замены кэш-память с множественной ассоииативно-
кы и имее i после каждою обращения следующее содержимое:
Заметьте, что при обращении к блоку 6 он заменяется блоком 8. поскольку блок имел более
длительное отсутствие обращений, чем блок 0. У кэш-памяти с двухканальной ассоциатив
ностью происходит четыре промаха, на один меньше, чем у кэш-памяти с непосредственным
отображением.
V полност ью ассоциативной кэш-памяти имеется четыре блока (в одном наборе); каждый
'лок памяти может быть сохранен в любом блоке кэш-памяти. У полностью ассоциативной
- ии памяти наблюдается наивысшая производительность со всего лишь гремя промахами;
Для данной серии обращений три промаха - наилучший возможный результат, поскольку
обращения осуществляются к трем уникальным адресам блоков. Учтите, что при исполь
зовании в кэш-памяти восьми блоков в двухканальной ассоциативной кэш памяти вообще
не было бы замен (проверьте это самостоятельно), и у нее было бы такое же количество
промахов, как и у кэш памяти с полной ассоциативностью. Аналогично этому, если бы ис
пользовались 16 блоков, то все три кэш-памяти имели бы одинаковое количество промахов.
Даже этот простейший пример показывает, что размер кэш памяти и ассоциативность весьма
зависимы при определении производительности кэш-памяти.
1 10,3%
2 в,6%
4 8,3%
в 8,1%
Если общий размер кэш-памяти будег таким же, повышение количества каналов
ассоциативности увеличит количество блоков в наборе, что будет соответствовать
количеству одновременных сравнений, необходимых для осуществления парал
лельного поиска: каждое удвоение каналов ассоциативности удваивает количество
блоков в наборе и уменьшает наполовину количество наборов. В соответствии
с этим каждое удвоение каналов ассоциативности уменьшает размер индекса на
5.3. Измерение и повышение производительности кэш-памяти 535
Попадание Данные
Упражнение
Зависимость размера тегов от количества каналов ассоциативности
Увеличение каналов ассоциативности требует использования большего количества компа
раторов и большей разрядности тегов на блок кэш памяти, При условии, что кэш-память
состоит из 4 К блоков, каждый блок состоит из четырех слов и используется 32-разрядная
адресация, определите общее количество наборов и общее количество битов тегов для
кэш-памяти с непосредственным отображением, а также для кэш-памяти с двухканальной,
четырехканальной и полной ассоциативностью.
Ответ
Упражнение
Производительность многоуровневой кэш-памяти
Предположим, что у нас есть процессор с базовым показателем СР1, равным единице при
условии успешности всех обращений в первичной кэш-памяти, и тактовой частотой 4 ГГц.
Предположим, что время доступа к оперативной памяти составляет 100 нс, включая все
обработки промахов. Допустим, что коэффициент промахов при обращении к инструкции
в первичной кэш-памяти равен 2%. Насколько быстрее будет работать процессор, если
будет добавлена вторичная кэш-память со временем доступа 5 нс как для попадания, так
и для промаха, имеющая достаточный размер для сокращения коэффициента промаха при
обращении к оперативной памяти до 0,5%?
Ответ
Издержки промаха при обращении к оперативной памяти составляют
100 нс
- = 400 тактовых циклов.
нс
0,25-
тактовых циклов
Эффективный показатель CPI при одном уровне кэширования равен
Совокупный CPI - Основной СР1 + Циклов задержки памяти на инструкцию
Для процессора с одним уровнем кэширования
Совокупный CPI - 1,0 + Циклов задержки памяти на инструкцию - 1,0 + 2% * 400 - 9
При двух уровнях кэширования промахи в первичном (или на первом уровне) кэше могут
быть удовлетворены либо вторичной кэш-памятью, либо оперативной памятью. Издержки
промаха при обращении к кэш-памяти второго уровня равны
5 нс
= 20 тактовых циклов
нс
0,25-
тактовых циклов
Если промах остановился на вторичной кэш-памяти, то это и есть полные издержки промаха.
Если промах вызвал необходимость обращения к оперативной памяти, го совокупные из
держки промаха равны сумме времени доступа к вторичной кэш-памяти и времени доступа
к оперативной памяти.
Таким образом, для двухуровневой кэш-памяти совокупный показатель CPI равен сумме
циклов задержки из обоих уровней кэш-памяти и основного показателя CPI:
Совокупный CPI - 1 + Первичные задержки на инструкцию + Вторичные задержки
на инструкцию - 1 * 2% х 20 + 0.5% х 400 = 1 + 0,4 + 2,0 - 3,4
Таким образом, процессор, имеющий вторичную кэш-память, быстрее
в — = 2,6 рала.
3.4
Вместо этого мы могли бы вычислять циклы задержки путем суммирования циклов задержки
тех обращений, которые завершились попаданием во вторичную юш-память ((2% - 0,5%) х
х 20 - 0,3). Те обращения, которые были направлены оперативной памяти и которые должны
5.3- Измерение и повышение производительности кэш-памяти 539
Рис. 5.15. Сравнение Quicksort и Radix Sort по: а ) инструкциям, выполненным на сортируемый
элемент, б ) времени на сортируемый элемент и в ) промахам обращений к кэш-памяти на со*
ртируемый элемент. Эти данные взяты из статьи Ла Марка и Ладнера (LaMarc and Ladner, 1996).
Хотя количественные характеристики для более новых компьютеров будут изменяться, общие
тенденции сохранятся. Судя по результатам поиска, были изобретены новые версии Radix Sort,
в которых учитывается иерархия памяти с целью восстановления алгоритмических преимуществ
данною способа сортировки (см. раздел 5.10). Основной замысел оптимизации под кэш-память
заключается в повторном использовании всех данных в блоке до того, как он будет заменен
в случае промаха
542 Глава 5, Объемная и быстродействующая: анализ иерархии памяти
Самопроверка
Что из нижеперечисленного справедливо для устройств, имеющих многоуровневую
кэш-память?
1. Для кэш-памяти первого уровня больше внимания уделяется времени по
падания, а для кэш-памяти второго уровня более важным фактором является
коэффициент промахов.
2. Для кэш-памяти первого уровня больше внимания уделяется коэффициенту
промахов, а для кэш-памяти второго уровня более важным фактором янлястся
время попадания.
Краткие выводы
В данном разделе основное внимание уделялось трем темам: производительности
кэш-иамяти, использованию ассоциативности для уменьшения коэффициента про
махов и использованию иерархий с многоуровневой кэш-памятью для сокращения
издержек промахов.
Система памяти оказывает существенное влияние на время выполнения про
граммы. Количество циклов ожидания памяти зависит как от коэффициента
промахов, так и от издержек промахов. Задача, как будет показано в разделе 5.5,
заключается в уменьшении одного из этих факторов без существенного влияния
на другие критические факторы в иерархии памяти.
Мы изучили использование схем ассоциативного размещения, позволяющих
уменьшить коэффициент промахов. Эти схемы могут уменьшить коэффициент
промахов кэш-памяти, допуская в ней более гибкое размещение блоков. Полно
стью ассоциативные схемы позволяют помещать блоки в любое место, но при этом
требуют для удовлетворения запроса вести поиск в каждом блоке. Более высокая
стоимость делает большую, полностью ассоциативную кэш память непрактичной.
Кэш память с множественной ассоциативностью является более практичной аль
тернативой, поскольку поиск требуется вести только среди элементов уникального
набора, выбираемого с помощью индексации. Такая кэш память имеет более высо
кий коэффициент промахов, но более быстрый доступ. Степень ассоциативности,
приводящая к наилучшей производительности, зависит как от применяемой тех
нологии, так и от особенностей реализации.
И наконец, мы рассмотрели многоуровневую кэш-память в качестве техноло
гии, сокращающей издержки промахов за счет того, что более крупная по размеру
вторичная кэш память может обрабатывать промахи, возникшие при обращении
к первичной кэш-памяти. К эш пам ять второго уровня стала популярной, как
только конструкторы убедились в том, что ограниченные пространства кремние
вого кристалла и стремление повысить тактовую частоту не позволяют увеличить
размер первичной кэш-памяти. Вторичная кэш-память, которая зачастую в десять
и более раз больше первичной кэш-памяти, обрабатывает многие обращения, за
вершившиеся промахами в первичной кэш-памяти. В таких случаях издержки
промаха сводятся к времени доступа к вторичной кэш-памяти (обычно это менее
5.4. Виртуальная память 543
- кий адрес —тем местом, где она находится в библиотеке, которое может быть
■ ’.учено по шифру библиотеки Конгресса.
Виртуальный адрес
Преобразование!
1Ч1оМ .............
Физический адрес
Рис. 5.17. Отображение виртуальных адресов на физические. Размер страницы равен
2,г = 4 Кбайт. Количество физических страниц, допустимое в памяти, равно 2 ", поскольку номер
физической С1 раницы содержи! 18 разрядов. Таким образом, оперативная память может иметь
не более 1 Гбайт, а виртуальное адресное пространство составляет 4 Гбайт
Уточнение. Хотя обычно считается, что виртуальных адресов намного больше, чем
с.-зических, может быть и наоборот, когда размер адреса процессора меньше по
.-ношению к состоянию технологии памяти. Преимущества от отсутствия свопинга
• памяти или от запуска на параллельных процессорах может получить не отдельно
кэятая программа, а совокупность программ, запущенных одновременно. Для серве-
эое и настольных компьютеров 32-раэрядные адреса проблематичны.
Р а зм е щ е н и е страниц ы и ее п о сл е д ую щ и й поиск
Поскольку отсутствие страницы приводит к очень большим издержкам, конструк
торы сократили частоту таких отсутствий, оптимизировав размещение страниц.
Если мы допускаем отображение виртуальной страницы на любую физическую
страницу, то операционная система в случае отсутствия страницы может заменить
ею любую страницу по своему усмотрению. Например, операционная система мо
жет использовать довольно сложный алгоритм и непростую структуру данных для
отслеживания востребованности сграницы, чтобы попытаться выбрать страницу,
которая не понадобится еще долгое время. Возможность использования хорошо
продуманной и гибкой схемы замены уменьшает коэффициент отсутствия страниц
и упрощает использование полностью ассоциативного размещения страниц.
Как уже упоминалось в разделе 5.3, трудносги использования полностью ас
социативного размещения заключаются в определении местоположения нужной
записи, поскольку она может быть в любом месте верхнего уровня иерархии. Все
объемлющий поиск здесь непрактичен. В системах виртуальной памяти местопо
ложение страниц определяется с помощью таблицы, индексирующей память; такая
структура называется таблицей страниц и размещается в памяти. Таблица страниц
для нахождения соответствующего номера физической сграницы индексируется
по номеру страницы из виртуального адреса. У каждой программы имеется своя
собственная таблица страниц, отображающая виртуальное адресное пространство
этой программы на оперативную память. В нашей аналогии с библиотекой таблица
страниц соответствует связи между названиями книг и их местами на полках в би
блиотеке. Точно так же, как карточка каталога может содержать записи для книг в
другой библиотеке студенческого городка, а не только в библиотеке местного от
деления, мы увидим, что таблица страниц может содержать записи для страниц, не
присутствующих в памяти. Для обозначения местонахождения таблицы страниц в
памяти, оборудование включает в себя регистр, указывающий на начало таблицы
страниц; мы можем назвать его регистром таблицы страниц. Предположим пока,
что таблица страниц находится во вполне определенной и неразрывной области
памяти.
11а рис. 5.18 используются регистр таблицы страниц, виртуальный адрес и обо
значенная таблица страниц для того, чтобы показать, как оборудование может
сформировать физический адрес. Бит достоверности используется в каждой записи
таблицы страниц, точно так же, как он использовался в кэш-памяти. Если этот бит
сброшен, страница отсутствует в оперативной памяти, и возникает ошибка отсут
ствия страницы. Если бит установлен, значит,
страница находится в памяти и запись содержит
Таблица страниц физический номер страницы.
Таблица в системе виртуальной памяти,
Поскольку в таблице страниц содержится
содержащая перевод виртуального адреса
в физический. Эта >аблица. которая хра отображение для каждой возможной вирту
нится в памяти, обычно индексируется по альной страницы, теги не нужны. Используя
номеру виртуальной страницы; каждая за терминологию кэш-памяти, индекс, используе
пись таблицы содержит номер физической мый для доступа к таблице страниц, состоит из
страницы для данной виртуальной страни
цы, если страница на данный момент на полного адреса блока, который в данном случае
ходится в памяти. является виртуальным номером страницы.
5.4. Виртуальная память 549
Р и с . 5 .1 8 . Т аб ли ца с т р а н и ц п р о и н д е к с и р о в а н а по в и р т у а л ь н ы м н о м е р а м с т р а н и ц д л я
п ол уче н и я со о т в е т с т в у ю щ е й ч а сти ф и з и ч е с к о г о а д р е с а . Предполагается использование
32-раэрядного адреса. Начальный адрес таблицы страниц задается указателем таблицы стра
ниц. На этом рисунке размер страницы равен 2 ‘г байт, или 4 Кбайт. Виртуальное адресное про
странство равно 2эг байт, или 4 Гбайт, а физическое адресное пространство равно 2 х байт, что
позволяет иметь оперативную память обьемом до 1 Гбайт. Количество записей в таблице страниц
равно 2го, или 1 млн записей. Бит достоверности для каждой записи показывает, является ли ото
бражение истинным, Если он сброшен, значит, страница отсутствует в памяти. Хотя показанная
здесь запись таблицы страниц может иметь только лишь 19 разрядов а ширину, эта ширина, как
правило, для простоты индексирования должна быть округлена до 32 разрядов. Лишние раз
ряды могут использоваться для сохранения дополнительной информации, которую необходимо
хранить на постраничной основе, например сведения о защите
О тсутстви е страницы
Если бит достоверности для виртуальной страницы сброшен, возникает ошибка
отсутствия страницы. Справиться с ней должна операционная система. Передача
управления происходит с помощью механизма исключений, который будет рассмо
трен в данном разделе чуть позже. После того как операционная система получила
управление, она должна найти страницу на следующем уровне иерархии (обычно
на магнитном диске) и решить, в какое место оперативной памяти нужно записать
запрошенную страницу.
Сам по себе виртуальный адрес не может тут же сообщить нам, где именно
на диске находится страница. Возвращаясь к нашей аналогии с библиотекой, мы
не можем найти местонахождение библиотечной книги на полках, зная лишь ее
название. Для этого нужно подойти к каталогу и найти книгу, получив ее место
положение на полке. Так же и в системе виртуальной памяти, мы должны от
слеживать местоположение на диске каждой страницы в виртуальном адресном
пространстве.
Поскольку нам не известно заранее, когда находящаяся в памяти страница будет
заменена, операционная система при создании процесса обычно оставляет место
на диске для всех его страниц, которое называется пространством свопинга. В это
же время она также создает структуру данных, чтобы записать, в каком месте дис
ка хранится каждая виртуальная страница. Эта структура данных может быть ча
стью таблицы страниц или может быть дополнительной структурой данных, про
индексированной точно так же. как и таблица страниц. На рис. 5.19 показана
организация, где в одной и той же таблице хра
нится либо физический номер страницы, либо
П р о с т р а н с т в о с а о п и н га адрес на диске.
Пространство на диске, зарезервирован- Л
ное для всего пространства виртуальной Операционная система также создает струк-
памяти процесса. ТУРУ данных, в которой отслеживается, какие
5.4. Виртуальная память 551
Виртуальный номер
А что н а с ч е т з а п и с и ?
Разница между временем доступа к кэш памяти и к оперативной памяти состав
ляет от десятков до сотен циклов, и могут быть использованы схемы сквозной
записи, хотя, чтобы скрыть латентность записи из процессора, нам понадобится
буфер записи. В системе виртуальной памяти запись в следующий уровень иерар
хии (диск) занимает миллионы тактовых циклов процессора; поэтому создание
буфера записи, чтобы система могла вести сквозную запись на диск, будет со
вершенно непрактичным решением. Вместо этого системы виртуальной памяти
должны использовать отложенную запись, выполняя отдельные операции записи
на страницу в памяти и копируя страницу обратно на диск, когда она заменяется
в памяти.
У с к о р е н и е п р е о б р а з о в а н и я а д р е с а : T LB
Поскольку таблицы страниц хранятся в оперативной памяти, каждый доступ к па
мяти со стороны программы может занять, по крайней мере, вдвое больше времени:
ино обращение к памяти для получения физического адреса, а второе — для по
лучения данных. Ключом для повышения производительности доступа является
расчет на локальность обращения к таблице страниц. Когда используется преоб
разование для виртуального номера страницы, есть вероятность того, что в ближай
шем будущем оно понадобится снова, поскольку ссылки на слова на этой странице
обладают локальностью, связанной как со временем, гак и с пространством.
В соответствии с этим современные процессоры включают в себя специальную
кэш-память, в которой отслеживаются самые последние преобразования. Эта спе
циальна! кэш память преобразования адресов традиционно называется буфером
быстрого преобразования адреса (translation-lookaside buffer —TLB), хотя было
бы логичнее назвать ее кэш памятью преобразований. TLB похож на небольшую
записку, которая обычно используется для записи местоположения подборки тех
книг, которые мы ищем в библиотечной картотеке; вместо повторного поиска во
всем каталоге мы записываем местоположение нескольких книг и используем эту
записку в качестве кэш-памяти шифров библиотеки Конгресса.
На рис. 5.20 показано, что каждая запись тега в TLB содержит часть виртуаль
ного номера страницы, а каждая запись данных в TLB содержит физический номер
страницы. Поскольку при каждой ссылке мы обращаемся к TLB вместо таблицы
страниц, в TLB нужно включить другие биты статуса, такие как бит изменения
и бит обращения.
При каждом обращении ведется поиск виртуального номера страницы в TLB.
Если будет попадание, для формирования адреса используется физический номер
страницы и устанавливается в единицу соответствующий бит обращения. Если
процессор осуществляет запись, также в единицу устанавливается бит изменения.
Если происходит промах при обращении к TLB, нужно определить, что это
ошибка отсутствия страницы иди просто промах при обращении к TLB. Если
страница присутствует в памяти, тогда промах при обращении к TLB свидетель
ствует только лишь о том, что произошел промах при получении результата пре
образования адреса. В таких случаях процессор может справиться с промахом при
обращении к TLB путем загрузки результата преобразования из таблицы страниц
в TLB с последующей повторной попыткой обращения. Если страницы нет в па
мяти, тогда промах при обращении к TLB свидетельствует о возникновении ошиб
ки отсутствия страницы. В таком случае процессор обращается к операционной
системе, используя исключение. Поскольку в TLB количество записей намного
меньше количества страниц в оперативной памяти, промахи при обращении к TLB
будут случаться намного чаще, чем настоящие ошибки отсутствия страницы.
Промахи при обращении к TLB могут быть
обработаны аппаратным или программным
способом. Если разобраться, то на практике Б у ф е р б ы с т р о го п р е о б р а з о в а н и я
а д р е с а (TLB)
разница в производительности между этими
Кэш-память, отслеживающая недавно ис
двумя подходами невелика, потому что в обоих пользованные отображения адресов, чтобы
случаях применяются одни и те же основные попытаться избежать обращения к таблице
операции. страниц-
556 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
Д о с то в е р н о с ть
TtB
Виртуальный | И зм енение Физический адрес
ном ер страницы Обращение Тег страницы
Физическая память
Таблица страниц
Р и с . 5 .2 0 . T L B р а б о та е т как к э ш -п а м я т ь та б л и ц ы с т р а н и ц д л я з а п и с е й , к о то р ы е о т о б р а
ж а ю тся то л ьк о на ф и з и ч е с к и е с т р а н и ц ы . TLB содержит поднабор отображений виртуальных
страниц на физические, имеющиеся е таблице страниц. Отображения TLB показаны другим
цветом. Поскольку TLB является кэш-памятью, у нее должно быть поле тега. Если в TLB нет
записи, соответствующей странице, нужно обращаться к таблице страниц Таблица страниц либо
предоставит физический номер страницы (который может быть использован для создания записи
TLB), либо покажет, что страница находится на диске, в таком случае возникнет ошибка отсутствия
страницы. Поскольку таблица страниц содержит запись для каждой виртуальной страницы, поле
тега ей не нужно; иными словами, в отличие от TLB, заблица страниц не является кэш-памятыо
После того как при промахе во время обращения к TI.B отсутствующий ре
зультат преобразования извлечен из таблицы страниц, нам нужно будет выбрать
запись в TLB, которая будет заменена. Поскольку в составе записи TLB есть биты
изменения и обращения, то при замене записи эти биты нужно скопировать об
ратно в таблицу страниц. Эти биты являются единственной частью записи TLB,
которая может быть изменена. Использование отложенной записи, то есть копиро
вание этих записей обратно при промахе, а не тогда, когда в них была произведена
запись, — очень эффективное решение, поскольку ожидается, что коэффициент
промахов при обращении к TLB будет небольшим. На некоторых системах ис
пользуются другие технологии, приблизительно похожие на использование битов
обращения и изменения, исключающие необходимость записи н TLB, кроме вне
сения новой записи при промахе.
У TLB могут быть следующие типовые параметры:
♦ размер TLB: 16-512 записей;
♦ размер блока: 1-2 записи таблицы страниц (обычно по 4 -8 байт каждая);
5.4. Виртуальная память 557
О б ъ е д и н е н и е в и р ту а л ь н о й п а м я т и ,
б у ф е р о в T L B и у с т р о й с т в к э ш -п а м я т и
Наша виртуальная память и система кэш-памяти работают вместе в рамках одной
иерархии, поэтому данные не могут быть в кэш-памяти, пока они не будут при
сутствовать в оперативной памяти. Операционная система помогает обслуживать
эту иерархию путем сбрасывания на диск содержимого любой страницы из кэш
памяти, когда она решит переместить эту страницу на диск. В то же самое время
операционная система вносит изменения в таблицу страниц и в TLB, чтобы по
пытка обращения к любым данным в перемещенной странице приводила к гене
рированию ошибки отсутствия страницы.
При самых благоприятных обстоятельствах виртуальный адрес транслируется
буфером TLB и отправляется в кэш память, где соответствующие данные разыски
ваются, извлекаются и отправляются процессору. В наихудшем случае обращение
может потерпеть промах во всех трех компонентах иерархии памяти; в TLB, в та
блице страниц и в кэш-памяти. Более подробно это взаимодействие рассмотрено
в следующем упражнении.
Упражнение
Вся операция в иерархии памяти
Иерархия памяти (рис. 5.21) включает в себя ТТ.В и кэш-память, обращение к памяти может
столкнуться с тремя разными типами промахов: промахом при обращении к TLB, ошибкой
отсутствия страницы и промахом при обращении к кэш-памяти. Рассмотрите все комбина
ции этих трех событий, при которых случается одно из них или сразу несколько событий
(всего имеется семь возможных вариантов). Для каждой возможности установите, может
ли это событие произойти на самом деле и при каких обстоятельствах.
°тветНВШ1.
В табл. 5.4 показаны все комбинации и рассмотрены возможности их появления в реальных
устройствах
5.4. Виртуальная память 559
Виртуальный адрес
31 30 29 ................................................... 14 13 12 11 10 9 ............... 32 1 0
С м ет.
б айта
Виртуальный адрес
Обращение
*Т1В
-----1----
Р ис. 5 .2 2 . О бработка чтения или с кво зн о й запи си в In trin s ity FastMATH TLB и в кэ ш -п а м я ти .
Если TLB генерирует попадание, к кэш-памяти можно обратиться с имеющимся физическим
адресом. Для чтения кэш-память генерирует попадание или промах и предоставляет данные или
принуждает к задержке на время доставки данных из памяти, Если осуществляется запись, часть
записи в кэш-памяти при попадании переписывается, и данные отправляются в буфер записи,
при условии, что ведется сквозная запись. Промах при записи равноценен промаху при чтении,
за исключением того, что блок после чтения из памяти подвергается изменению. Технология
отложенной записи требует установки для блока кэш-памяти бита изменения, а в буфер записи
весь блок загружается только при промахе чтения или промахе записи, если заменяемый блок
подвергался изменению. Учтите, что попадание при обращении к TLB и попадание при обращении
к кэш-памяти — это независимые события, но попадание при обращении к кэш-памяти может
произойти только после попадания при обращении к TLB, это означает, что данные должны быть
в памяти. Взаимоотношения между промахами при обращении к TLB и промахами при обра
щении к кэш-памяти будут рассмотрены чуть позже в следующем упражнении и в упражнениях
в конце главы
5.4. Виртуальная память 561
Таблица В о з м о ж н о ли э то ? Если д а , т о пр и ка ки х о б с т о я
TLB К эш
стр а н и ц тельствах?
Попадание Попадание Промах Возможно, хотя обращение к таблице страниц на
самом деле никогда не происходит, если произошло
1
попадание при обращении к TLB
Промах Попадание Попадание При обращении к TLB произошел промах, но запись
нашлась в таблице страниц; после повторения попыт
ки данные обнаруживаются в кэш-памяти
>Промах Попадание Промах При обращении к TLB произошел промах, но за
пись нашлась в таблице страниц; после повторения
попытки обнаруживается, что данные в кэшпамяти
отсутствуют
Промах Промах Промах После промаха при обращении к TLB следует ошибка
отсутствия страницы; после повторной попытки дол
жен произойти промах при обращении за данными
к кэшпамяти
Попадание Промах Промах Это невозможно: в ТШ не может быть результата пре
образования, если страницы нет в памяти
Попадание Промах Попадание Это невозможно: в TLB не может быть результата пре
образования. если страницы нет в памяти
Промах Промах Попадание Это невозможно: данные не могут находиться в кэш
памяти. если страницы нет в оперативной памяти
Уточнение. Таблица 5.4 составлена исходя из того, что все адреса памяти преоб
разованы в физические адреса до обращения к кэш-памяти. При такой организации
кэш-память проиндексирована по физическим адресам и теги также созданы на
основе физических адресов (и индекс кэш-памяти, и тег имеют физические, а не
виртуальные адреса). В такой системе продолжительность обращения к памяти, при
условии попадания при обращении к кэш-памяти, должна включать как время обра
щения к TLB, так и время обращения к кэш-памяти; разумеется, эти обращения могут
быть подвергнуты конвейеризации.
Р е а л и з а ц и я з а щ и т ы при и с п о л ь з о в а н и и
в и р туа л ь н о й п а м я ти
Возможно, наиболее важной функцией виртуальной памяти является возмож
ность совместного использования единой оперативной памяти сразу несколькими
_____________ процессами, обеспечивающая защиту памяти
Неодноэначность в среде этих процессов и операционной си
Ситуация, при которой доступ к одному стемы. Механизм защиты должен обеспечить
и тому же объекту осуществляется по двум при совместном использовании оперативной
адресам; может возникать в виртуальной
памяти при наличии двух виртуальных
памяти несколькими процессами, чтобы один
адресов для одной и той же физической отступивший от правил процесс не смог вести
страницы. запись в адресное пространство другого поль-
эовательского процесса или операционной си
Ф и з и ч е с к и ад р е суе м а я кэ ш -п а м я т ь
Кэш-память, адресуемая по физическому стемы, будь то преднамеренно или непредна
адресу. меренно. Би г разрешения записи в TLB может
5.4. Виртуальная память 563
О б р а б о тк а п р о м а х о в п ри о б р а щ е н и и к T LB
и ош и бок отсутстви я страницы
Хотя преобразование виртуальных адресов в физические с помощью TLB, при
условии попадания в нее, осуществляется довольно просто, обработка промахов
при обращении к TLB и ошибок отсутствия страницы является куда более слож
ной задачей. Промах при обращении к TLB возникает в том случае, когда в TLB
отсутствует запись, соответствующая виртуальному адресу. Промах при обращении
к TLB может свидетельствовать об одной из двух возможностей:
1. Страница присутствует в памяти, и нужно лишь создать недостающую TLB-
запись.
2. Страницы нет в памяти, и нужно передать управление операционной системе
для обработки ошибки отсутствия страницы.
Как узнать, с каким из этих двух обстоятельств пришлось столкнуться? При
обработке промаха при обращении к TLB будет вестись поиск записи в таблице
страниц для доставки ее в TI.B. Если у соответствующей записи таблицы страниц
сброшен бит достоверности, значит, соответствующая страница нс присутствует
в памяти, и мы имеем дело с ошибкой отсутствия страницы, а не просто с прома
хом при обращении к TLB. Если бит достоверности установлен, мы можем просто
извлечь нужную запись.
Промах при обращении к TLB может быть обработан программно или аппа
ратно. поскольку для этого потребуется выполнить всего лишь небольшую по
следовательность операций, копирующих достоверную запись таблицы страниц
из памяти в TLB. MIPS традиционно ведет обработку промахов при обращении
566 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
TLBmiss:
m fc O * k l.C o n te x t # копиоование адреса элемента таблицы с т р а н и ц (Р Т Е )
# в с врем енны й р е г и с т р Ski
1w S k i. O ( S k l) # помещ ение РТ Е во врем енны й р е г и с т р Ski
m tc O S k i.E n t r y L o # помещ ение РТЕ в сп е ц и а л ь н ы й р е г и с т р E n t r y L o
t lb w r # помещ ение E n t r y L o в п р ои звол ьн ую за п и сь TLB
e re t # возвр ащ ен и е из и скл ю ч ен и я, в ь з в а н н о го промахом при
# обращ ении к TLB
ошибку, должен быть вычислен путем изучения инструкции (чей адрес находится
в ЕРС), чтобы определить базовый регистр и поле смещения.
Таблица 5.6. MIPS-код для сохранения и восстановления состояния при возникно
вении исключений
Сохранение состояния
Сохранение регистров общего add-< Ski.Ssp. -XCPSIZE # сохранение пространства стека
назначения (GPR) # ДЛЯ СОСТОЯНИЯ
sw Ssp. XCT_SP(Ski) # сохранение в стеке Ssp
sw SvO, XCTVO(Skl) ti сохранение в стеке SvO
# сохранение в стеке Svl. Sat.
jf Ssi. S ti__
sw Sra. XCT RA(Skl) # сохранение в стене Sra
Сохранение hi, 1о mfhi SvO # копирование Hi
mfki Svl # копирование Lo
sw SvO. XCT_HUSkl) i сохранение в стеке значения Hi
s« Svl. ХСТ'|_Э($0 # сохранение в стеке значения to
Сохранение регистров mfcO SaO, Scr # копирование регистра причини
исключения sw SaO. XCT_CR(Skl) # сохранение в стеке значения Scr
♦ сохранение S vl.......
■fcfl Sa3. Ssr # копирование регистра статуса
sw Sa3. XCT_SR(Skl) # сохранение в стеке Ssr
Установка sp •ove Ssp. Ski # sp ■ sp - xCPSIZE
Разрешение вложенных исключений
andi SvO. Sa3. 4ASK1 * SvO - Ssr & MASK1.
# разрешение исключений
mtcO SvO. Ssr ♦ Ssr - значению, оазрелаидепу
# исключения
Вызов обработчика исключения, написанного на языке С
установка $др ■ove Sgp. GPINIT # установка Sgp на точку области кучи
Вызов С-кода ■ove SaO. Ssp H argl - указатель на стек исключений
ja l xcpt_oeltver # вызов Си-кода для обработки
# исключения
Восстановление состояния
Восстановление большин move Sat. Ssp # вреиенное значение Ssp
ства GPR, hi, 1о lw Sra XCT_RA(Sat) # восстановление Sra из стека
# восстановление StO.........Sal
lw SaO. XCT_AO(Skl) # восстановление SaO из стека
Восстановление регистра lw SvO, XCTSR(Sat) # загрузка ciaporo Ssr из стека
статуса 1i Svl. HASK2 # установка каски для запрещения
# исключений
and SvO. SvO. Svl # SvO - Ssr & MASK2. залрешение
4t исключений
■tcO SvO. Ssr # установка регистра статуса
Возвращение из обработки исключения
Восстановление Ssp lw Ssp. XCT_SP(Sat) N восстановление Ssp из стека
и остальных GPR, которые lw SvO. XCTJNKSat) # восстановление SvO из стека
использовались в качестве lw Svl. XCT_Vl(Sat) t восстановление Svl из стека
временных регистров lw Ski. XCT~£S*C<Sat) # копирование старого Sepc из стека
lw Sat. XCT AT(Sat) # восстановление sat из стека
Восстановление ERC mtcO Ski. Sepc # восстановление Sepc
и возвращение eret Sra # возвращение к прерванной инструкции
5.4. Виртуальная память 571
Уточнение. Эта упрощенная версия предполагает, что в указателе стека (sp) нахо
дится достоверное значение. Чтобы избежать ошибки отсутствия страницы при вы
полнении этого низкоуровневого кода обработки исключений, MIPS выделяет часть
своего адресного пространства, которая не может иметь ошибок отсутствия страниц,
эта часть называется неотображаемой. Операционная система помещает код точки
входа в обработчик исключений и стек обработки исключений в неотображаемую па
мять. Оборудование MIPS переводит виртуальные адреса с 8000 0000,6 по BFFF FFFF,e
в физические адреса путем простого игнорирования старших разрядов виртуального
адреса, помещая тем самым эти адреса в нижнюю часть физической памяти. Таким
образом, операционная система помещает код входа в обработчик исключений и стеки
обработки исключений в неотображаемую память.
К р а тк и е в ы в о д ы
Виртуальная намять —это название уровня в иерархии памяти, который управля
ет кэшированием между оперативной памятью и диском. Виртуальная память
позволяет отдельной программе расширить ее адресное пространство, выходя за
пределы оперативной памяти. Наиболее важно то, что виртуальная память под
держивает совместное использование оперативной памяти сразу несколькими
одновременно активными процессами с соблюдением защитных мер.
Управление иерархией памяти между оперативной памятью и диском дается
нелегко, поскольку цена ошибки отсутствия страницы слишком высока. Для со
кращения коэффициента промахов используется ряд технологий:
1. Страницы делают достаточно большими, чтобы воспользоваться преимуще
ством пространственной локальности и уменьшить коэффициент промахов.
2. Отображение виртуальных адресов на физические, реализуемое с помощью
таблицы страниц, делается полностью ас
социативным, чтобы виртуальная страница неотображаемая память
могла быть помещена в любое место опера- Часть адресного пространства, в которой не
тивной памяти, может быть ошибок отсутствия страницы.
572 Глава 5. Обьемная и быстродействующая: анализ иерархии памяти
Самопроверка
Соотнесите элемент иерархии, показанный слева, с наиболее подходящей для него
фразой, показанной справа:
1. Кэш уровня L1 а. Кэш-память для кэш-памяти
2. Кэш уровня L2 б. Кэш-память для дисков
3. Оперативная память в. Кэш-память для оперативной памяти
4. TI.B г. Кэш-память для элементов таблицы страниц
В о п р о с 1: К уд а м о ж е т б ы ть п о м е щ е н б л о к ?
Мы уже видели, что для размещения блока в верхнем уровне иерархии может
использоваться ряд схем, от непосредственного отображения до множественной
и полной ассоциативности. Как уже ранее упоминалось, весь этот ряд схем может
рассматриваться как вариации множественно-ассоциативной схемы, где варьиру
ется количество каналов и количество блоков на канал:
Рис. 5.23. Коэффициенты промахов при обращении к кэш-памяти данных для каждого
ю восьми размеров кэш-памяти по мере возрастания степени ассоциативности. П ри су
щ еств ен н о м п р е и м ущ ес тв е от п ер е х о д а с о д н окан ал ьно й (с н еп о ср ед ствен ны м о то б р а ж е н и е м )
к двухканальной а с со ц и ати в н о й к з ш -п а м я т и п р е и м ущ ес тв а от д а л ь н е й ш е го повы ш ения с теп ен и
ассоциативности м ен ее значительны (нап ри м ер, 1% - 1 0 % -н о е улучш ение при п ереходе от двухка
нальной к ч еты рехканальной ассо ц и ати в но й к э ш -п а м я т и по сравнению с 2 0 % -3 0 % -м ы м ул учш е
нием при переход е о т одн ого к двум к анал ам ). Ещ е м ен ь ш е е улучш ение происходит при п ереходе
от четы рехканальной к в о сь м иканальной а с с о 11и а ти в н о сти , ко то р ая , в свою очередь, д о с т и га е т
п ракти чески с о п о с та в и м о го с полной а ссо ц и ати в н о сть ю ко эф ф и ц и ен та п ро м ахов. М е н ь ш и е по
объ ему б л о ки к э ш -п а м я т и получаю т н а м н о го б о л ее значительны е а бсолю тны е п р е и м ущ ес тв а от
повы ш ения сте п е н и а с с о ц и а ти в н о с ти , посколь ку базов ы й п о казател ь ко э ф ф и ц и е н та п ром ахов
для небольш их блоков к э ш -п а м я т и в ы ш е К а к соб ран ы эти д анн ы е, о бъ я снен о в табл. 5 .3
О бщ ее представление
Разные версии кэш-памяти, буферы TLB и виртуальная память могут изначально
выглядеть очень непохожими друг на друга, но они основаны на одних и тех же
двух принципах локальности, и с ними можно разобраться, отвечая на следующие
четыре вопроса:
Вопрос 1: Куда может быть помещен блок?
Ответ: В одно место (при непосредственном отображении), в несколько мест
(при множественной ассоциативности) или в любое место (при полной ассоциа
тивности).
5.5. Общая среда для иерархий памяти 579
Общее представление
Трудности конструирования иерархий памяти состоят в том, что каждое измене
ние, потенциально уменьшающее коэффициент промахов, может также негативно
сказаться на обшей производительности, как показано в табл. 5.8. Эта комбинация
позитивных и негативных эффектов и составляет привлекательность конструиро-
вания иерархии памяти.
Таблица 5 .В. Трудности конструирования иерархии памяти
Возможное негативное
Конструктивное Влияние на коэфф ициент про
влияние
изменение махов
на производительность
Увеличение р а з м е р а У м е н ь ш е н и е количества В о зм о ж н о увел ичени е
к э ш -п а м я ги про м ахов в м ести тел ь н ости в р ем е н и д о ступ а
Самопроверка
Какие из следующих утверждений (если таковые имеются) в целом соответствуют
действительности ?
1. Способов уменьшения вынужденных промахов не существует.
2. В полностью ассоциативной кэш-памяти отсутствуют промахи конфликтов.
3. В уменьшении количества промахов ассоциативность важнее объема.
582 Глава 5. Обьемная и быстродействующая: анализ иерархии памяти
f меняя собой несколько серверов. Еще один пример заключается в том. что дис
петчеры VMM поддерживают миграцию запущенной виртуальной машины на
’ другой компьютер либо для балансировки загруженности, либо для эвакуации
I с отказавшего оборудования.
В целом, издержки виртуализации процессора зависят от рабочей нагрузки.
Программы пользовательского уровня, зависящие только от быстродействия про-
■ессора. имеют нулевые издержки виртуализации: операционная система вызы-
эается довольно редко, поэтому все работает на естественных скоростях. Рабочая
*юр узка, предусматривающая интенсивный ввод-вывод данных, обычно также
-м гонсивно использует операционную систему, выполняя множество системных
эызовов и привилегированных инструкций, что может привести к высоким из
держкам виртуализации. С другой стороны, если рабочая нагрузка, связанная
: интенсивным вводом-выводом, является также зависим ой от быст родейст вия
истем ввода-вывода, издержки виртуализации процессора могут быть патностью
крыты, поскольку процессор часто простаивает в ожидании ввода-вывода.
Издержки определяются как количеством инструкций, которые должны быть
эмулированы VMM, так и количеством времени, отнимаемым каждой из них на
эмуляцию. Следовательно, когда гостевая виртуальная машина запускает ту же
архитектуру набора инструкций (ISA), что и хост-машина, что и предполагается
в данном случае, цель архитектуры и VMM заключается в запуске практически
й с с х инструкций непосредственно на исходном оборудовании.
для решения по всем трем пунктам, и сколько времени пройдет, пока виртуальные
машины XXI века станут такими же эффективными, как универсальные машины
IBM и диспетчеры виртуальных машин 1970-х годов.
Уточнение. Кроме виртуализации набора инструкций есть еще одна проблема — вир
туализация виртуальной памяти, поскольку каждая операционная система в каждой
виртуальной машине управляет своим собственным набором таблиц страниц. Чтобы
справиться с этой работой, VMM разделяет понятия реальной и физической памяти
(которые часто считаются синонимами) и делает реальную память отдельным, про
межуточным уровнем между виртуальной и физической памятью. (Для названия этих
же трех уровней используются также термины виртуальная память, физическая па
мять и машинная память.) Гостевая операционная система отображает виртуальную
память на реальную через свои таблицы страниц, а таблицы страниц VMM отображают
реальную память гостевой системы на физическую память. Архитектура виртуальной
памяти определена либо через таблицы страниц, как в IBM VM/370 и в х86, либо через
структуру TLB, как в MIPS.
Вместо тою ч?обы платить за дополнительный уровень «косвенности» при каждом
обращении к памяти, VMM поддерживает теневую таблицу страниц, которая осущест
вляет непосредственное отображение гостевого виртуального адресного простран
ства на физическое адресное пространство оборудования. Путем обнаружения всех
изменений в гостевой таблице страниц VMM может гарантировать, что используемые
оборудованием при преобразовании адресов записи в теневой таблице страниц со
ответствуют записям окружения гостевой операционной системы, за исключением
соответствующих физических страниц, подставляемых вместо реальных страниц
в гостевых таблицах. Следовательно, VMM должен перехватывать любые попытки
гостевой операционной системы изменить ее таблицы страниц или обратиться к указа
телю таблицы страниц. Обычно это делается путем защиты от записи гостевых таблиц
страниц и перехвата любого обращения к указателю таблицы страниц со стороны
гостевой операционной системы. Как отмечалось ранее, последнее действие проис
ходит вполне естественно, если обращение к указателю таблицы страниц является
привилегированной операцией.
Последней частью архитектуры, подвергаемой виртуализации, является ввод-вывод.
Это самая трудная часть системной виртуализации, что обусловлено постоянно воз
растающим количеством устройств ввода-вывода, подключаемых к компьютеру, и ра
стущим разнообразием этих устройств. Еще одной сложностью является совместное
использование реальных устройств несколькими виртуальными машинами, и эта
сложность усугубляетсн еще и необходимостью поддержки множества драйверов
устройств, которые требуются особенно в том случае, если на одной и той же системе
виртуальных машин поддерживаются разные гостевые операционные системы. Иллю
зия виртуальной машины может поддерживаться путем предоставления каждой вир
туальной машине универсальных версий драйверов устройств ввода-вывода каждого
типа и передачи полномочий управления реальным вводом-выводом диспетчеру VMM.
: 7 . Использование конечного автомата для управления простой кэш-памятью 587
Простая кэш-память
Мы собираемся разработать контроллер для простой кэш памяти. Эта кэш-память
имеет следующие основные характеристики:
♦ непосредственное отображение;
♦ отложенная запись с выделением для записи;
♦ размер блока 4 слова (16 байт или 128 бит);
♦ размер кэш-памяти 16 Кбайт, следовательно, в ней содержится 1024 блока;
♦ 32-разрядная адресация;
♦ кэш память использует для каждого блока бит достоверности и бит изменения.
Пользуясь материалом раздела 5.2, мы можем вычислить поля адреса для кэш
памяти:
♦ кэш-индекс занимает 10 разрядов;
♦ смешение блока занимает 4 разряда;
♦ размер тега составляет 32 - (10 М ). или 18 разрядов.
Между процессором и кэш памятью будут использоваться следующие сигналы:
♦ одноразрядный сигнал Чтения (Read) или Записи (W rite);
♦ одноразрядный сигнал Достоверности (Valid), свидетельствующий о том, что
операция проводится именно с кэш памятью;
♦ 32-разрядный адрес;
♦ 32-разрядные данные от процессора к кэш-памяти;
♦ 32-разрядные данные от кэш-памяти к процессору;
♦ одноразрядный сигнал Готовности ( Ready), свидетельствующий о завершении
операции с кэш памятью.
Следует отметить, что это блокирующая кэш-память, заставляющая процессор
ждать, пока она не обработает запрос.
Интерфейс между оперативной и кэш-памятью имеет те же поля, что и интер
фейс между процессором и кэш-памятью, за исключением того, что данные имеют
ширину 128 разрядов. Расширенный формат памяти не редкость для сегодняшних
микропроцессоров, которые работают с 32-разрядными или с 64-разрядными сло
вами, в то время как DRAM-контроллер зачастую работает с 128-разрядами. При-
588 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
Конечные автоматы
Для блока управления однотактного операционного блока мы использовали на
бор таблиц истинности, определяющих выставления сигналов управления на
основе класса инструкции. Для кэш-памяти используется более сложная система
управления, поскольку операция может быть представлена серией шагов. Система
управления кэш-памяти должна определять как выставленные сигналы для любого
из шагов, так и следующий шаг.
Наиболее распространенный многошаговый метод управления базируется на
использовании конечных автоматов, которые обычно представляются в графиче
ском виде. Конечный автомат состоит из набора состояний и указаний о том, как
изменять состояния. Указания определяются
функцией перехода (next-state function), кото
К о н е ч н ы й а в то м а т рая отображает текущее состояние и входные
Последовательная логическая функция,
значения в новое состояние. Когда конечные
состоящая из набора входных и выходных
сигналов, функции перехода, отображаю автоматы используются для управления, каж
щей текущее состояние и входные значе дое состояние помимо всего прочего определяет
ния в новое состояние, и функции выхода, набор выходных сигналов, которые выставля
отображающей текущее состояние и, воз
можно, входные значения для выставления
ются при нахождении автомата в данном со
выходных сигналов. стоянии. Реализация конечного автомата обыч
но предполагает, что все выходные сигналы,
Функция перехода которые не выставлены явным образом, счита
Комбинационная функция, которая на о с
новании входных данных и текущего с о ются невыставленкыми. Точно так же, соответ
стояния определяет следующее состояние ствующая операция операционного блока за
конечного автомата висит от того факта, что сигнал, который не был
- ~ .'спользование конечного автомата для управления простой кэш-памятью 589
Комбинацмомн з г
логика управлений ----- - Выходные сигналы
управлений
операционным блоком
Выходные- сигналы
Выходные сигналы
Следутом*1’?
Гегс.гтр састокиге сое топкие
Входные сигналы
от операционного блока
ю ш - памяти
Р и с . S .2 S . К о н тр о л л е р ы на о с н о в е к о н е ч н ы х а в т о м а т о в о б ы ч н о р е а л и з у ю т с я с и с п о л ь
з о в а н и е м б л о к а к о м б и н а ц и о н н о й л о ги к и и р е ги с т р а , хр а н я щ е го те к у щ е е с о с т о я н и е , в ы
ходные сигналы комбинационной логики являются номером следующего состояния и сигналами
управления, выставляемыми для текущего состояния. Входными сигналами для комбинационной
логики являются текущее состояние и любые входные сигналы, используемые для определения
следующего состояния. В данном случае входные сигналы являются битами регистра кода опе
рации (opcode). Учтите, что в конечном автомате, рассматриваемом в данной главе, выходные
сигналы зависят только от текущего состояния, а не от входных сигналов. Более подробно это
объясняется в следующем уточнении
Протоколы отслеживания
Один из методов обеспечения целостности данных заключается в гарантии того,
что у процессора имеется исключительный доступ к элементу данных до того, как
он п юизведет запись в этот элемент. Протокол такого типа называется протоко-
5 8. Параллелизм и иерархии памяти: целостность данных в кэш-памяти 595
П р о ц е с с о р А читает П ро м ах п ри о б 0 0
зн а ч е н и е по а д р е с у X р ащ е н и и к к э ш
п ам я ти по а д р е с у X
П р о ц е сс о р Б ч и тает П ро м ах при о б 0 0 0
з н а ч е н и е по а д р е с у X р ащ е н и и к к э ш
п ам я ти по а д р е с у X
П р о ц е сс о р А А н нулирование 1 0
записы в ает зн а ч е н и е э л е м е н та по а д р е
1 по а д р е с у X су X
П р о ц е с с о р Б читает П р о м ах при о б 1 1 1
з н а ч е н и е по а д р е с у X ращ ении к к э ш
п ам я ти по а д р е с у X
5.9. Реальное оборудование: иерархии памяти 597
ЦПУ с одно
временной
мноя>-
WSiuttaneous
' multi
smt :
. Ядрп О
2 Мб и}
3 Мб к ш
памяти
уровн я I 3
[Ф и з и ч е с к и й а д р ес 4 4 р азря д а 4 8 р азря д о в
! Р а з м е р страницы 4 К б а й т. 2 /4 М б а й т 4 К б ай т, 2 /4 М байт
[О р га н и за ц и я TLB 1 TLB для и н стр укц и й и 1 TLB для 1 L1 TLB для и н стр укц и й и 1 L I TLB
данны х на к а ж д о е ядро для данных на ка ж д о е ядро
О б а L1 T L B -б у ф е р а им ею т четы О б а L1 T L B -б у ф е р а являются
рехканальную а ссоц и ати в но сть. полностью ассоциативны м и , L R U -
LR U -з а м е н у зам е н а
L1 TLB данны х и м е е т 6 4 э л ем ен та О б а L1 T L B -б у ф е р а им ею т
для небольш их с тр а н и ц , 3 2 — для 4 8 эл ем ентов
больш их с т р а н и ц
L2 TLB и м ее т 5 1 2 э л ем ентов О б а L2 T L B -б у ф е р а им ею т
5 1 2 эл ем ентов
Характеристика In te l N e h a le m A M D O p te r o n Х4 (B a r c e lo n a )
О р га н и з а ц и и к э ш - Раздель ны е у стр о й ств а к э ш - Раздельны е ус тр о й с тв а к э ш -
п ам я ти уровня L1 пам яти и н стр укц и й и данных п ам я ти и н стр укц и й и данных
А ссоц и ати в н ость к э ш - 4 - канальная (для и н стр укц и й ), 2 -кан ал ь н ая ассо ц и ати в но сть
п ам я ти уровня L1 8 - канальная (для д анны х) а с с о
циативность
Р а з м е р к э ш -п а м я т и 2 5 6 Кб ай т (0 ,2 5 М б а й т ) 5 1 2 Кб ай т (0 ,5 М б ай т)
уровня L2
А ссоц и ати в н ость к э ш 8-кан ал ь н ая а с со ц и ати в н о сть 16-канал ьная а с со ц и ати в н о сть
п ам я ти уровня L2
Р а з м е р блока в L2 6 4 б а й та 6 4 бай та
Р а з м е р к э ш -п а м и ги 8 1 9 2 Кб ай т (8 М б а й т ), о бщ ая 2 0 4 8 К б а й т (2 М б а й т), о бщ ая
уровня L3
31 30 29 ...................... 11 10 9 в 7 в 5 4 3 2 1 0
0 0 0 ... ... ... 0 0 0 1 0 0 1 0 1 1 0 0
Номер блока Смещение блока
кэш-памяти
А д р ес блока
300
=9
32
5.12. Упражнения
Предоставлены Цзичуань Чангом (Jichuan Chang), Джакобом Леверичем (Jacob
Levench), Кевином Лимом (Kevin Lim) и Партасарати Ранганатаном (Parthasara-
л> Ranganathan), все они являются представителями компании Hewlett-Packard.
5Л .1 [10] <5.1 > При условии, что в процесс вовлечены и клиент и сервер,
начала назовите системы, используемые клиентом и сервером. Куда могут быть
помещены устройства кэш-памяти для ускорения процесса?
5Л.2 [ 10] <5.1> Разработайте иерархию памяти для системы. Покажите типич
ный размер и латентность различных уровней иерархии. Какова взаимосвязь между
размером кэш-памяти и латентностью доступа?
5.1.3 (15] <5.1> Что собой представляют элементы переноса данных между
уровнями иерархии? Какая связь между местом расположения данных, размером
данных и латентностью переноса?
5.1.4 [10] <5.1, 5.2> Ширина полосы пропускания канала связи и полоса про
пускания при обработке данных на сервере являются двумя важными факторами,
которые берутся в расчет при разработке иерархии памяти. Чья полоса пропуска
ния может стать здесь ограничивающим фактором? Как улучшить этот показатель,
и какой ценой?
5.1.5 [5] <5.1, 5.8> Теперь рассмотрим ситуацию, при которой к серверу обра
щаются сразу несколько клиентов. Улучшит ли такое развитие событий простран
ственную и временную локальность?
5.1.6 [10] <5.1, 5.8> Приведите пример, когда кэш память может предоставить
устаревшие данные. Как подавить или исключить подобные случаи?
У п р а ж н е н и е 5 .2
В данном упражнении будут рассмотрены свойства локальности памяти при вы
числении матриц. Следующий код написан на языке С, где элементы в одной и той
же строке сохранены рядом друг с другом.
а f o r (1*0; 1<8000; I* * )
f o r ( J - 0 : J< 8: J*+ )
A U K J]-e C J][0 > A IJ][I]:
б f o r ( J - 0 : J< 8: J ~ >
f o r U - 0 : [<8000: I*+ )
A [ I][J ]” B [J][0 ]* A [J][I]:
610 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
5.2.1 [5] <5.1> Сколько 32-разрядных целых чисел может быть сохранено
в 16-байтовой строке кэш-памяти?
5.2.2 [5| <5.1> Обращение к каким переменным демонстрирует временную
локальность?
5 .2 .3 15| <5.1> Обращение к каким переменным демонстрирует пространствен
ную локальность?
Локальность зависит как от порядка обращения, так и от расположения данных.
Те же самые вычисления могут также быть написаны на Matlab, как показано ниже,
который отличается от С последовательным сохранением элементов матрицы, при
надлежащих одному и тому же столбцу.
5.2.4 [10] <5.1> Сколько 16-байтных строк кэш-памяти понадобится для сохра
нения всех 32-раэрядных элементов матрицы, к которым происходило обращение?
5.2.5 [5] <5.1> Обращение к каким переменным демонстрирует временную
локальность?
5.2.6 [5] <5.1> Обращение к каким переменным демонстрирует пространствен
ную локальность?
У п р а ж н е н и е 5 .3
Устройства кэш памяти играют важную роль в достижении высокой произво
дительности иерархии памяти при работе с процессорами. Ниже показан список
32-разрядных адресных ссылок, заданных в виде адресов слов.
а 1, 1 3 4 .2 1 2 , 1, 1 3 5 ,2 1 3 , 162, 1 6 1 ,2 , 4 4 , 4 1 , 2 2 1
5.3.1 [10] <5.2> Определите для каждой из этих ссылок двоичный адрес, тег
и индекс при условии использования кэш-памяти с непосредственным отобра
жением, имеющей 16 блоков по одному слову в каждом. Также перечислите по
падание или промах каждой ссылки, при условии, что изначально кэш-память
была пустой.
5.3.2 [ 10] <5.2> Определите для каждой из этих ссылок двоичный адрес, тег
и индекс при условии использования кэш памяти с непосредственным отображе
нием, имеющей блоки, состоящие из двух слов и общим размером в восемь блоков
5.12. Упражнения 611
Ькже перечислите попадание или промах каждой ссылки, при условии, что изна
чально кэш-память была пустой.
5.3.3 [20) <5.2, 5.3> Вас попросили оптимизировать конструкцию кэш-памяти
_тя заданных ссылок. Возможно создание трех конструкций кэш-памяти с непо-
федственным отображением, каждая из которых имеет общий размер из восьми
лов данных: С 1 имеет блоки размером в одно слово, С2 имеет блоки размером
в гва слова, а СЗ имеет блоки размером в четыре слова. Какая конструкция кэш-
шмяти будет наилучшей в понятиях коэффициента промахов? Если время задерж-
*н при возникновении промаха равно 25 циклам и время доступа к С1 составляет
I цикла, к С2 — 3 цикла, а к СЗ — 5 циклов, какая из конструкций кэш-памяти
будет наилучшей?
Существует множество разных параметров конструкций, играющих важную
роль в общей производительности кэш-памяти. В показанной ниже таблице при
веден список параметров для разных конструкций кэш-памяти с непосредственным
отображением.
У п р а ж н е н и е 5 .4
Для конструкции кэш-памяти с непосредственным отображением, имеющей 32-раз-
рядную адресацию, при обращении к ней используются следующие разряды адреса.
а 31-10 9 -4 3 -0
б 31-12 11-15 4 -0
У п р а ж н е н и е 5 .5
Вспомним, что у нас имеются две стратегии записи и две стратегии выделения
памяти для записи, их комбинация может быть реализована либо в кэш-памяти
уровня L1, либо в кэш-памяти уровня L2.
L1 L2
а Отложенная запись, выделение Сквозная запись, без выделения
для записи для записи
б Отложенная запись, выделение Сквозная запись, выделение
для записи для записи
5.5.1 [5J <5.2, 5.5> Для снижения латентности доступа между разными уров
нями иерархии памяти используются буферы. Перечислите для этой заданной
конфигурации возможные буферы, необходимые между кэш-памятью уровня L1
и кэш-памятью уровня L2 и памятью.
5.5.2 [20] <5.2, 5.5> Дайте описание процедуры обработки промаха при обра
щении к кэш-иамяти уровня L1, рассмотрите задействованные компоненты и воз
можность замены измененного блока.
5.5.3 (20] <5.2, 5.5>Для конфигурации многоуровневой исключающей кэи.
памяти (блок может находиться только в одной кэш-памяти, либо в L1, либс
5.12. Упражнения 613
> L2) опишите процедуру обработки промаха при записи в кэш-память уровня L1,
рассматривая задействованные компоненты и возможность замены измененного
4шока.
Рассмотрите следующую программу и поведение кэш-памяги.
Коэф ф ициент
Ч тен ие Запись Коэф ф ициент п р о Р а з м е р бл о к а
п р о м а х о в п ри
д ан н ы х д ан н ы х м а х о в п ри о б р а щ е в к э ш -п а м я т и
обращ ении
на 10ОО на 1 0 0 0 нии к к э ш -п а м я т и д ан н ы х
к к э ш -п а м я т и
и н стр у к ц и й и н стр у к ц и й и н стр у к ц и й (в байтах)
данны х
3 200 160 0,20% 2% 8
6 180 120 0,20% 2% 16
5.5.4 [5] <5.2,5.5> Какова минимальная полоса пропускания при чтении и запи-
и для кэш-памяти со сквозной записью при выделении для записи (измеренная
s байтах на цикл), необходимая для достижения показателя СР1, равного 2?
5.5.5 [5] <5.2, 5.5> Каковы минимальные полосы пропускания при чтении
н записи для кэш-памяти с отложенной записью при выделении для записи, не-
обходимые для достижения показателя CPI, равного 2 при условии, что 30% за
меняемых блоков кэш памяти являются измененными?
5.5.6 [5J <5.2,5.5> Какова минимальная пропускная способность, необходимая
хтя достижения производительности с показателем СР1 = 1,5?
У п р а ж н е н и е 5 .6
Медиаприложения, проигрывающие аудио или видеофайлы, являются частью
класса рабочих нагрузок, который называется «потоковой» рабочей нагрузкой; то
есть они приносят большое количество данных, но основную часть этих данных
повторно не используют. Рассмотрите рабочую нагрузку, связанную с видеопото-
ком, которая последовательно обращается к рабочему набору объемом 512 Кбайт
с помощью следующего потока адресов:
0,4.8,12,16,20,24,28,32,... ________________
8 18 32 64 128
а 8% 3% 1.8% 1,5% 2%
б 4% 4% 3% 1,5% 2%
5.6.4 (10) <5.2> Каков оптимальный размер блока для латентности промаха
20 х В циклов?
5.6.5 [10] <5.2> Каков оптимальный размер блока для латентности промаха
24 + В циклов?
5.6.6 [10) <5.2> Каков оптимальный размер блока для постоянного значения
латентности промаха?
У п р а ж н е н и е 5 .7
В данном упражнении будут рассмотрены разные способы влияния объема на об
щую производительность. В общем, время доступа к кэш-памяти пропорционально
объему. Предположим, что операция доступа к оперативной памяти занимает 70 нс
и эти операции доступа к памяти составляют 36% всех инструкций. В следующей
таблице показаны данные для устройств кэш памяти уровня L1, подключенных
к двум процессорам, Р1 и Р2.
Коэф ф ициент
Р а з м е р к э ш -п а м я т и В р ем я попадания
пром ахов
L 1 , К б айт при о б р а щ е н и е к L 1 , нс
при о б р а щ е н и и к L 1 , %
а pi 1 11,4 0,62
Р2 2 8,0 0,66
б Р1 8 4.3 0,96
Р2 16 3.4 1,08
5.12. Упражнения 615
5.7.4 |1 0 | <5.3> Каков показатель АМАТ для Р1 при дополнении его кэш
памятью L2? Улучшился или ухудшился показатель АМАТ при использовании
кэш-памяти L2?
5.7.5 [5] <5.3> Каков общий показатель CPI для Р1 при дополнении его кэш
памятью L2 при базовом CPI, равном 1,0?
5.7.6 |10) <5.3> Какой из процессоров быстрее, при условии, что теперь у Р1
имеется кэш-память L2? Если быстрее Р 1. какой коэффициент промахов нужен
Р2 при обращении к его кэш-памяти Ы , чтобы сравняться по производительности
С Р 1? Если быстрее Р2. какой коэффициент промахов нужен Р1 при обращении
к его кэш-памяти L1, чтобы сравняться по производительности с Р2?
У п р а ж н е н и е 5 .8
В этом упражнении рассматриваются результаты применения различных кон
струкций кэш-памяти, в частности дается сравнение кэш памяти, использующей
ассоциативность, с кэш-памятью из раздела 5.2, использующей непосредственное
отображение. При решении данных задач следует обращаться к таблице адресных
потоков, показанной в упражнении 5.3.
5.8.1 [ 10] <5.3> Используя ссылки из упражнения 5.3, покажите окончательное
содержимое трехканальной ассоциативной памяти, имеющей блоки, состоящие из
двух слов и общий размер 24 слова. Используйте алгоритм замены LRU. Для каж
дой! ссылки покажите разряды индекса, тега и смещения блока, а также определите
событие попадания или промаха.
5.8.2 [ 10| <5.3> Используя ссылки из упражнения 5.3, покажите окончательное
содержимое для полностью ассоциативной кэш-памяти, имеющей блоки, состоя
616 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
щие из одного слова и общий размер восемь слов. Используйте алгоритм замены
LRU. Для каждой ссылки покажите разряды индекса, тега и смещения блока,
а также определите событие попадания или промаха.
5.8.3 [ 151 <5.3> Используя ссылки из упражнения 5.3, определите, каким бу
дет коэффициент промахов для полностью ассоциативной кэш-памяти, имеющей
блоки, состоящие из двух слов, и общий размер восемь слов, если используется
алгоритм замены LRU. Каким будет коэффициент промахов при использовании
алгоритма замены MRU (most recently used — последнего по времени использо
вания)? И наконец, определите наилучигий коэффициент промахов для этой кэш
памяти при использовании любой стратегии замены.
Многоуровневое кэширование является важной технологией преодоления
ограничений объема, который может предоставить кэш-память первого уровня,
при сохранении скорости этой кэш-памяти. Рассмотрим процессор, имеющий
следующие параметры:
5.8.4 [10] <5.3> Вычислите показатель CPI для процессора из таблицы при
использовании:
1) только кэш памяти первого уровня;
2) кэш-памяти второго уровня с непосредственным отображением;
3) кэш-памяти второго уровня с восьми канальной ассоциативностью.
Как изменятся эти показатели, если удвоится время обращения к onepai йеной
памяти? Будут ли они снижены наполовину?
5.8.5 [ 10] <5.3> Иерархия кэш-памяти может состоять более чем из двух уров
ней. Имея показанный выше процессор с кэш-памятью второго уровня с непосред
ственным отображением, конструктор хочет добавить кэш-память третьего уровня
обращение к которой займет 50 циклов и уменьшит глобальный коэффициент про-
5.12. Упражнения 617
У п р а ж н е н и е 5 .9
Для высокопроизводительных систем, например для таких, которые используют
индексацию базы данных по принципу В-дерева. размер страницы определяется
главным образом исходя из размера данных и производительности диска. Пред
положим, что индексная страница В-дерева при записях фиксированной длины
заполнена на 70%. Полезность страницы определяется глубиной ее В-дерева, вы
числяемой как loga (количество записей). В следующей таблице, показанной для
16-бантных записей и 10-летнего старого диска с латентностью 10 мс и скоростью
переноса данных 10 Мбайт/с, оптимальный размер страницы составляет 16 Кбайт.
С тоим ость
Разм ер П о л е з н о с т ь стр а н и ц ы , или глубина С о о тн о ш е н и е
доступа
стр а н и ц ы , 8 - д е р е в а ,к о л и ч е с т в о со х р а н е н н ы х полезности
к индексной
К байт д оступов к диску к сто им ости
стр а н и ц е , м с
5.9.1 [10] <5.4> Каким будет наилучший размер страницы, если теперь записи
будут состоять из 128 байтов?
5.9.2 [10] <5.4> Каким будет наилучший размер страницы, если при таких же
условиях, как в упражнении 5.9.1, страницы будут заполнены наполовину?
618 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
5.9.3 [20) <5.4> Каким будет наилучший размер страницы, если при таких же
условиях, как в упражнении 5.9.2, использовать более современный диск с ла
тентностью 3 мс и скоростью переноса данных 100 Мбайт/с? Объясните, почему
будущим серверам будет лучше иметь более крупные страницы.
Сохранение в DRAM «наиболее часто востребованных» (или «горячих») стра
ниц может уменьшить количество обращений к диску, но как при этом определить
точное значение «наиболее часто востребованных» для заданной системы? Спе
циалисты по обработке данных используют соотношение стоимости обращения
к DRAM и к лиску для определения порогового количества раз повторного исполь
зования горячих страниц. Стоимость обращения к диску равна стоимости диска,
деленной на количество обращений в секунду, в то время как стоимость хранения
страницы в DRAM равна стоимости мегабайта DRAM, деленной на размер стра
ницы. Типичные цены на DRAM и диск и типичные размеры страниц базы данных
для нескольких моментов времени приведены в следующей таблице.
Коэффициент
Стоимость Размер Стоимость
Год обращений
DRAM, $/Мбайт страницы, Кбайт диска, S/диск
к диску, обращений/с
1987 5000 1 15000 15
1997 15 8 2000 64
2007 0,05 64 80 83
5.9.4 [10) <5.1, 5.4> Каково пороговое количество раз повторного использова
ния для этих трех поколений технологии?
5.9.5 [10) <5.4> Каково пороговое количество раз повторного использова
ния, если мы продолжаем использовать один и тот же размер страницы, равный
4 Кбайт? Какая тенденция здесь наблюдается?
5.9.6 [20] <5.4> Какие другие факторы могут быть изменены для продолжения
использования того же размера страниц (избегая при этом необходимости пере
писывания программного обеспечения)? Рассмотрите вероятность этих изменений
при существующих технологиях и тенденциях изменения стоимости.
У п р а ж н е н и е 5 .1 0
Согласно описаниям, приведенным в разделе 5.4, виртуальная память исполь
зует таблицы страниц для отслеживания отображения виртуальных адресов на
физические адреса. В данном упражнении показано, как такая таблица может
обновляться по мере обращения к адресам. В следующей таблице показан поток
виртуальных адресов, подмеченный в системе. Предполагается, что используются
страницы размером 4 Кбайт, полностью ассоциативный буфер TLB, имеющий
четыре элемента, и полноценная LRU-замена. Если страницы должны быть до
ставлены с диска, происходит увеличение на единицу следующего наибольшего
номера страницы.
"1
а 4095,31272, 15789, 1 5000,7193,4096, 8912
Буфер TLB
Таблица страниц
Бит досто верн ости Ф и з и ч е с к а я с тр а н и ц а , и ли н а хо ж д е н и е на д и с к е
р 5
0 Диск
0 Диск
II 6
р ________________________ 9
н 11
0 Диск
1 4
0 Диск
0 Диск
1 3
1 12
б 64 16 8
620 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
У п р а ж н е н и е 5.11
В данном упражнении будет изучена пространственно-временная оптимизация
для таблицы страниц. В следующей таблице показаны параметры системы вирту
альной памяти.
5.11.4 [5] <5.4> При каком сценарии бит достоверности элемента 2 был бы
установлен в нуль?
5.11.5 [5] <5.4> Что случится, когда инструкция будет вести запись в страницу
физическим адресом Ж)? Когда буфер TLB, управляемый профаммным способом,
будет быстрее такого же буфера, управляемого аппаратным способом?
5.11.6 [5] <5.4> Что случится, когда инструкция будет вести запись в страницу
с виртуальным адресом ххх?
У п р аж н ен и е 5 .1 2
В данном упражнении будет изучено влияние стратегии замены на коэффициент
промахов. Предположим, что используется двухканальная кэш-память с четырьмя
блоками. Возможно, для решения задач пригодится таблица, подобная той, что
была показана в упражнении «Промахи и количество каналов ассоциативности
в кэш-памяти» подраздела «Уменьшение коэффициента промахов в кэш памяти за
счет более гибкого размещения блоков» раздела 5.3, показанная ниже для адресной
последовательности *0,1,2,3,4».
А д р е с бл ока С о д е р ж и м о е б л о к о в к э ш -п а м я т и
п ам яти , п о сл е о б р а щ е н и я
П о п а д ан и е Заменяемы й
к котором у
или п ро м ах бл ок
осущ ествляется Набор 0 Набор 0 Набор 1 Набор 1
обращ ение
0 Промах Пам[0]
1 Промах Пам[0] Пам[1]
2 Промах Пам[0] Пам[2] Пам[1]
3 Промах Пам[0] Пам(2] Пам[1) Пам[3)
4 Промах 0 Пам[4] Пам[2] Пам[1] Пам[3]
А дресная последовательность
а 0, 2 .4 . 0 .2 , 4 ,0 . 2 .4
б 0 ,2 . 4, 2 .0 , 2. 4 .0 , 2
622 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
5.12.1 [5] <5.3,5.5> Сколько попаданий будет при этой адресной последователь
ности в случае использования LRU-замены?
5.12.2 [5] <5.3,5.5> Сколько попаданий будет при этой адресной последователь
ности в случае использования MRU-замены (most recently used — последнего но
времени использования)?
5.12.3 (5] <5.3, 5.5> Сымитируйте произвольную стратегию замены путем
подбрасывания монеты. Например, «орел* будет означать замену первого блока,
а «решка» —замену второго блока из набора. Сколько попаданий будет при данной
адресной последовательности?
5.12.4 [10] <5.3, 5.5> По какому адресу должна проводиться замена для уве
личения количества попаданий? Сколько попаданий будет при такой адресной
последовательности, если следовать этой «оптимальной» стратегии?
5.12.5 110] <5.3,5.5> Объясните, почему возникают трудности при реализации
такой стратегии замены в кэш-памяти, которая была бы оптимальной для всех
адресных последовательностей.
5.12.6 [10] <5.3. 5.5> Предположим, что вы можете принять решение относи
тельно каждого обращения к памяти, хотите вы или нет кэшировать запрошенный
адрес. Какое влияние это может оказать на коэффициент промахов?
У п р а ж н е н и е 5 .1 3
Для поддержки нескольких виртуальных машин необходима двухуровневая вирту
ализация памяти. Каждая виртуальная машина должна контролировать отображе
ние виртуального адреса (VA) на физический адрес (РА), а гипервизор должен ото
бражать физический адрес (РА) каждой виртуальной машины на действительный
машинный адрес (МЛ). Для ускорения таких отображений программный метод,
называемый теневой страничной организацией, дублирует таблицы страниц каж
дой виртуальной машины в гипервизоре и перехватывает изменения отображений
VA на РА с целью поддержания целостности обеих копий. Чтобы избавиться от
сложности теневых таблиц страниц, аппаратный метод, называемый вложенной
таблицей страниц (или расширенной таблицей страниц), явным образом под
держивает два класса таблиц страниц ( \Л —>РЛ и РА-»МА) и может обходить mi
таблицы исключительно аппаратно
Рассмотрим следующую последовательность операций.
1) Создание процесса; 2) Промах при обращении х TLB. 3 | Отсутствие страницы. 4) Переключение контекста.
5.13.4 [10] <5.6> Каков показатель СР1 при использовании теневых таблиц
страниц по сравнению с использованием вложенных таблиц страниц (если брать в
расчет только издержки виртуализации таблицы страниц) для контрольной задачи,
имеющей в обычных условиях показатель СР1, равный 1?
5.13.5 [ 10] <5.6> Какие технологии могут быть использованы для сокращения
вынужденных издержек, возникающих при использовании теневых таблиц стра
ниц?
5.13.6 110] <5.6> Какие технологии могут быть использованы для сокращения
вынужденных издержек, возникающих при использовании вложенных таблиц
страниц?
У п р а ж н е н и е 5 .1 4
Одно из самых больших препятствий для широкомасштабного использования
виртуальных машин заключается в издержках производительности, связанных
с запуском виртуальной машины. В показанной ниже таблице перечислены раз
личные параметры производительности и поведение приложений.
В л и я н и е на
Время д о
П р и в и л е ги В л и я н и е на производи О бращ ений
сту п а к
рованны е производи т е л ь н о сть на в во д-
Базовы й в в о д у -в ы в о д у
обращ е т е л ь н о сть п е р е х в а то в вы вод
показа (вклю чая в р е
ния О С п е р е х в а то в диспетчера д а н н ы х на
те л ь CPI м я на п е р е
на 10 0 0 0 го сте в о й в и р ту а л ьн ы х 10 0 0 0 и н
хват го сте в о й
и н стр у к ц и й О С , ц и кло в м а ш и н (V M M ), стр у к ц и й
О С), ц и кл о в
ц и кл о в
а 2 10 0 20 150 20 10 0 0
У п р а ж н е н и е 5 .1 5
В данном упражнении будет использован блок управления для контроллера кэш
памяти для процессора с буфером записи. Для разработки собственных конечных
автоматов в качестве отправной точки используйте конечный автомат, показанный
на рис. 5.26. Предположим, что контроллер предназначен для простой кэш памяти
с непосредственным отображением, рассмотренной в подразделе «Простая кэш
память» раздела 5.7, но с добавлением буфера записи емкостью в один блок.
Следует напомнить, что буфер записи служит временным хранилищем, чтобы
процессору не приходилось ждать двух обращений к памяти в случае промаха при
обращении к измененному блоку. Вместо обратной записи измененного блока перед
чтением нового блока он помещает' измененный блок в буфер и тут же приступает
к чтению нового блока. Затем измененный блок может быть записан в оперативную
намять, в то время когда процессор занят другой работой.
5.12. Упражнения 625
5.15.1 110 j <5.5,5.7> Что должно произойти, если процессор выдал запрос, пы
лавший попадание при обращении к кэш-памяти, в то время как блок записывался
обратно в оперативную память из бус|>ера памяти?
5.15.2 [ 10) <5.5,5.7> Что должно произойти, если процессор выдал запрос, вы
жавший промах при обращении к кэш памяти, в то время как блок записывался
обратно в оперативную память из буфера памяти?
5.15.3 |3 0 | <5.5, 5.7> Разработайте конечный автомат, рассчитанный на ис
пользование буфера записи.
У пр аж н ен ие 5 .1 6
Поддержка целостности кэш-памяти касается того, как несколько процессоров
зидя i заданный блок кэш памяти. В следующей таблице показаны два процессора
• их операции чтения-записи применительно к двум разным словам блока кэш
памяти X (изначально Х[0] = Х[1) - 0).
Р1 Р2
м
____ Х[0] ♦*: Х[1] - 4; Х10] - 2: Х[1] ♦+:
б Х[0] +*: ХГ1] — 3; Х[0] - 5: Х[1] -2:
pi Р2
а А - 1; В - 2: А~; В**: С С - В: D - А;
б А - 1: В ♦ - 2: А «: В-4: С - В: D - А:
5.16.6 [15] < 5.2,5.8> Какие комбинации упрощают реализацию протокола для
разных комбинаций стратегий записи и стратегий выделения памяти в кэш для
записи?
У п р а ж н е н и е 5 .1 7
Микропроцессоры Barcelona и Nehalem относятся к микропроцессорам, реализо
ванным на одном кристалле (chip multiprocessor —CMP), имеющим несколько ядер
с их собственными устройствами кэш-памяти. Конструкция кэш памяти уровня
L2 в СМ Р использует интересные компромиссы. В следующих таблицах показаны
коэффициенты промахов и латентности попадания для двух контрольных задач
для сравнения конструкций с индивидуальными устройствами для каждого ядра
и общим устройством кэш-памяти уровня L2. Предположим, что промах при об
ращении к кэш-памяти уровня L1 происходит один раз на каждые 32 инструкции.
И н д и в и д у а л ьн а я , % О бщ ая, %
И н д и в и д у а л ьн а я к э ш -п а м я т ь О б щ а я к э ш -п а м я т ь П а м я ть
а 6 12 12 0
б 8 20 12 0
5.17.1 [15] < 5 .10> Какая из конструкций кэш-памяти больше подходит для
каждой контрольной задачи? Воспользуйтесь данными для обоснования своих
выводов.
5.17.2 [15] <5.10> Латентность общей кэш-памяти увеличивается вместе с раз
мером СМР. Выберите наилучшую конструкцию, если латентность обшей кэш
памяти L2 удвоилась. Пропускная способность устройств, находящихся вне кри-
сталла, становится узким местом по мере увеличения количества ядер. Выберите
наилучшую конструкцию, если время ожидания внешней памяти удваивается.
5.17.3 [10] <5.10> Рассмотрите все за и против общей и индивидуальной кэш
памяти уровня L2 для однопоточных, многопоточных и мультипрограммных
рабочих нагрузок и пересмотрите их для случая использования внутренней кэш
памяти уровня L3.
5.17.4 [15] <5.10> Предположим, чго базовый показатель СР1 для обеих кон
трольных задач равен 1 (при идеальной кэш памяти L2). Насколько возрастает
производительность благодаря общей кэш-памяти уровня L2 при условии исполь-
эова сия неблокирующейся кэш-памяти? Какого улучшения можно достичь за счет
использования индивидуальной кзш-памяти 1.2?
5.12. Упражнения 627
У п р аж н ен и е 5 .1 8
Вданном упражнении будет показано определение регистрационного журнала веб
сервера и изучена оптимизация кода для увеличения скорости обработки журнала.
Структура данных для журнала определяется следующим образом:
struct entry {
Int srd P ; / / удаленный I P - адрес
char Uftt[128]: И э а п р а и и в а е м ы й URL ( н а п р и ч е р . « G E T i n d e x . h t m l » )
long long refTIme, / / врем я обращ ения
in t status: / / с т а т у с соединения
char browser[64]: / / н азван и е б р а узе р а клиента
log [№H_ENTRIES]:
Некоторые функции обработки журнала вы глядят следующим образом.
в t o p t C s o u r c e lP O :
5.18.1 [5] <5.11 > К каким полям записи журнала будет обращаться данная
функция его обработки? Сколько промахов при обращении к кэш-памяти на одну
запись вызовез в среднем данная функция при условии использования 64-байтных
блоков кэш-памяти и отсутствия предвыборки?
5.18.2 [10] <5.11 > Как можно перестроить структуру данных для повышения
эффективности кэш памяти и локальности доступа? Покажите свой код опреде
ления структуры.
5.18.3 [10] <5.11 > Приведите пример другой функции обработки журнала,
которой больше подойдет другая организация структуры данных. Если обе функ
ции играют важную роль, то как можно переписать программу, чтобы поднять
общую производительность? Подкрепите свои рассуждения фрагментами кода
и данных.
Д ля следующих задач воспользуйтесь данными из контрольных задач
«Cache Performance for SPEC CPIJ2000 Benchmarks* (www.cs.wisc.edu/multifacet/
misc/spec2000cache-data/) для пар контрольных задач, показанных в следующей
таблице.
а apsi/facerec
б perlbmk/ammp
628 Глава 5. Объемная и быстродействующая: анализ иерархии памяти
Интерфейс
630 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
6.1. Введение
Если зависание компьютера и необходимость его перезапуска людей просто раз
дражает, то авария запоминающего устройства с потерей информации приводит их
в ярость. Поэтому стандарт надежности для средств хранения информации намного
выше, чем для средств вычисления. Сети также рассчитаны на сбои при передаче
данных, включая ряд механизмов для обнаружения сбоев и восстановления по
сле них. Поэтому в системах ввода-вывода обычно уделяется намного больше
внимания надежности и стоимости, а в процессорах и памяти основное внимание
уделяется производительности и стоимости.
При разработ ке систем ввода-вывода также должны учитываться возможности
расширения и разнообразия устройств, что не характерно для процессоров. Воз
можности расширения зависят от емкости запоминающих устройств, еще одного
конструктивного параметра для устройств ввода-вывода; для выполнения задач
системам могут понадобиться минимально допустимые емкости запоминающих
устройств.
Хотя для устройств ввода-вывода производительность играет не самую важную
роль, здесь тоже не все так просто. Например, при работе с некоторыми устрой
ствами основное внимание уделяется латентности доступа, а при работе с другими
устройствами критическим параметром считается пропускная способность. Кроме
того, производительность зависит от многих аспектов системы: характеристик
устройства, связью между устройством и остальной системой, иерархии памяти
и операционной системы. Все компоненты, от отдельных устройств ввода-вывода
и до процессора и системного программного обеспечения, будут влиять на надеж
ность, расширяемость и производительность задач, включающих ввод-вывод. На
рис. 6.1 показана структура простой системы с ее устройствами ввода-вывода.
Устройства ввода-вывода отличаются невероятным разнообразием. Для орга
низации этого разнообразия используются три характеристики:
♦ Поведение. Ввод (однократное чтение), вывод (татько запись, без возможности
чтения) или сохранение (может подвергаться повторному считыванию и обычно
повторной записи).
♦ Партнер. Либо человек, либо машина на другом конце устройства ввода-вывода,
либо поставка данных на вход, либо чтение данных на выходе.
♦ Скорость передачи данных. Пиковая скорость, с которой данные могут быть
перенесены между устройством ввода-вывода и оперативной памятью или
процессором. При проектировании систем ввода-вывода полезно знать макси
мальные требования, предъявляемые устройством.
Например, клавиатура в качестве устройства ввода используется с пиковой ско
ростью передачи данных около 10 байт в секунду. В табл. 6.1 показаны некоторы-
устройства ввода-вывода, подключаемые к компьютерам.
Четыре важных устройства ввода-вывода: мышь, графический дисплей, диск-,
и сети были коротко рассмотрены в главе 1. В данной главе будут более подроби >
рассмотрены запоминающие устройства и связанные с ними вопросы.
6.1. Введение 631
У ст р о й с тв о П оведение П артнер С к о р о с т ь п е р е д а ч и д а н н ы х , М б и т /с
Год с б о р а
О п е р ато р П р о гр а м м а О борудование С истем а
д ан н ы х
Самопроверка
Что из следующих утверждений справедливо с точки зрения безотказности:
1. Если система соответствует стандарту, то все ее компоненты выполняют все,
что от них ожидается.
2. Готовность является количественным показателем, выражающимся в процентах
времени, в течение которого система выполняет все, что от нее ожидается.
3. Надежность является количественным показателем непрерывного предостав
ления системой соответствующих услуг.
4. В наши дни главным источником отказов является программное обеспечение.
апкка находится над одной и той же дорожкой каждой поверхности. Для ссылки
-а веч дорожки, находящиеся под головками в заданной точке всех поверхностей,
используется термин цилиндр.
Для доступа к данным операционная система должна провести диск через
зроцесс, состоящий из трех шагов. Первый шаг заключается в позиционировании
головки над нужной дорожкой. Эта операция называется поиском, а время пере
мещения головки на нужную дорожку называется временем поиска.
Производители дисков в своих руководствах дают сведения о минималь
ном времени поиска, максимальном времени поиска и среднем времени поиска.
Первые два из них измерить нетрудно, но среднее время открыто для широкой
интерпретации, потому что оно зависит от расстояния поиска. Производители
решили вычислять среднее время поиска в виде суммы времени на все возможные
поисковые операции, разделенной на количество таких операций. Среднее время
поиска обычно рекламируется в промежутке между 3 и 13 мс, но, в зависимости от
приложения и диспетчеризации запросов к диску, реальное среднее время поиска
может составлять всего лишь от 25% до 33% от рекламируемого, благодаря локаль
ности обращений к диску. Эта локальность возникает как от последовательного
характера обращений к одному и тому же файлу, гак и от того, что операционная
система пытается путем диспетчеризации сгруппировать подобные обращения.
Как только головка достигнет нужной дорожки, следует дождаться, пока под
головку чтения-записи не попадет нужный сектор. Время этого ожидания называ
ется латентностью вращения или задержкой вращения. Средняя латентность до
получения нужной информации составляет половину времени оборота диска. По
скольку диск вращается со скоростью от 5400 до 15 000 оборотов в минуту, средняя
латентность вращения находится между следующими значениями:
0,5 оборота 0,5 оборота
- 0,0056 с - 5,6 мс
5400 об/мин
5400 об/мин (б0— к^ —|
\ в минуте)
и
0,5 оборота 0,5 оборота
* 0,0020 с = 2,0 мс.
15000 об/мин секунд ;
15 000 об/мин 60
В MHHVTC I
рость передачи данных из кэш памяти, как правило, выше, и в 2008 году могла
достигать 375 М байт/с (3 Гбит/с). Сегодня большинство передач данных имеют
длину в несколько секторов.
Дисковый контроллер обычно занимается всеми тонкостями управления диском
и переноса данных между диском и памятью. Контроллер добавляет последний
компонент времени доступа к диску, время контролпера, являющееся издержками,
вносимыми контроллером в осуществление доступа ввода-вывода. Среднее время
выполнения операции ввода-вывода будет состоять из этих четырех временных
показателей плюс время ожидания, вытекающее из того, что диск используется
другими процессами.
Упражнение
Время чтения диска
Каким будет среднее время чтения или записи 5 12-байгного сектора для обычного диска со
скоростью вращения 15 000 об/мин? Заявленное среднее время поиска равно 4 мс, скорость
передачи данных -100 Мбайт/с, а издержки контроллера —0,2 мс. Предположим, что диск
простаивает, поэтому время ожидания отсутствует.
Ответ
Среднее время доступа к диску равно среднему времени поиска + средняя задержка вра
щения + время переноса данных + издержка контроллера. При использовании заявленного
среднего времени поиска ответ будет следующим:
0,5 оборота 0,5 Кбайт
4,0 мс + 0,2 мс *4,0 ♦ 2,0 + 0,005 + 0 .2 - 6 .2 мс.
15 000 об/м 100 Мбайт/с
Если измеренное среднее время поиска составляет 25% от заявленного среднего времени,
ответ будет следующим:
1,0 мс + 2,0 мс + 0,005 мс + 0,2 мс = 3,2 мс
Обратите внимание на то, что при учете измеренного среднего времени поиска, а не за
явленного времени поиска, латентность вращения может стать наибольшим компонентом
времени доступа.
Самопроверка
Какое из следующих утверждений справедливо для дисковых накопителей:
I 3,5-дюймовые диски выполняют больше операций ввода-вывода в секунду, чем
2,5-дюймовые диски.
2. 2,5-дюймовые диски зачастую имеют наиболее высокий показатель количества
гигабайт на ватт потребляемой мощности.
3. Последовательное чтение содержимого диска большой емкости занимает не
сколько часов.
4 Чтение содержимого диска большой емкости с использованием произвольных
секторов по 512 байт занимает несколько месяцев.
642 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
6.4. Флэш-накопители
Многие пытались изобрести технологию, позволяющую найти замену дискам, пре
терпев при этом множество неудач: ПЗС-память, ЦМД-память и голографическая
память так и не оправдали надежд. Ко времени предполагаемой поставки новой
технологии диски, в соответствии со сделанными ранее предсказаниями, подверга
лись усовершенствованиям, цены на них существенно падали, и бросивший вызов
продукт терял свою рыночную привлекательность.
Первым наиболее вероятным соперником стала флэш-память. Эта полупрово
дниковая память является такой же энергонезависимой, как и диски, но ее лаген г-
ность в 100-1000 раз ниже, чем у диска, и, кроме того, она меньше по габаритам,
обладает более высокой энергоэффективностью и ударопрочностью. Не менее
важным обстоятельством является широкий рынок, открывшийся для флэш -
памяти благодаря ее использованию в сотовых телефонах, цифровых камерах
и МРЗ-плеерах, и инвестирование средств в ее совершенствование. В последнее
время стоимость одного гигабайта флэш-памяти падала на 50% в год. В 2008 году
цена гигабайта флэш-памяти была от 4 до 10 долларов, или в 2 -40 раз выше, чем
у дисков, и в 5-10 раз ниже, чем у DRAM-памяти. В табл. 6.4 сравниваются три
устройства, основанные на флэш-памяти.
Kingston
Transend Type 1 RiDATA
SecureDigital
Характеристики CompactFlash Solid State Disk
<SD)
TS16GCF133 2,5 дюйма SATA
SD4/8 GB
Емкость отформатированного 8 16 32
носителя, Гбайт
Байт на сектор 512 512 512
Скорость переноса данных (при 4 20/18 68/50
чтении-записи), Мбайт/с
Энергопотребление при работе / 0,66/0,15 0,66/0,15 2 .1 / -
в режиме ожидания, Вт
Размер: высота х ширина х длина, 0,94 x 1,26x0.08 1,43 x 1,68*0,13 0 ,3 5 *2 ,7 5 x 4 ,0 0
дюймы
Вес, г 2,5 11,4 52
Среднее время наработки на отказ, > 1 000 000 > 1 000 000 > 4 000 000
часов
Гбайт/куб. дюйм, Гбайт/Вт 84; 12 51; 24 8 ; 16
Самопроверка
Какое из следующих утверждений справедливо для флэш-памяти:
1. Подобно DRAM, флэш-память является полупроводниковым устройством
памяти.
2. Подобно дискам, флэш-память не теряет информацию при отключении питания.
3. Время доступа при чтении NOR флэш-памяти такое же, как у DRAM.
4. Пропускная способности при чтении yNAND флэш-памяти такая же, как у диска.
Основной недостаток шины заключается в том, что она создает для связи узкое
*-ето, которое может ограничить максимальную пропускную способность ввода-
■авода. Когда ввод-вывод должен проходить через единственную шину, пропуск
а в способность этой шины ограничивает максимальную пропускную способность
«вода-вывода. Разработка шинной системы, способной отвечать потребностям
гроцессора. а также подключать к машине большое количество устройств ввода-
шоода. представляет собой весьма трудную задачу.
Шины традиционно подразделяются на шины процессор-память и шины
шн>и-вывода. Шины процессор-память имеют небольшую протяженность, как
правило, высокую скорость передачи данных и согласуются с системой памяти для
вбесиечення максимальной пропускной способности по маршруту «память—про
цессор». В отличие от них, шины ввода-вывода могут быть длиннее, иметь большее
разнообразие типов подключенных к ним устройств и часто работают с широким
диапазоном пропускной способности этих устройств. Шины ввода-вывода обычно
не имеют прямого интерфейса с памятью, но используют для подключения к па
мяти шину процессор-память либо монтажную шину' (backplane bus). Появлялись
н другие специализированные шины, например графические, имеющие различные
характеристики.
Одной из причин трудности разработки шины является то, что максимальная
скорость шины во многом ограничена физическими факторами: длиной шины
и количеством устройств. Эти физические ограничения не дают запустить шину
с произвольной скоростью. Кроме того, разработка шин усложняется необходимо
стью поддержки широкого спектра устройств с сильно отличающейся латентно
стью и пропускной способностью.
Из-за трудностей запуска передачи данных на высокой скорости по множе
ству параллельных проводников, вызванных расфазировкой и отражением сиг
налов, промышленность перешла от параллельных общих шин к высокоско
ростным последовательным двухточечным
соединениям с коммутаторами. Поэтому такие Ш и н а п р о ц е с с о р -п а м я т ь
сети ввода-вывода в большинстве случаев за Короткая шина, как правило, высокоско
менили в наших системах шины ввода-вывода. ростная, соединяющая процессор и па
мять. согласованная с системой памяти
В результате в данном издании этот раздел
для получения максимальной пропускной
пришлось пересмотреть, чтобы придать особое способности на маршруте «память—про
значение общей задаче подключения устройств цессор».
ввода-вывода, процессоров и памяти, а не фоку
Монтажная шина
сироваться исключительно на шинах. Ш ина, разработанная для того, чтобы
дать возможность процессорам, памяти
Общие вопросы и устройствам ввода-вывода сосущество
вать на единой шине.
подключения
Транзакция ввода-вывода
Рассмотрим обычную транзакцию ввода-вы Последовательность операций, связанных
вода. Транзакция включает в себя две части: с обменом данными, которая включает за
прос и может включать ответ, каждый из
отправку адреса и получение или отправку
которых может переносить данные. Тран
данных. Шинные транзакции обычно опреде закция инициируется единственным запро
ляются тем, что они делают с памятью. Транзак сом и может замять множество отдельных
ция чтения переносит данные из памяти (либо операций, связанных с шиной,
646 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
Firewire Serial A t
Характеристика USB 2.0 PCI Express Serial АТА
(1394) tached SCSI
Тредполагаемое Внешний Внешний Внутренний Внутренний Внешний
|*пользоеамие
■ оличество 63 12 7 1 1 4
Ь тр о й ств на
С о е д и н е н и я в в о д а -в ы в о д а п р о ц е с с о р о в х 8 6
рис. 6.3 показана система ввода-вывода традиционного персонального компью-
- pa (PC). Процессор соединяется с периферийными устройствами посредством
.дух основных микросхем. Микросхема рядом с процессором является контрол-
. ром-концентратором памяти, ее обычно называют северным мостом, а подклю-
648 Глава 6. Хранение информации и другие темы, связанные с вводом выводом
Процессор ] Процессор !
Intel Хеоп 5300 I Intel Хеоп 5300
------------- 1 --------
Фронтальная шина (1333 Мгц, 10,5 Гбит/с)
FB DDR2 667
(5,3 Гбит/с) PCIe х 16 (или 2 РОе х8)
DIMM модули
концентратор (4 п5ит/с)
памяти
оперативной
(северный мост)
памяти
5000Р
ESI PCIe хв
Serial АТА (2 Гбит/с) (2 Гбит/с)
(300 Мбит/с)
PCIex4
(1 Гбит/с)
PCIe x4
(1 Гбит/cl
Диск Контроллер-
концентратор PCI-X bus
LPC ввода-вывода (1 Гбит/с)
(1 Мбит/с) (южный мост) PCI-X bus
Клавиатура,
Entreprise South
мышь,... (1 Гбит/с)
Bridge 2
USB 2.0 Parallel ATA
(60 Мбит/с)
Рис. 6.3. Организация ввода-вывода на сервере Intel, использующем чипсет Intel 50ООР.
При условии, что обмен данными приходится на операции чтения и записи поровну, i |ропускмую
способность на каждую связь по PCIe можно удвоить
6.5. Соединение процессоров, памяти и устройств ввода-вывода 649
аблица 6 .7 . Два чипсета ввода-вы вода от ком пании Intel и один чипсет от
ком пании A M D . Обратите внимание на то, что функции северного
моста включены в микропроцессор AMD, они также включены и в один
из самых новых процессоров Intel Nehalem
Самопроверка
И сети, и шины служат для объединения компонентов. Что из перечисленного ниже
является достоверными сведениями об этих устройствах?
1. Сети и шины ввода-вывода практически всегда работают согласно какому-ни
будь стандарту.
2. Сети и шины ввода-вывода практически всегда работают в синхронном режиме.
•омер устройства, так и слово команды (или местонахождение слова команды в памя-
**). Процессор передает адрес устройства по набору проводников, которые обычно
:оставляют часть шины ввода-вывода. Текущая команда может быть передана по име
ющимся на шине линиям данных. Примерами компьютеров, использующих инструкции
зэода-вывода, могут служить Intel х86 и IBM 370. Пользовательские программы могут
бчыть отстранены от непосредственного обращения к устройствам путем запрещения
выполнения инструкций ввода-вывода.
Связь с процессором
Процесс периодической проверки битов состояния для определения своевремен
ности следующей операции ввода-вывода, как в предыдущем примере, называется
опросом (polling). Опрос является простейшим способом связи устройства ввода-
аывода с процессором. Устройство ввода-вывода просто помещает информацию
э регистр состояния, а процессор может обратиться к нему и получить инфор-
чацию. Процессор целиком вовлечен в процесс управления и делает всю работу
самостоятельно.
Опрос может использоваться разными способами. Устройства ввода-вывода
опрашиваются встраиваемыми приложениями реального времени, поскольку
скорости ввода-вывода предопределены, что делает издержки ввода-вывода более
предсказуемыми и помогает разобраться в текущем моменте. Как будет показано,
это позволяет использовать опрос даже когда скорость ввода-вывода будет не
сколько более высокой.
Недостаток опроса состоит в том, что на него тратится впустую много процес
сорного времени, поскольку процессоры работают намного быстрее устройств
ввода-вывода. Процессор может прочитать регистр состояния много раз только для
того, чтобы обнаружить, что устройство еще не завершило сравнительно более
медленную операцию ввода-вывода или что мышь не перемещалась со времени
последнего опроса. Когда устройство завершает операцию, мы также должны счи
тать его состояние, чтобы определить успешность этой операции.
Издержки интерфейса, построенного на опросе, стали известны очень давно, что
привело к изобретению прерываний для оповещения процессора о том. что устрой
ству нужно уделить внимание со стороны процессора. Ввод-вывод, управляемый
прерываниями, который используется почти всеми системами, у которых имеется
хотя бы небольшое количество устройств, применяет прерывания ввода-выво
да, чтобы показать процессору, что устройству
ввода-вывода нужно уделить внимание. Когда Опрос
устройство хочет уведомить процессор, что оно Процесс периодической проверки состоя
завершило ту или иную операцию или нужда ния устройства ввода-вывода для опреде
ления необходимости в его обслуживании.
ется во внимании, оно заставляет процессор
прервать его работу. Ввод-вывод, управляемый
Прерывания ввода-вывода похожи на ис прерываниями
ключения, которые рассматривались в главах 4 Схема ввода-вывода, использующая пре
рывания. чтобы показать процессору, что
и 5, но с двумя важными отличиями: устройство ввода-вывода нуждается во
внимании.
654 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
15 8 4 10
— _________________________ __________________________
Маска прерываний
31 15 й 2
П------------ 1111111I I------ гттттп
6
Рис. в .4. Регистры причины (Cause) и состояния (Status). Эта версия регистра Cause соответ
ствует архитектуре MIPS-32. Ранняя архитектура MIPS I имела три вложенных набора битов режи
мов ядра/пользователи и битов разрешения прерываний для поддержки вложенных прерываний
Самопроверка
Какое из утверждений относительно выстраивания трех способов осуществления
анода-вы вода соответствует истине?
1 Если нужно получить наименьшую латентность для операции ввода-вывода
применительно к отдельному устройству ввода-вывода, способы должны рас
полагаться в следующем порядке: опрос, использование DMA и использование
управления с помощью прерываний.
2. С точки зрения наименьшего востребования процессора одним устройством
ввода-вывода способы должны располагаться в следующем порядке: использо
вание DMA, использование управления с помощью прерываний и опрос.
* И»
Обработка транзакций
Контрольные задачи, Разновидность приложения, занимающе
гося выполнением небольших коротких
связанные с обработкой операций (называемых транзакциями),
транзакций которые обычно требуют как ввода-вывода
данных, так и вычислений. К приложениям
Приложения, связанные с: обработкой тран по обработке транзакций обычно предъ
являются требования как по времени от
закций (transaction processing. ТР), включают
клика. так и по пропускной способности
в себя как требования к времени отклика, так транзакций.
и оценку производительности, основанную на
пропускной способности. Кроме этого, боль Скорость ввода-вывода
Производительность, измеренная количе
шинство обращений ввода-вывода связаны с ством операций ввода-вывода в единицу
небольшими объемами данных. Поэтому ТР- времени, например количеством чтений
приложения в основном заинтересованы в ско в секунду.
рости ввода-вывода, измеренной в количествах
Скорость передачи данных
обращений в секунду, в отличие от скорости Производительность, измеренная в байтах
передачи данных, измеряемой в байтах данных в единицу времени, например в гигабайтах
в секунду. TP-приложения обычно связаны с иэ- в секунду
662 Глава б. Хранение информации и другие темы, связанные с вводом-выводом
Самопроверка
Являются ли следующие утверждения истинными или ложными? В отличие от
контрольных задач по оценке производительности процессоров, контрольные за
дачи ввода-вывода;
1) сконцентрированы на пропускной способности, а не на латентности;
2) могут потребовать масштабирования размера набора данных или количества
пользователей для достижения контрольных точек производительности;
3) часто сообщают о стоимости достижения производительности.
Упражнение
Ответ
Известно, что
Общее ерей* = вречя ц е н тр а л ь н о ю п р оцессора * е о е и я ее саа-вы вода
100 - 90 + врет ввода вывода
В ре«* ввова-вывода * 10 секун д
Новые показатели времени работы центрального процессора и получающееся при зтом вы
численное общее время приведены в следующей таблице.
низкие уровни MTTF, чем большие накопители, но, что более важно, за счет замены
одного накопителя, скажем, пятьюдесятью небольшими накопителями интенсив
ность отказов возрастает как минимум в 50 раз!
Решением стало добавление избыточности, чтобы система могла справляться
с отказами дисков без потери информации. При наличии множества небольших
дисков расходы на дополнительную избыточность для повышения готовности не
велики относительно расходов, которые требуются для решений, связанных с при
менением небольшого количества крупных дисков. Таким образом, безотказность
была более доступной по цене при создании избыточного массива недорогих дис
ков. Э го наблюдение легло в основу его названия: избыточные массивы недорогих
дисков —redundant arrays of inexpensive disks, сокращенно RAID.
В ретроспективе, хотя их изобретение было мотивировано производитель
ностью, главной причиной широкой популярности RAID-массивов стала безот
казность. Параллельная революция вновь выдвинула на первый план исходный
аргумент производительности RAID-массивов. В остальной части раздела дается
краткий обзор возможных вариантов достижения безотказности и их влияния на
стоимость и производительность.
Диски с данными Избыточные контрольные диски
RAID О
(Без избыточности)
Используется многими
компаниями
RAID)
(Зеркальное копирование]
EMC, HPfTandem), IBM
RAID 2
(Обнаружение ошибок
и коррекция кода)
Не используется
RAID3
(Четность с чередованием
битов) Подходы, исполь
зуемые в памяти
RAID 4
(Четность с чередовением
блоков) Используется в сетях
RAID 5
(Четность с распространен
ным чередованием блоков)
Имеет широкое применение
RAID б
(Избыточность Р ч- Q)
Набирает популярность
Рис. 6.5. RAID-массив для примера с четырьмя дисками данных, а котором показываются
дополнительные контрольные диски для каждого уровня RAID и компании, использующие
каждый уровень. На рис. 6 .6 и 6.7 объясняется разница между RAID 3, RAID 4 и RAID 5
6.9. Параллелизм и ввод-вывод: избыточные массивы недорогих дисков 667
Рис. 6.6. Обновление в связи с небольшой записью в массиве RAID 3 по сравнению с та
ким же обновлением в массиве RAID 4. Эта оптимизация для небольших записей сокращает
соличество обращений к дискам, а также количество задействованных дисков. На данном ри
сунке предполагается, что используются четыре блока данных и один блок четности. Обычное
аычисление четности в массиве RAID 3 в левой части рисунка требует чтения блоков D1. D2 и D3
перед добавлением блока DO' для вычисления нового значения четности Р'. (Здесь нет ничего
удивительного, новые данные DO' поступают прямо из центрального процессора, поэтому диски
а их чтении не задействованы,) Сокращение операций в массиве RAID 4, изображенное в правой
уасти рисунка, предусматривает чтение старого значения DO, которое сравнивается с новым
эчачением DO', чтобы узнать, какие биты изменились. Затем считывается старое значение чет
ности Р, после чего изменяются соответствующие биты для получения значения Р'. Логическая
функция исключающее ИЛИ (XOR) подходит для этого как нельзя лучше. В данном примере три
чтения дисков (D1, 02, D3) и дне записи на диски (D0‘. Р'), в которых были задействованы все
диски, заменены двумя чтениями дисков (DO, Р) и двумя записями на диски (DO', Р'), в которых
задействуются всего два диска. Увеличение размера группы четности влечет за собой экономию
за счет сокращения числа операций. Такое же сокращение используется и в массиве RAID 5
мостъ обновления содержимого диска четности при каждой записи, поэтому диск
четности становится узким местом для последовательных записей.
Чтобы устранить узкое место, связанное с записью значений четности, информа
ция о четности может быть распространена по всем дискам, чтобы не было единого
узкого места для записей. Организация распространенной информации о четности
является особенностью массива RAID 5.
FVMD4 RAID 5
Рис. 6 .7 . Четность с чередованием блоков (RAID 4) в сравнении с четностью с распро
страненным чередованием блоков (RAID 5). За счет распространения блоков четности по
всем дискам некоторые небольшие записи могут вестись параллельно
Р + Q избыточность (RAID 6)
Схемы, основанные на вычислении четности, защищают от единичного самоопре
деляющегося отказа. Когда проведения одной ликвидации последствий отказа
недостаточно, четность может быть распространена, чтобы можно было иметь
возможность второго вычисления данных и еще один диск с контрольной информа
6.9. Параллелизм и ввод-вывод: избыточные массивы недорогих дисков 671
SATA-диска емкостью 1000 Гбайт, если не будет никаких помех, может занять
почти три часа. Учитывая то, что поврежденный RAID-массив, скорее всего, про
должает обслуживать данные, реконструкция может существенно затянуться.
Кроме увеличения этого времени возникает также опасение, что чтение существен
но большего объема данных в процессе реконструкции будет означать увеличение
шансов на невосстанавливаемый отказ чтения носителя, который может повлечь
за собой утрату данных. Еще одной проблемой, связанной с одновременно возни
кающими отказами, является рост числа дисков в массиве и использование SATA-
дисков, работающих медленнее и имеющих более высокую емкость по сравнению
с обычными серверными дисками.
Следовательно, потребителей привлекает защита сразу от нескольких отказов,
и поэтому возрастают предложения массивов RAID 6 в качестве дополнений и в ка
честве основных устройств.
Самопроверка
Что из следующих утверждений справедливо для RAID-массивов уровней 1,3, 4.
5 и 6?
1. Для достижения высокой готовности RAID-системы полагаются на избыточ
ность информации.
2. RAID 1 (зеркалирование) имеет самые большие накладные расходы, связанные
с контрольными дисками.
3. Для небольших записей RAID 3 (четность с чередованием битов) имеет наи
худшую пропускную способность.
4. Для больших записей RAID 3, 4 и 5 имеют одинаковую пропускную способ
ность.
Уточнение. Возникает вопрос, как зеркалирование взаимодействует с чередовани
ем. Предположим, что у вас есть, скажем, четыре диска, на которых хранятся ценные
данные и восемь физических дисков, которыми можно воспользоваться. Станете ли
вы создавать четыре пары дисков, каждая из которых организована как RAID 1, а затем
чередовать данные между этими четырьмя парами RAID I ? Или вы будете создавать
два набора из четырех дисков, каждый из которых организован как RAID 0, а затем
зеркалировать записи для обоих наборов RAID О? В развитие терминологии RAID
первое сочетание стало называться RAID 1+0, или RAID 10 ("чередующееся зеркали
рование»), а последнее стало называться RAID 0 + 1, или RAID 01 («зеркалированное
чередование»),
2 источника питания
(один из них резервный)
Упражнение
Конструирование системы ввода-вывода
Примем ряд предположений относительно Sun Fire х4150:
♦ Пользовательская программа использует 200 000 инструкций на каждую операцию
ввода вывода.
♦ Операционная система в среднем выполняет 100 000 инструкций на каждую операцию
ввода-вывода.
♦ Рабочая нагрузка состоит из чтений по 64 Кбайт данных.
♦ Каждый процессор выполняет 1 млрд инструкций в секунду.
Определите максимальную устойчивую скорость ввода-вывода дчя полностью загруженного
сервера Sun Fire х4150 для чтений в произвольном и в последовательном порядке. Пред
положим, что операции чтения всегда могут выполняться на бездействующем диске, если
таковой имеется (то есть конфликты дисков игнорируются), и что RAID-контроллер нс
является узким местом системы.
676 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
Ответ
Поскольку в одном гнезде Intel 5345 работают четыре процессора, они могут выполнять
13 333 вводов-выводов в секунду Восемь процессоров в двух гнездах могут выполнять
26 667 вводов-выводов в секунду.
Давайте определим количество вводов-выводов в секунду на один процессор дня произ
вольных и последовательных операций чтения с 2,5-дюймового SAS-диска, показанно
го в табл. 6.3. Вместо использования среднего времени поиска, заявленного производите
лем, давайте предположим, что оно составляет только четверть заявленного времени, как
.это часто и бывает на самом деле (см. раздел 6.3). Время произвольного чтения с одного
лиска:
6.10. Реальное оборудование: сервер Sun Fire х4150 677
Компоненты Система
Элемент Ожидание Пик К-во Ожидание Пик
Одно гнездо с Intel 2.66 ГГц 154 Вт 215 Вт 1 154 Вт 37% 215 Вт 39%
Е5345, Intel 5000 МСВ/ЮН чип
сетом, Ethernet-контроллерами,
блоками питания, вентилято
рами, ..
Дополнительное гнездо с Intel 22 Вт 79 Вг 1 22 Вг 5% 79 Вт 14%
2,66 ГГц Е5345
4 Гбайт DDR2-667 5300 FBDIMM 10 Вт 11 Вт 16 160 Вт 39% 176 Вт 32%
73 Пбайт SAS 15К дисковые 8 Вт 8 Вт 8 64 Вт 15% 64 Вт 12%
накопители
PCIe х8 дисковый RA10- 15 Вт 15 Вт 1 15 Вт 4% 15 Вт 3%
комтроллер
Всего — — - 415Вт 100% 549 Вт 100%
Упражнение
Оцепка энергопотребления системы ввода-вывода
Переконфигурируйте Sun Fire х4150 для сведения к минимуму потребляемой энергии, при
условии, что единственной работой для 1U сервера является рабочая нагрузка из предыду
щего упражнения.
Ответ
Для получения 2424 произвольных чтений 64 Кбайт в секунду из предыдущего упражнения
нам понадобятся все восемь дисков и РС1 RAID-контроллер. Предыдущие вычисления
6.11. Заблуждения и недоразумения 679
В к о н еч н о м и т о ге д и сп л ей н ы й п р о ц ес с о р ст а л н а п о м и н а т ь п о л н о ц ен н ы й к о м п ью т ер ,
о б л а д а ю щ и й р я д о м сп е ц и а ч ь н ы х гр а ф и ч е с к и х во зм о ж н о ст ей . И т о гд а п ро и зо ш л о
н ечт о необы чн ое. М ы п оч увст вовал и н еоб ходи м ост ь д о б а ви т ь к п р о ц ессо р у вт орой,
всп о м о га т ел ьн ы й п р о ц ессо р , к о т о р ы й у ж е са м п о себ е ст ач все б о л ее усл ож н я т ься .
И м е н н о т о гд а м ы п р и ш л и к н е у т е ш и т е л ь н о м у в ы в о д у . Р а з р а б о т к а д и сп ч ей н о го п р о
ц ессо р а м ож ет п р евр а т и т ься в бескон еч н ы й ци клически й проц есс. Ф акт и чески м ы
п о н я л и , ч т о проц есс, н а с н а с т о л ь к о р а с с т р о и л , ч т о м ы с т а л и н а з ы в а т ь е г о * к р у г о
ворот ом реин карн ац и й ».
6.13. Упражнения
Предоставлены Перри Александером (Perry Alexander) из Канзасского универ
ситета.
Упражнение 6.1
В табл. 6.1 приводится описание поведения, партнеров и скорости передачи данных
устройств ввода-вывода. Но эта классификация не всегда дает полную картину по
тока данных внутри системы. Исследуйте классификацию следующих устройств.
а В и д ео и гр а
б П ортативны й G P S -н а а и га т о р
Упражнение 6.2
Среднее время безотказной работы (M TBF), среднее время на восстановление
(M TTR) и наработка на отказ (M TTF) являются полезными показателями для
оценки надежности и готовности ресурса хранения информации. Исследуйте эти
понятия, отвечая на вопросы относительно устройств со следующими показате
лями.
M TTF M TTR
а 5 л ет 1 нед ел я
в 10 лет 5 дней
6.2.2 [5] <6.1, 6 ,2> Вычислите готовность для каждого устройства, представ-
тенного в таблице.
6.2.3 [5] <6.1,6.2> Что происходите готовностью при приближении показателя
MTTR к нулю? Насколько реалистична подобная ситуация?
6.2.4 [5] <61,6.2> Что происходит с готовностью, если показатель MTTR будет
гтановиться очень высоким, то есть устройство будет трудно восстановить? Под
разумевает ли эго, что у устройства низкая степень готовности?
Упражнение 6.3
Для сравнения устройств хранения часто измеряется среднее и минимальное время
чтения и записи данных. Используя технологии, рассмотренные в данной главе,
вычислите значения, имеющие отношение к времени чтения и записи для дисков
со следующими характеристиками.
6.3.1 [10J <6.2, 6.3> Вычислите среднее время чтения или записи 1024-банто-
вого сектора для каждого диска, перечисленного в таблице.
6.3.2 [10J < 6.2, 6.3> Вычислите минимальное время чтения или записи
204S-байтового сектора для каждого лиска, перечисленного в таблице.
6.3.3 (10] <6.2, 6.3> Определите для каждого перечисленного в таблице диска
доминирующий фактор его производительности. Точнее говоря, в какой из по
казателен диска вы бы внесли изменения, располагая возможностями улучшения
любого из них? Если доминирующие факторы отсутствуют, объясните почему.
Упражнение 6.4
В конечном счете, проектирование систем хранения данных требует не только
рассмотрения параметров дисков, но и сценариев их использования. Разные си
туации требуют разных исходных параметров. Давайте попробуем дать оценку
диск' >вым системам. Исследуйте разницу в том. как системы хранения информа
ции должны быть оценены, путем ответа на вопросы относительно следующих
приложений.
б С и с т е м а в и д е о и гр
Упражнение 6.5
Флэш-память - один из главных реальных конкурентов традиционных дисковых
накопителей. Исследуйте значение флэш-памяти, ответив на вопросы, касающиеся
следующих приложений.
б С и с т е м а в и д ео и гр
6.5.1 [5] <6.2,6.3,6.4> Что изменится в показателях времени чтения диска при
переходе на твердотельные накопители, созданные из флэш-памяти, при условии,
что скорость передачи данных останется прежней?
6.5.2 [10J <6.2, 6.3, 6.4> Получит ли каждое из приложений преимущества от
твердотельного флэш-накопителя, учитывая, что стоимость является расчетным
фактором?
6.5.3 [10] < 6.2.6.3,6.4> Будет ли каждое из приложений счи таться неподходя
щим для твердотельных флэш-накопителей, учитывая, что стоимость не является
расчетным фактором?
Упражнение 6.6
Исследуйте особенности флэш-памяти, ответив на вопросы, касающиеся произво
дительности устройств флэш-памяти со следующими характеристиками.
б 30 500
6.6.1 [10] <6.2,6.3,6.4> Вычислите среднее время чтения или записи 1024-бай
тового сектора для каждого устройства флэш-памяти, перечисленного в таблице.
6.6.2 [10] <6.2, 6.3, 6.4> Вычислите минимальное время чтения или записи
512-байтового сектора для каждого устройства флэш-памяти, перечисленного
в таблице.
6.6.3 [5] <6.2, 6.3, 6.4> В табл. 6.4 показано, что время обращения к флэш-
памяти при чтении и записи увеличивается по мере того, как увеличивается объем
флэш-памяти. Является ли это неожиданностью? Какие факторы являются при
чиной этого?
6.13. Упражнения 689
Упражнение 6.7
Ввод-вывод может осуществляться либо в синхронном, либо в асинхронном режи
ме. Исследуйте разницу между ними, отвечая на вопросы о производительности
следующих периферийных устройств.
а Мышь
в К о н тр ол л ер п ам я ти
6.7.1 (5| <6.5> Какой тип шины лучше всего подойдет (синхронный или асин
хронный) для обработки обмена данными между центральным процессором и пере
численными в таблице периферийными устройствами?
6.7.2 [5| <6.5> Какие проблемы создадут длинные, синхронные шины для
связи центрального процессора с перечисленными в таблице периферийными
устройствами?
6.7.3 (5) <6.5> Какие проблемы создадут асинхронные шины для связи цен
трального процессора с перечисленными в таблице периферийными устройствами?
Упражнение 6.8
К наиболее часто используемым сегодня типам шин относятся FireW ire
(IEF.E 1394), USB, PCI и SATA. Хотя все четыре шины являются асинхронными,
они реализованы по-разному, поэтому у них разные характеристики. Исследуйте
структуры разных шин, отвечая на вопросы о шинах и о следующих периферийных
устройствах.
а Мышь
б Кон тр ол л ер п ам я ти
6.8.1 [5| <6.5> Подберите шину (FireWire, USB, PCI или SATA), подходящую
для перечисленных в таблице периферийных устройств. (Основные характеристи
ки каждой шины приведены в табл. 6.6.)
6.8.2 [20] <6.5> Воспользуйтесь интернет-ресурсами или библиотечными мате-
рналами и составьте краткую сводку структуры обмена данными для шины каждого
типа. Определите, что делает контроллер шины и где физически осуществляется
управление.
6.8.3 [15] <6.5> Опишите ограничения шины каждого типа. Объясните, почему
эти ограничения стоит учитывать при использовании шины.
Упражнение 6.9
Связь с устройствами ввода-вывода достигается с использованием комбинаций из
опроса, обработки прерываний, отображения памяти и специальных инструкций
ввода-вывода. Ответьте на вопросы о связи подсистем ввода-вывода со следующи
ми приложениями с использованием комбинаций этих технологий.
690 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
а Контроллер видеоигры
б Компьютерный монитор
Упражнение 6.10
В разделе 6.6 было дано определение процесса обработки прерываний, состоящего
из восьми шагов. Информация о причине прерывания и о состоянии системы об
работки прерываний предоставлялась в регистрах причины (Cause) и состояния
(Status). Исследуйте обработку прерываний, ответив на вопросы о следующей
комбинации прерываний.
—
а выключение питания Перегрев Контроллер данных Ethernet
б Перегрев Перезагрузка Контроллер мыши
Упражнение 6.11
Прямой доступ к памяти (DMA) позволяет устройствам обращаться к памяти на-
трямую, а не работать с ней через центральный процессор. Это может существенно
ювысить скорость работы периферийных устройств, но усложняет реализацию
систем памяти. Исследуйте последствия применения DMA, ответив на вопросы
о следующих периферийных устройствах.
а Графическая карта
к_ Звуковая карта
Упражнение 6.12
Оценочные показатели производительност и устройств ввода-вывода могут очень
сильно варьироваться от приложения к приложению. В одних ситуациях домини
рующее влияние на производительность оказывает количество обрабатываемых
транзакций, а в других ситуациях такое доминирующее влияние оказывает про
пускная способность. Исследуйте оценку производительности ввода-вывода, от
вечая на вопросы, касающиеся следующих приложений.
а Просмотр интернет-ресурсов
б Редактирование звука
692 Глава 6. Хранение информации и другие темы, связанные с вводом-выводом
Упражнение 6.13
Тесты играют важную роль в оценке и подборе периферийных устройств. Хорошие
тесты должны создавать ситуации, имитирующие реальные условия работы. Из
учите контрольные задачи и подбор устройств, ответив на вопросы, касающиеся
следующих приложений.
а Просмотр интернет-ресурсов
в Редактирование звука
Упражнение 6.14
RAID-массив принадлежит к наиболее популярным подходам развития паралле
лизма и избыточности в системах хранения информации. Само название — Redun
dant Arrays of Inexpensive Disks, то есть избыточные массивы недорогих дисков
подразумевает сразу несколько понятий, относящихся к RAID-массивам, которые
будут исследованы следующих задачах.
Упражнение 6.15
Массивы RAID 3. RAID 4 и RAID 5 для защиты блоков данных используют си
стем), четности. Точнее говоря, блок четности связан с коллекцией блоков данных.
Каждая строка в следующей таблице содержит значения блоков данных и четности,
показанных на рис. 6.6.
Новое значение 00 00 D1 D2 03 Р
а FEFE OOFF А387 F345 FFOO 4582
б АВ9С F457 0098 00FF 2FFF А387
6.15.1 110J <6.9> Вычислите новое значение блока четности Р’ для массива
RAID 3.
6.15.2 110) <6.9> Вычислите новое значение блока четности Р' для массива
RAID 4.
6.15.3 (5) <6.9> Можно ли сказать, что RAID 3 или RAID 4 работает эффек
тивнее? Есть ли причины, по которым RAID 3 будет предпочтительнее RAID 4?
6.15.4 (5) <6.9> RAID 4 и RAID 5 используют примерно один и тот же механизм
для вычисления и сохранения четности для блоков данных. Чем RAID 5 отличается
от RAID 4 и для каких приложений RAID 5 будет работать более эффективно?
6.15.5 [5] <6.9> Скорость работы RAID 4 и RAID 5 растет по сравнению RAID 3
по мере роста размеров защищенных блоков. Почему так происходит? Может ли
сложиться ситуация, при которой RAID 4 и RAID 5 не будут работать более эф
фективно. чем RAID 3?
Упражнение 6.16
Появление веб-серверов для электронной торговли, интернет-магазинов и обмена
информацией сделало дисковые серверы весьма ответственным устройством. Го
товность и скорость являются широко известными показателями работы дисковых
694 Глава 6. Хранение информации и другие гемы, связанные с вводом - выводом
Упражнение 6.17
Определение производительности отдельного сервера с относительно полными
данными не представляется трудной задачей. Но при сравнении серверов от разных
производителей, предоставляющих разные данные, сделать выбор бывает нелегко.
Исследуйте процесс подбора и оценки серверов, отвечая на вопросы, касающиеся
следующего приложения.
Веб-сервер
Упражнение 6.18
Чтобы получить предварительную оценку поведения накопителей, нужно весьма
осторожно относиться к параметрам и статистике, предоставляемыми их по
ставщиками. В следующей таблице представлены данные для разных дисковых
накопителей
6.18.1 [10) <6.12> Вычислите частоту отказов за год (AFR) для показанных
в таблице дисков.
6.18.2 [ 10 J <6.12> Предположим, что показатель частоты отказов за год ва
рьируется в течение срока службы дисков, показанных в предыдущей таблице.
Предположим, в частности, что AFR возрастает за первый месяц эксплуатации
в три раза и удваивается каждый год начиная с пятого года. Сколько дисков будет
подлежать замене после 7 лет эксплуатации? А сколько их будет заменено после
10 лет эксплуатации?
6.18.3 [10) <6.12> Предположим, что диски с более низкими показателями от
казов стоят дороже. В частности, по более высокой цене можно приобрести диски,
у которых частота отказов начнет удваиваться на восьмом, а не на пятом году экс
плуатации. Насколько больше вы заплатите за диски, если захотите сохранить их
в течение 7 лег? В течение 10 лет?
Упражнение 6.19
Предположим, что для дисков из таблицы в упражнении 6.18 поставщик предло
жил использовать конфигурацию RAID 0. которая должна повысить пропускную
способность запоминающей системы на 70%, и конфигурацию RAID 1, которая
снизит показатель AFR дисковых пар вдвое. Предположим, что стоимость каждого
последующего решения в 1,6 раза больше, чем стоимость первоначального решения.
6.19.1 (5) <6.9, 6.12> Учитывая только лишь исходные параметры задачи, по
рекомендовали бы вы провести обновление либо до RAID 0, либо до RAID 1, при
условии, что индивидуальные параметры диска останутся такими же, что и в пре
дыдущей таблице?
696 Глава 6 Хранение информации и другие темы, связанные с вводом-выводом
6.19.2 (5] <6.9, 6.12> Учитывая то, что ваша компания работает с глобальной
поисковой машиной, имеющей большой парк дисковых устройств, будет ли иметь
экономический смысл обновление до RAID 0 или RAID 1, при условии, что ваша
модель дохода основана на количестве поданных рекламных объявлений?
6.19.3 [5) < 6.9,6.12> Выполните упражнение 6.19.2 еще раз для крупного дис
кового парка, задействованного компанией, предоставляющей услуги резервного
копирования по Интернету. Будет ли обновление либо до RAID 0, либо до RAID 1
иметь экономический смысл при условии, что ваша модель дохода основана на
готовности ваших серверов?
Упражнение 6.20
Ежедневная оценка и обслуживание действующих компьютерных систем требуют
применения многих понятий, рассмотренных в главе 6. Исследуйте сложности
в оценке систем, изучив следующие вопросы.
6.20.1 120] <6.10, 6.12> Сконфигурируйте Sun Fire х4150 для предоставления
10 Тбайт запоминающего устройства массиву из 1000 щюцессоров, занятых имита
ционным моделированием в области биоинформатики. Ваша конфигурация долж
на минимизировать потребляемую мощность при решении вопросов пропускной
способности и готовности для дискового массива. При создании конфигурации не
забудьте про свойства крупномасштабных задач имитационного моделирования.
6.20.2 [20] <6.10, 6.12> Выберите систему архивирования данных и хранения
резервных копий применительно к дисковому массиву из упражнения 6.20.1
Дайте сравнительную характеристику диска, ленты и возможностей сохранения
резервных копий в интернет-хранилище. Воспользуйтесь ресурсами Интернета
и библиотечными материалами для определения потенциальных серверов. Оце
ните стоимость и приемлемость системы для приложения, используя параметры
рассмотренные в главе 6. Выберите параметры для сравнения, используя свойства
приложения, а также указанные требования.
6.20.3 (15) <6.10, 6.12> Конкурирующие между собой поставщики систем, вы
бранных в упражнении 6.20.2, предлагают оценить их системы на месте. Укажите
контрольные задачи, которые вы будете использовать для определения самой
лучшей системы. Определите, сколько времени займет сбор достаточных данных
для принятия решения.
Интерфейс
698 Глава 7. Многоядерностъ, мультипроцессорные системы и кластеры
7.1. Введение
И ответила Тень:
«Где рождается день,
Лунных Гор где чуть зрима громада
Через ад, через рай,
Все вперед поезжай.
Если хочешь найти Эльдорадо!*1
Э д г а р А л л а м По
«Э л ь д о р а д о », с т р о ф а 4 , 1 8 4 9 г
1 Перевод К. Бальмонта.
7.1. Введение 699
П р о гр а м м н о е о б е сп е ч е н и е
П оследовательное
П а р а л л е л ь н о е (co n cu rre n t)
(se q u e n tia l)
Суть этих двух точек зрения, представленных в табл. 7.1, состоит в том, что
параллельное программное обеспечение может запускаться на последовательном
оборудовании, например операционные системы на одноядерном процессоре Intel
Pentium 4, или на параллельном оборудовании, представленном более современ
ным процессором Intel Xeon е5345 (Clovertown). То же самое справедливо и для
последовательного программного обеспечения. Например, профаммисты, работа
ющие на M atlab, пишут перемножение матриц, представляя эту работу в последо
вательном режиме, но это перемножение может быть запушено последовательно на
оборудовании Pentium 4 или параллельно на оборудовании Хеоп е5345. Негрудно
догадаться, что единственной сложностью параллельной революции является
определение методов достижения высокой производительности выполнения из
начально последовательного программного обеспечения на мультипроцессорных
системах по мере роста количества процессоров. После того как мы во всем этом
разобрались, для обозначения последовательного или параллельного профаммного
обеспечения, запущенного на параллельном оборудовании, во всем остальном ма
териале главы будет использоваться понятие п а р а л л е л ь н о в ы п о л н я е м о й п р о г р а м м ы ,
или п а р а л л е л ь н о г о п р о г р а ч м н о г о о б е с п е ч е н и я .
В следующем разделе описываются причины сложностей создания эффектив
ных параллельно выполняемых программ. В разделах 7.3 и 7.4 описываются две
альтернативные характеристики фундаментального параллельного оборудования,
основанные на зависимости или независимости всех процессоров от единого фи
зического адреса. Две популярные версии этих альтернатив называются м у л ь т и
п р о ц е с с о р а м и с о б щ е й п а м я т ь ю и к л а с т е р а м и . Затем в разделе 7.5 дается описание
м н о г о п о т о ч н о с т и , понятия, которое часто пугают с мультипроцессорностью, от
части потому, что многопоточность полагается на такую же параллельность в про
граммах. В разделе 7.6 описывается классификационная схема, отображающая
более ранние представления по сравнению с теми, которые приведены в табл. 7.1.
Кроме этого в нем дается описание двух типов архитектур набора инструкций,
которые поддерживают запуск последовательных приложений на параллельном
оборудовании, а именно S I M D и v e c t o r . В разделе 7.7 описывается относительно
7.2. Сложности создания программ, выполняемых в параллельном режиме 701
Самопроверка
Определите истинность или ложность следующего утверждения: чтобы получить
преимущество от использования мультипроцессора, приложение должно быть
рассчитано на параллельное выполнение.
Упражнение
Сложности ускорения
Предположим, что нужно достичь ускорения в 90 раз, имея 100 процессоров. Какой процент
исходных вычислений может проводиться в последовательном режиме?
Ответ
tra формула обычно переписывается на основе предположения, что прежнее время выпол
нения можно принять за некую единицу измерения времени, равную 1, время выполнения,
на которое влияет улучшение, считать долей прежнего времени выполнения:
I________ _г________
, _
Ускорение -
Упражнение
Болес сложная задача
Предположим, что нужно получить две суммы: сумму 10 скалярных переменных и матрицу
суммы двух двумерных массивов размером 10 на 10. Какое ускорение будет получено при
использовании 10 процессоров по сравнению с использованием 100? После этого вычислите
ускорение при условии, что матрица увеличилась в размерах до 100 на 100 элементов.
Ответ
Если предположить, что производительность —это функция времени для суммирования, I ,
то мы получим 10 суммирований, которые не получают преимуществ от параллельных
процессоров, и 100 суммирований, которые такие преимущества получают. Если время для
одного процессора равно 110 г, то время выполнения для 10 процессоров равно
Время выполнения, на которое влияет улучшение
Время выполнения после улучшения — !-------------------------------------------------------- +
Степень улучшения
+ Время выпатнения, на которое не влияет улучшение.
Получается, что ускорение при использовании 10 процессоров равно 100 f/20 1 = 5,5. Время
выполнения при использовании 100 процессоров равно
Получается, что ускорение при использовании 100 процессоров равно 1101/11 f “ 10.
Таким образом, при данных условиях задачи мы получаем 55% потенциального ускорения
при использовании 10 процессоров и только 10% при использовании 100 процессоров. По
смотрим, что получится при увеличении размеров матрицы. Последовательной программе
теперь понадобится 1001+ 100001- 10 0101. Время выполнения при использовании 10 про
цессоров будет равно
получается, что ускорение при 10 процессорах будет равно 10 0101/10101 - 9,9. Время вы
полнения при использовании 100 процессоров будет равно
10 000 г
Время выполнения после улучшения -----------+101 = 1010 г.
Получается, что ускорение при 100 процессорах будет равно 10 0101/1101 - 91. Таким об
разом, для зтой более объемной задачи мы получаем около 99% потенциального ускорения
при 10 процессорах и более чем 90% при 100 процессорах.
Ответ
о 10 0 0 0 / .. ...
Время выполнения после улучшения -----------♦ 10 / - 110 /.
10
Ускорение упадет до 10 010 //210 / - 48. Если у одного из процессоров будет 5% нагрузки,
он должен будет выполнить 500 сложений.
Ускорение упадет еще больше, до 10 010 г/510 / = 20. Этот пример показывает важность
сбалансированной нагрузки. Удвоенная по сравнению со всеми остальными нагрузка одного
процессора срезает ускорение почти наполовину, а его пятикратная по отношению к другим
процессорам нагрузка снижает ускорение почти в пять раз.
Самопроверка
Определите истинность или ложность следующего утверждения: строгое масшта
бирование не ограничивается законом Амдала.
адресное прост ранст водля всех процессоров, хотя, если выражаться точнее, его
нужно было бы назвать мультипроцессором с общими а д р е с а м и . Следует заметить,
что такие системы могут все же запускать независимые друг от друга задания в их
собственных виртуальных адресных пространствах, даже если все они используют
общее физическое адресное прост ранство. Взаимодействие процессоров осущест
вляется через общие переменные в памяти, и все процессоры имеют возможность
обращаться к любому месту памяти, загружая или записывая данные. Классическая
организация SM P показана на рис. 7.1.
Упражнение
П р о с т а я п р о гр а м м а , в ы п о л н я ю щ ая с я в пар ал л ель но м р е ж и м е , п р е д н а зн а ч е н н а я для
общего а д р е с н о г о п р о с т р а н с т в а
Предположим, что нужно получить сумму 100 000 чисел на компьютере, имеющем муль
типроцессор с общей памятью с однородным доступом к памяти. Будем считать, что у нас
имеется 100 процессоров.
Ответ
Сначала опять нужно будет разбить набор чисел на поднаборы одинакового размера. Рас
пределять поднаборы по разным пространствам памяти не придется, поскольку на данной
машине используется единое адресное пространство; мы просто дадим каждому процессору
разные начальные адреса. Рп - это номер, идентифицирующий каждый процессор в диапа
зоне от 0 до 99. Все процессоры начинают выполнение программы с запуска цикла, сумми
рующего их ноднабор чисел:
sumlPn] « 0.
fo r О - 1000*Рп: т < 1000*(Рл«1): 1 - 1 * 1 )
siB^PnJ - ыг.[Рп) + А[1]. /* сунпа заданных облаете* */
Следующим шагом будет суммирование этого множества частичных сумм, Этот шаг назы
вается редукцией Мы разделяем, чтобы властвовать Половина процессоров складывает
пары частичных сумм, а затем четверть процессоров складывает пары новых частичных
сумм, и так далее, пока не будет получена единственная, окончательная сумма. На рис. 6.2
показана иерархическая природа этой редукции.
В данном примере два процессора должны быть синхронизированы еще до того, как «по
требляющий* процессор попытается прочитать результат из того места в памяти, куда ведет
запись «производящий* процессор, в противном случае потребитель может прочитать старое
значение данных. Нужно, чтобы каждый процессор имел свою собственную версию перемен
ной счетчика цикла 1, поэтому мы должны обозначить ее как «закрытую* переменную. Про
граммный код выглядит следующим образом (переменная half также является закрытой):
h a l f - 100. / * 100 процессоров в мультипроцессоре * /
re p e a t
С и н х р о н и за ц и я
sy n ctiO : /* ожидание вычисления частичной
сунны */
Процесс координации поведения двух и бо
1 f ( h a l f t 2 ! - О М ?n — 0) лее процессоров, который может быть за
sum[0J - sumrO] * sum C half-1]; пущен на других процессорах.
/* Условная сунна нужна в то* случае, когда
половина инеег нечетное Б л о к и р о вк а
значение, недостаюднй эпенен! получает Устройство синхронизации, позволяющее
Процессор!) */ в отдельно взятый момент времени иметь
h a l f • h a l f / 2 : / * черта, разделиоцая доступ к данным только одному процес
суниируеные значения * / сору.
Tf (Рп < h a l f ) sum[Pnj - sum[Pn] ♦
Sum[Prv»half J; Р ед укция
u n t i l ( h a l f - - 1 ) . /* выход Функция, которая обрабатывает структуру
с окончательной сунной в SuibIOJ * / данных и возвращает одно значение
708 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Самопроверка
Определите истинность или ложность следующего утверждения: невозможно до
биться преимуществ от параллелизма на уровне заданий на мультипроцессорах
с общей памятью.
[о
(h a lf • 1)
(h a lf = 2)
(h a lf = 4)
Уточнение. А л ь т е р н а т и в о й о б щ е м у ф и з и ч е с к о м у а д р е с н о м у п р о с т р а н с т в у м о г у т б ы ть
о тд ел ьны е ф и зи ч е с к и е а д р е с н ы е п р о с тр а н с тв а п ри о б щ е м в и р туал ь н о м а д р е с н о м
п р о стр ан ств е и в о зл о ж ени е на о п ер ац и о н н ую с и с те м у работы по о б м ен у д анн ы м и .
Т ако й п о д х о д бы л и с п ы тан , но у н е ю о к а з а л с я о чень в ы со ки й у р о в е н ь и з д е р ж е к по
п р ед о став л ен и ю п р о гр а м м и с та м р аб о то сп о со б н о й а б с тр а кц и и о б щ е й п ам яти .
Р и с . 7 .3 . К л а с с и ч е с к а я о р га н и за ц и я м у л ь т и п р о ц е с с о р а с м н о ж е ств о м о тд е л ьн ы х а д р е с
ны х п р о с т р а н с т в , тр а д и ц и о н н о н а з ы в а е м о г о м у л ь т и п р о ц е с с о р о м с п е р е д а ч е й с о о б щ е
ний. Обратите внимание, что здесь, в отличие от SNIP на рис. 7 . 1, объединяющая сеть находится
не между кэш-памятью и оперативной памятью, а между узлами процессор-память
Упражнения
Э ф ф е к т и в н о е и сп о л ьзо в а н и е п ам яти
Предположим, что у процессора с единой общей памятью имеется 20 Гбайт оперативной
памяти, а у каждого из пяти объединенных в кластер компьютеров имеется 4 Гбайт и опе
рационная система, занимающая 1 Гбайт. Насколько больше пространства достается поль
зователям при использовании общей памяти?
Ответ
Соотношение памяти, доступной пользовательским программам на компьютере с общей
памятью и на кластере, будет равно
20-1
— -1.25.
5 ж<4 —1) 15
Упражнения
Простая программа, выполняющаяся в параллельном режиме, предназначенная для
мультипроцессора с передачей сообщений
Предположим, что нужно сложить 100 000 чисел на мультипроцессоре с передачей сообще
ний, имеющем 100 процессоров, у каждого из которых свое собственное устройство памяти.
Ответ
Поскольку у этого компьютера несколько адресных пространств, прежде всего нужно рас
пространить 100 поднаборов среди всех локальных устройств памяти. Процессор, содер
жащий 100 000 чисел, отправляет поднаборы каждому из 100 узлов «процессор—память».
7.4. Кластеры и другие мультипроцессоры с передачей сообщений 711
Следующим шагом будет получение суммы каждого поднабора. Этот шаг заключается
в простом цикле, выполняемом на каждом процессоре: чтение слова из локальной памяти
и прибавление его к локальной переменной:
sue - 0:
fo r ( i = 0: К 1000: 1 - 1 + 1) /* перебор эпеиею ое какбш о пассива * /
son » sum * A N [i]: /* суипирсванпе значений элеиенто* вокальных
пассивов * /
Последним шагом станет редукция, складывающая эти 100 частичных сумм. Сложность
в том, что каждая частичная сумма расположена на другом процессоре. Следовательно,
нужно воспользоваться объединяющей сетью для отправки частичных сумм с целью аккуму
лирования итоговой суммы. Вместо отправки всех частичных сумм на отдельный процессор,
мы займемся последовательным сложением частичных сумм.
Сначала половина процессоров посылает свои частичные суммы другой половине процес
соров, где эти частичные суммы складываются вместе. Затем одна четверть процессоров
(половина от половины) посылает эти новые частичные суммы другой четверти процес
соров (оставшейся половине от половины) для следующего раунда суммирования. Эго
деление пополам, отправка и получение продолжаются до тех пор. пока не будет получена
единая сумма всех чисел. Пусть Рп представляет номер процессора, send(x.y) является под
программой, которая посылает по объединяющей сети процессору х значение у, a receive;)
является функцией, получающей значение из сети для этого процессора. Тогда код будет
иметь следующий вид:
lim it - 100: H alf - 100: /* 100 процессоров * /
rep eat
h a l f • ( h a l f + l ) / 2 : /* граница пеклу отправитепяии и попучателяяи * /
i f (Рп » - h a lf &4 Рп < Нин) sendtP n - n a i f , sum):
1f (Рп < ( l i « n t / 2 ) ) sum - sum * r e c e i v e d ;
l im it - h a l f : /* верхняя транииа отправителей */
u n t i l ( h a lf “ 1 ); /* выход с итоговой сунной * /
Этот код делит все процессоры на отправителей и получателей, и каждый получающий
процессор получает только одно сообщение, поэтому мы можем допускать, что получающий
процессор будет простаивать до приема сообщения. Таким образом, от правка и получение
могут использоваться в качестве примитивов синхронизации, а также для обмена данными,
поскольку процессоры знают о передаче данных.
Если количество узлов нечетное, средний узел не участвует в отправке-получении. Тогда
граница (limit) устанавливается таким образом, чтобы этот узел стал наивысшим узлом
в следующей итерации.
ство заключается в том, что обмен данными осуществляется в явном виде, значит,
будет меньше неожиданностей при выполнении, чем при неявном обмене данными
в компьютерах с общей памятью и поддержанием целостности кэш-памяти. А не
достатком для программистов является усложненный перенос последовательной
программы на компьютер, основанный на передаче сообщений, поскольку каж
дый обмен данными должен быть идентифицирован заранее, иначе программа не
будет работать. Общая память с поддержанием целостности данных кэш-памяти
позволяет оборудованию определить, какие данные должны быть переданы, что
облегчает перенос программы. Относительно наикратчайшего пути к высокой
производительности существуют разные мнения, учитывающие все за и против
неявного обмена данными.
200 странах, и они внесли суммарный вклад, равный более чем 19 млрд часов вы
числительного времени. На конец 2006 года grid-система SETI@home работала со
скоростью 257 Терафлопс.
Самопроверка
1. Определите истинность или ложность следующего утверждения: как и SMP-
системы, компьютеры с передачей сообщений основаны на блокировках, осу
ществляемых с целью синхронизации.
2. Определите истинность или ложность следующего утверждения: в отличие от
SM P-систем, компьютеры с передачей сообщений нуждаются во множестве
копий параллельно выполняемой программы и операционной системы.
Время ■ ■ ■
Р и с . 7.4. Как четыре потока используют запуск слотов супврскалярного процессора при
р а з л и ч н ы х подходах. В верхн ей части р и сун ка для четы рех потоко в п о ка з ан о , ка к каж ды й из
них будет и сполняться, будучи зап ущ енн ы м в о ди н о честве на с тан д ар тно м супер скал я р но м п р о
це с с о р е б е з п од д ер ж ки м но гопоточности. В грех п р и м ер ах в н иж ней части р исун ка п оказан о , как
они будут выполняться при сов м естн ом зап уске в трех м ногопоточны х вариантах, По го ризонтали
о то б р а ж а е т с я к о м а н д а в каж ды й такто в ы й ц и кл . П о в е р ти ка л и п р е д с та в л е н а п о с л е д о в а тел ь
н о с ть такто в ы х ц и кл о в . П усты е (б е л ы е ) кв ад раты п оказы ваю т, что в д а н н о м т а кто в о м ц и кл е
соо тв етств ую щ и й з ап ущ ен н ы й слот не зад ей ств о в ан . Гр ад ац ии с е р о го цв ета в м но го п о то чн о м
п р о ц е сс о р е соответствую т четы рем разны м п отокам Д ополнительны й пусковой эф ф ект ко н в ей
е р а д ля крупном одульной м н о гоп о то чно сти , не показан н ы й на д анн ом р и сун ке, п ривед ет при е е
испо л ь зов ан и и к е щ е бо л ь ш и м п о тер я м п р о п ускн о й спо с о б н о с ти
Самопроверка
1. Определите истинность или ложность следующего утверждения: как многопо
точность, так и многоядерность основаны на параллелизме с целью получения
более эффективной отдачи от микропроцессора.
3. Определите истинность или ложность следующего утверждения: в параллель
ной многопоточности потоки используются для улучшения использования
ресурсов процессоров с динамической диспетчеризацией и изменением порядка
выполнения инструкций.
Потоки данных
Один Несколько
Потоки Один S IS D : Intel P en tiu m 4 S IM D : S S E и н стр укц ии хвб
инструкций
Несколько M IS D : П о к а п р и м ер о в н ет M IM D : Intel Хеоп е 5 3 4 5 (C lovertow n )
сотен MMX- и SSE-инструкций микропроцессора х86 (см. главу 2). Эти инструк
ции были добавлены для повышения производительности мультимедийных про
грамм, и дают возможность оборудованию располагать множеством одновременно
работающих АЛ У, или, что одно и то же, поделить одно широкое АЛ У на множество
параллельных, меньших по размеру АЛ У, работающих одновременно. Например,
один и тот же компонент оборудования можно рассматривать как одно 64-разряд-
ное АЛУ, или как два 32-разрядных АЛ У, или как четыре 16-разрядны.ч /АТУ, или
как восемь 8-разрядных АЛУ. Загрузки и сохранения имеют просто такую же ши
рину, как и самое широкое АТУ, поэтому программист может относиться к одним
и тем же инструкциям передачи данных как к передаче 64-разрядных элементов
данных, либо двух 32-разрядных элементов данных, либо четырех 16-разрядных
элементов данных, либо восьми 8-разрядных элементов данных.
Этот очень дешевый параллелизм для ограниченных целочисленных данных
послужил исходным толчком для создания инструкций ММХ семейства процес
соров х86. Под влиянием закона Мура к этим мультимедийным расширениям было
добавлено еще больше оборудования, и теперь инструкции SSE2 поддерживают
одновременное выполнение действий сразу над двумя 64-разрядными числами
с плавающей точкой.
Ширина операции и регистров закодирована в поле кода операции (opcode) этих
мультимедийных инструкций. По мере расширения данных регистров и операций
число кодов операций для мультимедийных инструкций стремительно растет, и те
перь уже насчитываются сотни SSE-инструкций, позволяющих выполнять весьма
полезные комбинации действий (см, главу 2).
Вектор
Более старая и элегантная интерпретация SIMD называется векторной архитекту
рой, она тесно связана с продукцией компании Cray Computers. Здесь опять наблю
дается довольно сильная связь с проблемами широкого применения параллелизма
на уровне данных. Вместо использования 64 АЛУ, выполняющих одновременно
64 сложения, подобно старым матричным процессорам, векторная архитектура
конвейеризирует АЛУ, чтобы получить высокую производительность при мень
ших затратах. Основная философия векторной архитектуры заключается в сборе
элементов данных из памяти, помещении их в определенном порядке в большой
набор регистров, проведении их последовательной обработки и регистрах, а затем в
записи результатов обратно в память. Основным свойством векторных архитектур
является набор векторных регистров. Поэтому векторная архитектура может иметь
32 векторных регистра, в каждом из которых 64 64-разрядных элемента.
Упражнения
с обычным к о д о м
С рав нение векторов
Предположим, что мы расширяем архитектуру набора инструкций MIPS векторными ин
струкциями и векторными регистрами Векторные операции используют те же названия,
что и MIPS-операиии, но с добавлением буквы «V». Например, addv.d складывает два
вектора двойной точности. Векторные инструкции получают свои входные данные либо
72 0 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
из пары векторных регистров (addv а), либо из векторного регистра и скалярного регистра
(addvs.d). В последнем случае значение в скалярном регистре используется в качестве ввода
для всех операций —операция addvs.d будет прибавлять содержимое скалярного регистра к
каждому элементу в векторном регистре. Названия 1v и sv обозначают векторную загрузку
и векторное сохранение, и эти инструкции загружают или сохраняют целый вектор данных
с двойной точностью. Один операнд определяет векторный регистр, подвергаемый загрузке
или сохранению, а второй операнд, являющийся МIPS-регистром общего назначения, со
держит стартовый адрес вектора в памяти. Исходя из этого короткого описания покажите
обычный MlPS-код в сравнении с векторным MIPS-кодом для
У -а * Х + у,
где X и У являются векторами из 64 чисел с плавающей точкой двойной точности, которые
изначально находятся в памяти, а а является скалярной переменной двойной точности.
(Этот пример является так называемым циклом DAXPY, который формирует внутренний
цикл контрольной задачи Unpack. DAXPY означает double precision а х X plus 1' ) Предпо
ложим, что начальные адреса .Xи Унаходятся соответственно в $sG и $ S l.
Ответ
Вот как выглядит обычный MlPS-код для DAXPY:
Id f f O .a ( ts p ) ; загрузка скаляра a
addiu r4.JsO .#512 ; верхняя граница того, что загруиать
loop: Id * f2 .0 (S s0 ) : загрузка х О )
mul d » f 2 .$ f ? .l f 0 .а * х(1 )
Id $ f 4 .0 ( $ s l) : загрузка у (1 )
ad d .d $ f 4 .l f 4 .$ f 2 .а * х(1 ) + у (1)
s d $f4 O (tS l) .сохранение в y ( i )
addiu JsO.SsO #8 увеличение индекса к х
addiu * s i .» s : #e .увеличение индекса и у
subu I t 0 .r 4 .$ s 0 : вычисление границы compute bound
bne $tO .$zer o ,!o o p п роверка на готовность
А вот как выглядит векторный MI PS-кол для DAXPY:
Id * f 0 .a ( ls p ) ; загрузка скаляра а
)v *vl,0($s0) : загрузка вектора х
mulvs d $ v 2 .$ v l.$ f0 с е р е н ношение вектора и скаляра
lv $ v 3 .0 t* s l) : з а 1 руэка вектора у
addv d $v4.$v2.$v3 добавлен и е у и произведению
SV * v 4 .0 (* S l) сохран ен и е результата
В этом примере есть ряд интересных сравнений двух сегментов кода. Наиболее
ярким является то, что векторный процессор существенно сокращает диапазон
инструкций, выполняя только шесть инструкций против почти 600 для MIPS. Это
сокращение получается из-за того, что векторные операции работают с 64 элемен
тами, а также из-за того, что верхние команды, которые составляют на MIPS почти
половину цикла, в векторном коде отсутствуют. Не удивительно, что это уменьшает
количество извлекаемых инструкций и время их выполнения, экономя энергию.
Еще одним важным различием является частота конфликтов конвейера (см.
главу 4). В простом M IPS-коде каждая инструкция add d должна ждать выполнения
инструкции mul Д и каждая инструкция s d должна ждать выполнения инструкции
add.d. В векторном процессоре каждая векторная инструкция будет приостанав
7.6. SISD, MIMD, SIMD, SPMD и использование векторов 721
С р а в н е н и е в е к то р о в с о с к а л я р а м и
Векторные инструкции обладают рядом важных свойств по сравнению с обычной
архитектурой набора инструкций, называемой в данном контексте с к а л я р н о й а р
хит ект урой:
С р а в н е н и е в е к то р о в и м у л ь т и м е д и й н ы х
расш ирений
Как и мультимедийные расширения, имеющиеся в инструкциях х86 SSE, век
торные инструкции определяют сразу несколько операций. Но мультимедийные
расширения обычно определяют лишь небольшое их количество, в то время как
векторные определяют десятки операций. В отличие от мультимедийных расшире
ний, количество элементов в векторной операции определяется не в коде операции,
а в отдельном регистре. Это означает, что разные версии векторной архитектуры
могут быть реализованы с разным количеством элементов путем простого изме
нения содержимого этого регистра и, следовательно, сохранить двоичную совме
стимость. В отличие от этого, новый более крупный набор кодов операций всякий
раз добавляет в мультимедийное расширение архитектуры х86 изменения длины
вектора.
Также, в отличие от мультимедийных расширений, передача данных не нужда
ется в их смежности. Векторы поддерживают как пошаговые доступы, при которых
оборудование загружает в память каждый n-ный элемент данных, так и индекси
рованные доступы, при которых оборудование находит адреса загружаемых эле
ментов в векторном регистре.
Как и мультимедийные расширения, вектор легко приспосабливается к гиб
кости в длине данных, поэтому заставить операции работать с 32 64-разрядными
элементами данных, или с 64 32-разрядными элементами ланнмх, или со 128
16-разрядными элементами данных, или с 256 8-разрядными элементами данных
довольно просто.
В общем, векторные архитектуры являются довольно эффективным средством
выполнения программ, занимающихся параллельной обработкой данных, они
лучше соответствуют технологиям компилирования, нежели мультимедийные
расширения, и им проще развиваться с течением времени, чем мультимедийным
расширениям для архитектуры х86.
Самопроверка
Определите истинность или ложность следующего утверждения: как поясняется
в х86, мультимедийные расширения можно представить в виде векторной архитек
туры с короткими векторами, поддерживающей передачу только примыкающих
друг к другу векторных данных.
7.7. Введение вграфические процессоры 723
В в е д е н и е в а р х и т е к т у р у гр а ф и ч е с к о го
п р о ц е с с о р а NVIDIA
Поскольку графические процессоры развивались в своей собственной среде, у них
не только другая архитектура, как было сказано выше, но и другой набор терминов.
По мере изучения терминологии графических процессоров вы увидите сходство
с подходами, рассмотренными в предыдущих разделах, например сходство с мел-
комодульной многопоточностью и векторами.
7.7. Введение в графические процессоры 727
Варп2Э
Рис. 7.5. Сравнение одного ядра Sun UltraSPARC Т2 (Niagara 2) с одним мультипроцес
сором Tesla. Я дро Т 2 является о д н и м п р о ц е сс о р о м и и спо л ьзует а п п а р а т н о п о д д ер ж и в аем ую
м ногопоточность с восемью п отокам и М ул ь ти про ц ессо р Tesla с остоит из восьми пою ковы х п р о
ц е ссо р о в и испо л ь зует а п п а р а тн о п о д д ер ж и в аем ую мног опоточность с 2 4 варп ам и по 3 2 п отока
(восем ь про ц ессо ро в умножить на четы ре тактовых цикла) T 2 м ож ет о сущ ествлять п ереклю чение
кажды й тактовы й цикл, a Tesla м о ж ет о сущ ествл ять п ер екл ю ч ение только каж ды е два или четы ре
тактовы х цикла. О д и н и з спо со б о в с р а в н е н и я этих двух у с тр о й ств с о с т о и т в том . что Т 2 м о ж е т
то л ь ко о с у щ е с тв л я ть м н о го п о то ч н о с ть п р о ц е с с о р а по в р е м е н и , a Tesla м о ж е т о су щ е с тв л я ть
м н о го п о то ч н о с ть по в р ем е н и и по п р о стр ан ств у, то е с ть по восьми п отоко вы м п р о ц е с с о р а м ,
а т а к ж е по с е гм е н т а м и з четырех тактовы х циклов
7.7. Введение в графические процессоры 729
П е р с п е к т и в ы гр а ф и ч е с к и х п р о ц е с с о р о в
Графические процессоры, подобные NVIDIA Tesla, не вполне соответствуют пре
дыдущим классификациям компьютеров, например в такой, как в табл. 7.2. Несо
мненно, GeForce 8800 GTX с 16 мультипроцессорами Tesla относится к MIMD.
Вопрос в том, как классифицировать каждый из мультипроцессоров Tesla и восемь
потоковых процессоров, составляющих мультипроцессор Tesla.
Ранее утверждалось, что SIMD больше всего подходит для циклов for и мень
ше всего подходит для операторов case и switch. Tesla стремится к достижению
высокой эффективности при параллелизме на уровне данных, облегчая програм
мистам работу с независимым параллелизмом на уровне потоков. Tesla позволяет
программисту считать мультипроцессор многопоточным M IM D -устройством,
состоящим из восьми потоковых процессоров, но оборудование старается собрать
вместе восемь потоковых процессоров для работы в качестве SIM T-устройства,
когда несколько потоков одного и того же варпа могут выполняться вместе. Ког
да потоки работают независимо друг от друга и следуют по независимым путям
выполнения, они выполняются медленнее, чем в режиме SIMT, поскольку все 32
потока в варпе совместно используют один блок извлечения инструкций. Если бы
все 32 потока варпа выполняли независимые инструкции, каждый поток работал
бы в 1/16 пиковой производительности полного варпа из 32 потоков, выпол
няемых на восьми потоковых процессорах в течение четырех тактовых циклов.
Таким образом, у каждого независимою потока есть свой собственный аффек
тивный персональный компьютер, поэтому программисты могут представлять
мультипроцессор Tesla в виде M IM D-устройства, но, чтобы добиться желаемой
производительности, они должны позаботиться о написании инструкций потока
управления, позволяющих SIM T-оборудованню выполнять CUDA-программы
в SIM D-режиме.
Самопроверка
Определите истинность или ложность следующего утверждения: графические
процессоры рассчитаны на использование графических DRAM-модулей в целях
сокращения латентности памяти и увеличения таким образом производительности
графических приложений.
Оценка успешности того или иного решения зависит в основном от природы связи
при рабочей нагрузке параллельных программ, выполняемых на машине.
Количество различных топологий, рассмотренных в публикациях, подсчитать
довольно трудно, но в коммерческих параллельных процессорах применение нашла
лишь малая их часть. На рис. 6.6 показаны две популярные топологии. В реазьных
машинах для повышения производительности и надежности к этим простым топо
логиям часто добавляются дополнительные связи.
а) д в у м е р н а я р е ш е тка , и ли се тка и з 16 у зл о в 6 ) д е р е в о n - к у б а и з 8 у з л о в (8 = 2 * ,
п = 3)
Рис. 7 .6 . Сетевая топология, встречающаяся е промышленных параллельных про
цессорах. Серые кружочки представляют коммутаторы, а черные квадраты обозначают узлы
«процессор—память». Даже при том, что коммутаюрм имеют множество связей, как правило,
только одна из них ведет к процессору. Булева топология п-куб является п-мерным соединением
С 2" узлами, требующими п связей на коммутатор (плюс одну для процессора), соединяя, таким
образом, п ближайших друг к другу узлов. Зачастую эти основные топологии оснащаются до
полнительными дугами для повышения производительности и надежности
1
111___________
III ■■ “Г
i 1 1
- г 1~1
г
ч
LJ
И _
г 1 н
г Л л
Аг
У2
1 , р>
г i
1 I
р,
1 1^ _ц л!
т
I 1 1^ г Г г _п
р5
р«
1 г I" Аг л А
-------------*
лЛ -L - Д а
а) с е т ь с п о п е р е ч н о й к о м м у т а ц и е й 6) сеть Omega
А г г с
В Г г D
Р е а л и з а ц и я с е т е в ы х то п о л о ги й
В упрощенном анализе всех сетей, представленном в данном разделе, проигнори
рованы важные практические соображения, касающиеся конструкции сетей. Рас
стояние каждой связи влияет на стоимость обмена данными на высокой тактовой
частоте, в общем, чем длиннее дистанция, тем дороже запустить сеть на высокой
тактовой частоте. Более короткие дистанции кроме этого облегчают назначение
для связи большего количества проводников, поскольку мощность, затрачиваемая
на управление множеством проводников на кристалле, меньше, если проводники
7.9. Контрольные задачи для мультипроцессоров 735
короче. Более короткие проводники также обходятся дешевле длинных. Еще одним
практическим ограничением является то, что трехмерное изображение должно
переноситься на кристаллы, являющиеся, в конечном счете, двумерной передающей
средой. И конечной озабоченностью является потребляемая мощность. Именно
она, к примеру, может заставить кристаллы полагаться на простые топологии в виде
решетки. Можно сказать, что те топологии, которые элегантно вы глядят на чертеже,
могут быть непрактичными при их реализации.
М ас Перепро
Контрольная
штаби грамми Описание
задача
рование рование
Unpack Нестро Да Плотная матричная линейная алгебра (Dongarra,
гое 1979)
SPECrate Нестро Нет Независимый параллелизм заданий (Henning, 2007)
гое
Параллельные Строгое Нет Комплекс одномерных быстрых преобразований
приложения (хотя Фурье
для совместно допуска Блокирующаяся LU-декомпоэиция
используемой ется два Блокирующаяся разбросанная факторизация Чолески
памяти, раз объема Целочисленная поразрядная сортировка
работанные задач) Моделирование метода Барнеса-Хата
в Стэндфорд- Моделирование быстро адаптируемого мультиполя
ском уни Моделирование океана
верситете, Иерархическая излучательность
SPLASH 2 - Трассировка лучей
Stanford Parallel Рендерер объема
Applications for Моделирование воды с пространственной структурой
Shared Memory данных
SPLASH 2 (Woo Моделирование воды без пространственной структу
etal., 1995) ры данных
Контрольные Нестро Да ЕР: Чрезвычайная параллельность
задачи для гое (только С MG: Упрощенная мультирешетка
параллельных или Фор CG : Неструктурированная решетка для метода сопря
вычислений тран) женных градиентов
NAS - NAS FT: Трехмерное частичное решение дифференциаль
Parallel Bench ного уравнения с использованием быстрых преобра
marks (Bailey et зований Фурье
al.. 19 9 1) IS: Объемная сортировка целых чисел
Набор кон Нестро Нет Blackscholes — Модель ценообразования опционов
трольных задач гое Блэка-Ш оулза
PARSEC — PAR Bodytrack — Отслеживание телодвижений человека
S E C Benchmark Canncal - Моделирование выравнивания для опти-
Suite (Blenia et мизации маршрутизации на основе осведомленности
al., 2008) о состоянии кэш-памяти
Dedup — Перспективное сжатие с исключением ду
блирования данных
Facesim — моделирование мимики лица
Ferret — Сервер поиска похожего содержимого
Fluidanimate — Гидрогазодинамика для анимации
с использованием метода SPH
Freqmine — Частая выемка набора данных
Streamcluster — Онлайн-кластеризация входного
потока
Swaptions — Оценка портфеля своп-опционое
Vips — Обработка изображений
х264 — Видеокодирование Н.264
продолж ение &
738 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Таблица 7 .4 (продолжение)
М ас Перепро
Контрольная
штаби грамми Описание
задача
рование рование
Шаблоны кон Строгое Да Конечный автомат (Finite-State Machine)
струирования, или не Комбинаторная логика (Combinational Logic)
разработанные строгое Обход графов (Graph Traversal)
в Университете Структурированная решетка (Structured Grid)
Беркли — Berke Плотная матрица (Dense Matrix)
ley Design Pat Разреженная матрица (Sparse Matrix)
terns (Asanovic Спектральные методы (быстрое преобразование
etal., 2006) Фурье) — Spectral Methods (FFT)
Динамическое программирование (Dynamic Program
ming)
Задача N тел (N-Body)
Функции Мар и Reduce (MapReduce)
Обратное отслеживание / ветвление и граница (Васк-
track/Branch and Bound)
Выведение графической модели (Graphical Model
Inference)
Неструктурированная решетка (Unstructured Grid)
Самопроверка
Определите истинность или ложность следующего утверждения: основным не
достатком традиционных подходов к контрольным задачам для параллельных
компьютеров является то, что правила, обеспечивающие справедливость, наряду
с этим подавляют новшества.
Модель RooflinelV, i
Рис. 7.10. Roof line-модели двух поколений процессоров Opteron. Rootline-модель Opteron Х2,
аналогичная показанной на рис. 7.9, нарисована более темными линиями, a roofline-модель Op
teron Х4 нарисована более светлыми линиями. Более высокое ребро Opteron Х4 означает, что те
базовые компоненты, которые в Opteron Х2 были ограничены вычислительными возможностями,
в Opteron Х4 могут быть ограничены производительностью памяти
AMD Opteron
AMD Opteron
7 .1 1 . Реальное оборудование:
выполнение контрольных задач
для четырех многоядерных процессоров
с использованием модели Roofline
Учитывая неопределенность относительно лучшего способа продолжения парал
лельной революции, не удивительно, что мы увидели столько разных конструкций,
сколько имеется многоядерных кристаллов. В данном разделе будут рассмотрены
четыре многоядерные системы для двух базовых компонентов из шаблонов кон
струирования, показанных в табл. 7.4: разреженная матрица и структурированная
решетка. Информация для данного раздела позаимствована из: Williams, Oliker, et
al„ 2007, Williams, Carter, et al„ 2008, Williams and Patterson, 2008.
DRAM
Тактовая
Кол-во Кол-во Кол-во Пикоаая,
Тип MPU ISA частота, Тактовая
ПО ТО КО В ядер гн е зд Гфлоп/с Пиковая,
ГГц частота,
Гбайт/с
тип
Intel Хеоп X86/64 в 8 2 2,33 75 FSB: 2 x 1 0 .6 667 МГц;
е5345 (Clo FBDIMM
vertown)
AMD Opteron X06/64 в 8 2 2,30 74 2 х 10.6 667 МГц;
Х4 2356 DDR2
(Barcelona)
Sun Sparc 126 16 2 1 .1 7 22 2 x 2 1,3 667 МГц;
UltraSPARC (красный): 2 х FBDIMM
T2 5 14 0 10,6 (белый)
(Niagara 2)
IBM Cell QS20 Cell 16 16 2 3.20 29 2 ж 25,6 XDR
SRI/crossbar SRI/crossbar
IT
2x64 Ь m em ory controllers 2x64 b m em ory controllers
в
7.11. Реальное оборудование: выполнение контрольны* задач 751
г
Рис. 7 .1 3 . Четыре сравнительно недавно выпушенных мультипроцессора, каждый из которых
использует два процессорных гнезда. Начиная с левого верхнего угла здесь представлены
сведения о компьютерах: a) Intel Xeon е5345 (Clovertown), б) AMD Opteron Х4 2356 (Barcelona),
в) Sun UltraSPARC Т2 5 14 0 (Niagara 2) и г) IBM Cell QS20. Учтите, что у Intel Xeon е5345 (Clovertown)
имеется отдельная микросхема северного м о о а , чего нет у других микропроцессоров
П ико м * П иковая
128,0
о
о 64,0
32.0
V, V« V2 1 2 4 8 16 % V, 1 2 4 8 16
Соотношение флоп/байт Соотношение флоп/байт
Разреженная матрица
Первый пример базового компонента, относящийся к вычислительному шаблону
конструирования Разреженная матрица, - это Sparse M atrix Vector multiply
(SpM V — разреженная матрица — векторное умножение). SpMV приобрел по
пулярность в научных вычислениях, экономическом моделировании и в инфор
мационном поиске. К сожалению, обычные реализации зачастую работают менее
чем на 10% от пиковой производительности однопроцессорных систем. Одна из
754 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Структурированная решетка
Вторым базовым компонентом является пример шаблона конструирования Струк
турированная решетка. Модель имитации магнитогидродинамики Латтиса—Боль
цмана - Lattice Boltzmann Magneto -Hydrodynamics (LBM HD) популярна для
вычислительной гидроаэродинамики; это структурированный решетчатый код
с последовательностью временных интервалов.
Каждая точка вызывает чтение и запись около 75 чисел с плавающей точкой
двойной точности и около 1300 операций с плавающей точкой. Как и SpMV',
LBMHD обычно получает лишь небольшую часть пиковой производительности
однопроцессорной системы из-за сложности структур данных и нерегулярности
схем обращения к памяти. Соотношение флоп/байт намного выше 0,70 против ме
нее 0,25 в SpMV. За счет отсутствия заполнения блока кэш памяти из памяти при
промахах записи, когда программа собирается переписать весь блок, интенсивность
возрастает до 1,07. Такую оптимизацию кэш памяти предлагают все многоядерные
системы, кроме UltraSPARC Т2 (Niagara 2).
На рис. 6.14 показано, что арифметическая интенсивность LBMHD достаточно
высока для того, чтобы имелся смысл проведения оптимизаций, относящихся как
к вычислениям, так и к пропускной способности памяти на всех многоядерных
системах за исключением UltraSPARC Т2, чья точка ребра линии крыши находится
ниже LBMHD. UltraSPARC Т2 может достичь линии крыши с использованием
только вычислительных оптимизаций.
Вдобавок к распараллеливанию кола для LBMHD использовались следующие
оптимизации:
♦ Б л и з о с т ь п а м я т и . Эта оптимизация полезна по тем же обоснованиям, которые
приводились выше.
♦ М и н и м и з а ц и я п р о м а х о в п р и о б р а щ е н и и к T L B . Для существенного сокращения
TLB-промахов в LBMHD следует использовать структуру массивов и объ
756 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Количество ядер
Рис. 7 . 1 6 . Производительность LBMHD на четырех многоядерных системах
Продуктивность
Кроме производительности еще одним важным показателем революции парал
лельного вычисления является продуктивность, или программные трудности до
стижения производительности. Чтобы проиллюстрировать различия, в табл. 7.6
сравнивается простая производительность с производительностью посте полной
оптимизации для четырех систем и двух базовых компонентов.
Оказалось, что проще всего работать с системой UltraSPARC Т2 благодаря ее
высокой пропускной способности памяти и простым для понимания ядрам. Для
этих двух базовых компонентов в UltraSPARC Т2 можно просто посоветовать
попытаться добиться высокопроизводительного кода от компилятора, а затем
7.11. Реальное оборудование: выполнение контрольных задач 757
Базовая Оптимизирован
Приблизительный
Базовый производи ная производи
Тип MPU % оптимизирован
компонент тельность, тельность,
ного
Гфлоп/с Гфлоп/с
Intel Хеоп е5345 SpMV 1,0 1,5 64%
(Clove rtown) LBMHD 4.6 5.6 82%
AMO Optcron X4 SpMV 1.4 3,6 38%
2356 LBMHD 7,1 14.1 50%
(Barcelona)
Sun UltraSPARC SpMV 3,5 4,1 86%
T2 LBMHD 9,7 10,5 93%
(Niagara 2)
IBM Cell QS20 SpMV — 6.4 0%
LBMHD — 16,7 0%
Работать с Хеоп е5346 оказалось сложнее, потому что трудно было понять
поведение памяти при наличии двойных фронтальных шин, также трудно было
разобраться, как работает аппаратная предвыборка, и получить от компилятора
хороший SIM D -код. Код С для этой системы и для Optcron Х4 щедро усыпан
встроенными операторами, вызывающими SIM D-инструкции для получения хо
рошей производительности.
Система Opteron Х4 получает преимущества от большинства типов оптимиза
ций, поэтому для нее нужно приложить больше усилий, чем для Хеоп е5345, хотя
поведение памяти Opteron Х4 было проще понять, чем ее поведение в Хеоп е5345.
У системы Cell есть два типа сложностей. Во-первых, SIM D-инструкции для
SPE были неудобными для компиляции, поэтому приходилось постоянно помо
гать компилятору, вставляя в код на языке С нужные операторы, составленные
из инструкций на языке ассемблера. Во-вторых, система памяти была намного
758 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
7.14. Упражнения
Предоставлены Дэвидом Клали (David Kaeli) из Северо-Восточного университета.
Упражнение 7.1
Сначала составьте список повседневных будничных дел. Например, вы можете
встать с постели, принять душ, одеться, позавгракать, высушить волосы, почистить
зубы и т. д. Сократите список до 10 дел.
7.14. Упражнения 763
7.1.1 15 J <7.2> Теперь разберитесь, какие из этих дел уже используют некую
форму параллельности (например, одновременная чистка сразу всех зубов, а ие
одною в отдельно взятый период времени, переноска одной книги по сравнению
с тем, что в портфель кладется сразу несколько книг и все они переносятся «парал
лельно»), Рассмотрите каждое из ваших дел, выполняется ли оно в параллельном
режиме, а если нет, то почему.
7.1.2 [5| <7.2> Теперь рассмотрите, какие из дел могут выполняться параллель
но (например, завтрак и прослушивание новостей). Расскажите при рассмотрении
каждого дела, с каким из других дел оно может быть выполнено в паре.
7.1.3 (5| <7.2> Что можно изменить в текущих системах (например, в душе,
одежде, телевизоре, машине) применительно к решению задач упражнения 7.1.2,
чтобы увеличить количество параллельно выполняемых дел?
7.1.4 [5) <7.2> Оцените степень сокращения времени на все эти дела, если по
пытаться выполнить как можно больше дел в параллельном режиме.
Упражнение 7.2
Во многих компьютерных приложениях используются поиск и сортировка данных.
Для сокращения времени выполнения этих трудоемких задач была придумана
масса эффективных алгоритмов поиска и сортировки. В данном упражнении мы
рассмотрим, как наилучшим образом можно распараллелить такие задачи.
7.2.1 [10) <7.2> Рассмотрим следующий алгоритм двоичного поиска (класси
ческий алгоритм типа «разделяй и властвуй»), который ищет значение Xв отсо
ртированном массиве А, состоящем из Nэлементов, и возвращает индекс соответ
ствующего элемента:
B ln a ry $ e a rc h (A [0 ..N -1]. X) {
low = О
h igh - N - 1
w h ile (low <- h ig h ) {
mid = (low + M g h ) / 2
i f (A[mid] > X)
high - mid - 1
e ls e i f (A[m id] < X)
low • mid ♦ 1
else
return mid // найден
}
return -1 U не найден
}
Предположим, что у вас для запуска BinarySearch имеется Y ядер на многоядер
ном процессоре. При условии, что число Y намного меньше числа N, определите
коэффициент ускорения, который вы рассчитываете получить для значений Yи N.
Начертите все в виде графика.
7.2.2 [5] <7.2> Теперь предположим, что Y равен N. Как это повлияет на ваши
заключения но предыдущему ответу? Если вам поручили получить наилучший
из возможных коэффициентов ускорения (при строгом масштабировании), объ
ясните, как можно изменить данный код для его получения.
764 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Упражнение 7.3
Рассмотрим следующий фрагмент кода на языке С:
fo r (j-2:j< 1000;j+ + )
D [j] - D [ j- l] + D [ j- 2 ] ;
Этому фрагменту будет соответствовать следующий фрагмент M IPS-кода:
DADDId r2 .r2 .9 9 9
L.D f l . - 1 6 ( f l)
L.D f2 . - 8 ( f l)
ADD D f3 . f l . f2
S.D f3 . 0 ( r l )
DADDIU r l. r l. 8
BNE r l . r2 . loop
С этими инструкциями связаны следующие показатели латентности (в циклах):
3 5 1 1 3
7.3.1 [10] <7.2> Сколько тактовых циклов займет выполнение всех инструкций
н одной итерации показанного выше цикла?
7.3.2 [10] <7.2> Когда инструкция в более поздней итерации цикла зависит от
значения данных, произведенного в более ранней итерации того же самого цикла,
мы говорим, что это з а в и с и м о с т ь , п р и в н е с е н н а я ц и к л о м между итерациями этого
цикла. Определите зависимости, привнесенные циклом в показанном выше коде.
Определите зависимые переменные программы и регистры, соответствующие нм
на уровне ассемблера. Переменную организации цикла можно проигнорировать.
7.3.3 [10] <7.2> Развертывание цикла было описано в главе 4. Примените такое
развертывание к данному циклу, а затем рассмотрите возможность запуска этого
кода в системе с двумя узлами, распределенной памятью и передачей сообщений.
Предположим, что мы собираемся использовать передачу сообщений, рассмотрен
ную в разделе 7.4, где была представлена новая операция send(x. у), отправляющая
узлу х значение у, и операция re c e iv e ! ), которая ждет посланное узлу значение.
Предположим, что запуск операций send занимает один цикл (то есть более поздние
операции на том же узле могут выполняться в следующем цикле), но отправка на
узел-получатель занимает 4 цикла. Инструкции re c e iv e приостанавливают выпол
нение инструкций на узле до тех пор, пока они не получат сообщение. Создайте рас
писание для двух узлов при условии, что коэффициент развертывания тела цикла
равен 4 (то есть тело цикла появится 4 раза). Подсчитайте количество тактовых
циклов, которое займет выполнение программного цикла на системе с передачей
сообщений.
7.3.4 [10] <7.2> Латентность внутренней сети играет большую роль в эффектив
ности систем с передачей сообщений. Насколько быстрой должна быть внутренняя
сеть, чтобы справиться с любым ускорением от использования распределенной
системы, описанной в упражнении 7.3.3?
7.14. Упражнения 765
Упражнение 7.4
Рассмотрим следующий рекурсивный алгоритм mergesort (еще один классический
алгоритм типа «разделяй и властвуй»), Впервые алгоритм mergesort был описан
Джоном фон Нейманом (John von Neumann) в 1945 году. В его основу была поло
жена идея о делении неотсортированного списка х из п элементов на два подсписка,
размер которых составляет примерно половину исходного списка. Эта операция
повторяется для каждого подсписка и продолжается до тех пор, пока не будут полу
чены списки длиной в один элемент. Затем, начиная с подсписков длиной в один
элемент, два подсписка «объединяются» (merge) в один отсортированный список.
Mergesort(т)
var l i s t le ft. rig h t. result
i f length(m) s 1
return m
else
var middle - lergth(m) I 2
f o r each x in m up to middle
add x to left
for each x In m a fte r middle
add x to right
le ft - Mergesort(left)
rig h t * Mergesort(right)
result = Mergedeft. right)
return result
Этап объединения выполняется следующим кодом:
Mergedeft. rig h t)
var li s t result
vrfnle lengthd eft) > 0 and length(right) > 0
i f f lr s t ( le f t ) < fir s t( r ig n t)
append f ir s t d e f t ) to result
le ft - re s t(le ft)
else
append fir s t( r ig h t) to result
rig h t - rest(rig n t)
1f lengthdeft) > 0
append rest d e ft) to result
i f length(right) > 0
append re st(n g h t) to result
return result
7.4.1 [ 10] <7.2> Предположим, что для запуска MergeSort у вас есть Y ядер
в многоядерном процессоре. При условии, что V намного меньше, чем длина т,
lergth(m), определите коэффициент ускорения, который вы рассчитываете получить
дли значений Yи length(m). Начертите все в виде графика.
7.4.2(10] <7 ,2> Теперь представьте, что Yравен length(m). Как это повлияет на
ваши заключения по предыдущему ответу? Если вам поручили получить наилуч
ший из возможных коэффициентов ускорения (при строгом масштабировании),
объясните, как можно изменить данный код для его получения.
766 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Упражнение 7.5
Вы пытаетесь испечь три черничных пирога по фунту весом. В пироге использу
ются следующие ингредиенты:
1 чашка размягченного масла
) чашка сахара
4 больших яйиа
1 чайная ложка ванильного экстракта
1/2 чайной ложки соли
1/4 чайной ложки мускатного ореха
1 1/2 чашки муки
1 чашка черники
Рецепт приготовления одного пирога следующий:
Разогрейте духовку до 325’F (160=С). Смажьте маслом и посыпьте мукой форму
для пирога. В большой чаше взбейте вместе миксером на средней скорости масло
и сахар, пока смесь не станет светлой и рыхлой. Добавьте яйца, ваниль, соль и му
скатный орех. Взбивайте все до полного перемешивания. Переключите миксер на
малую скорость и добавьте муку частями по 1/2 чашки, взбивая все до полного
перемешивания.
Аккуратно добавьте чернику. Распределите все равномерно в готовой для пирога
форме. Выпекайте в течение 60 минут.
7.5.1 [5] <7.2> Ваша задача — как можно эффективнее испечь три пирога.
Предполагая, что у вас имеется только одна духовка емкостью в один пирог, одна
большая чаша, одна форма для выпечки и один миксер, составьте план самого
быстрого изготовления трех пирогов. Определите узкие места в выполнении этой
задачи.
7.5.2 [5] <7.2> Теперь предположим, что у вас есть три чаши, три формы для
выпечки и три миксера. Насколько быстрее пойдет процесс при наличии этих до
полнительных ресурсов?
7.5.3 [5| <7.2> Теперь предположим, что у вас есть два друга, готовых по
мочь вам испечь пироги, и большая духовка, вмещающая все три пирога. Как это
изменит план, составленный при выполнении упражнения 7.5.1?
7.5.4 [5) <7.2> Сравните задачу по выпечке пирогов с выполнением трех ите
раций цикла на параллельном компьютере Определите наличие параллелизма на
уровне данных и параллелизма на уровне задач в цикле выпечки пирогов.
Упражнение 7.6
Перемножение матриц шрает важную роль в ряде приложений. Две матрицы могут
быть перемножены только в том случае, если количество столбцов первой матрицы
будет равно количеству строк второй матрицы.
Давайте предположим, что у нас есть матрица А размером тп к п и нам нужно
перемножить ее на матрицу В размером п * р . Их произведение можно выразить
матрицей т * р , обозначенной как А В (или А ■ В ) . Если назначить матрицу С - А В
и с помощью cj; обозначить элемент в матрице С на позиции (/,_/), тогда
7.14. Упражнения 767
Упражнение 7.7
Рассмотрим следующие части двух разных программ, запущенных одновременно
на четырех процессорах в симметричном многоядерном процессоре — symmetric
multicore processor (SMP). Предположим, что до запуска этого кода обе переменные
х и у имели значение 0.
Ядро 1 : х - 2;
Ядро 2: у - 2;
Ядро 3: w ~ х + у + 1;
Ядро 4: г = х + у.
7.7.1 [ 10] <7.3> Какими в конечном результате будут все возможные значения
х, у и а? Для каждого возможного результата объясните, как мы можем его полу
чить. Вам потребуется изучить все возможные чередования инструкций.
7.7.2 [5] <7.3> Как можно сделать выполнение более определенным, чтобы была
возможность получить только один набор значений?
Упражнение 7.8
В совместно используемой системе памяти с кэш-когерентным неоднородным
доступом к памяти (cache-coherent, nonuniform-memory access — CC-NUM A)
центральные процессоры и физическая память поделены на вычислительные
узлы. У каждого центрального процессора имеются локальные устройства кэш
памяти. Для поддержки когерентности (целостности, или согласованности) памяти
к каждому блоку кэш-памяти мы можем добавить бит состояния или же ввести
специализированные каталоги памяти. При использовании каталогов каждый
узел предоставляет специализированную аппаратную таблицу для управления
768 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Упражнение 7.9
Предположим, что в CC-NUMA-системе, описание которой представлено в упраж
нении 7.8, имеется четыре узла, у каждого из которых имеется одноядерный цен
тральный процессор (и у каждого процессора есть свои собственные устройства
кэш-памяти данных уровней L1 и L2). Устройство кэш-памяти данных уровня L1
имеет сквозной режим записи, а устройство кэш памяти данных уровня 1.2 имеет
режим отложенной записи. Пусть система имеет рабочую нафузку, при которой
один центральный процессор ведет запись по определенному адресу, а другие
центральные процессоры читают те данные, которые он записал. Также предпо
ложим, что адрес, по которому ведется запись, изначально находится в памяти
и отсутствует в локальной кэш-памяти. После записи обновляемый блок при
сутствует только в устройствах кэш-памяти уровней L1 и L2 того ядра, которое
осуществляло запись.
7.9.1 [10] <7.3> Для систем, обеспечивающих когерентность, используя со
стояния блоков кэш-памяти, дайте описание обмена данными между узлами,
который будет генерироваться, когда каждый из четырех узлов будет вести запись
по уникальным адресам, после чего данные из каждого адреса, куда велась запись,
считываются остальными тремя ядрами.
7.14. Упражнения 769
Упражнение 7.10
На CC-NUMA-системе стоимость обращения к нелокальной памяти может огра
ничить наши возможности эффективного использования мультипроцессорной
обработки. В следующей таблице даны показатели стоимости, связанные с обраще
ниями к данным в локальной памяти, в сравнении с показателями, относящимися
к нелокальной памяти, и локальность наших приложений выражена в пропорции
локальных обращений.
Упражнение 7.11
Задача об обедающих философах является классической задачей синхронизации
и парадлелизма. Философы сидят за круглым столом, занимаясь одним из двух
дел: сдой или размышлением. Когда они едят, они не размышляют, а когда они
размышляют, они не едят. В центре стоит миска со спагетти. Между каждой парой
770 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
философов лежит вилка. В результате у каждого философа есть одна вилка слева
от него и одна вилка справа. Учитывая особенности поедания спагетти, философу
нужны для еды две вилки, и он может использовать только те вилки, которые лежат
непосредственно слева и справа от него. Друг с другом философы не разг оваривают.
7.11.1 [10] <7Л> Дайте описание сценария, при котором ни один из философов
никогда не ест (то есть зависает). Какова последовательность событий, приводящих
к возникновению этой проблемы?
7.11.2 [10] <7.4> Опишите, как вы сможете решить эту проблему путем ввода
понятия приоритета? Но можем ли мы гарантировать равноправие всем филосо
фам? Поясните ответ.
Представим теперь, что мы наняли официанта, которому поручено распределять
вилки между философами. Никто не может взять вилку, пока не получит разреше
ния официанта. Официант владеет всей информацией обо всех вилках. Затем, если
мы введем правило, по которому философы будут всегда сначала просить разре
шения взять ту вилку, что находится слева от них, прежде чем просить разрешения
взять ту вилку, что находится справа, то тем самым мы сможем гарантированно
избежать взаимной блокировки.
7.11.3 [10] <7.4> Мы можем реализовать запросы официанту либо в виде
очереди запросов, либо в виде периодических повторных попыток запроса. При
использовании очереди запросы обрабатываются в порядке их получения. Про
блема использования очереди состоит в том, что мы не всегда можем обслужить
философа, чей запрос находится в начале очереди (в силу недоступности ресурсов).
Опишите сценарий с участием пяти философов, в котором предусматривается оче
редь, но облуживание не предоставляется даже при доступности вилок, для того
чтобы поел другой философ (чей запрос находится глубже).
7.11.4 [10] <7.4> Решится ли проблема из упражнения 7.11.3, если запросы
к официанту реализованы путем периодического повторения нашего запроса до
тех пор, пока ресурсы не станут доступными? Обоснуйте ответ.
Упражнение 7.12
Рассмотрим следующие три устройства центральных процессоров:
Центральный процессор SS: двуядерный суперскалярный микропроцессор,
предоставляющий возможности выполнения инструкций на двух функциональных
блоках —functional units (FU ) с изменением порядка этих инструкций. На каждом
ядре одновременно может быть запущен только один поток.
Центральный процессор МТ: обладает мелкомодульной многопоточностью,
позволяя инструкциям из двух потоков выполняться в параллельном режиме (то
есть у него имеются два функциональных блока), хотя в каждом тактовом цикле
может быть запущена инструкция только из одного потока.
Центральный процессор SMT: позволяет инструкциям из двух потоков за
пускаться в параллельном режиме (то есть у него имеются два функциональных
блока), и в одном цикле могут быть запушены на выполнение инструкции любого
из дтух потоков или же инструкции из обоих потоков.
Предположим, что для запуска на этих центральных процессорах у нас есть два
потока —X и Y, которые включают в себя следующие операции:
7.14. Упражнения 771
П оток X П отокУ
А1 — выполнение занимает 2 цикла 81 — не имеет зависимостей
А2 — зависит от результата выполнения А1 В2 — конфликтует с В 1 за право использова
ния функционального блока
АЗ — конфликтует с А2 за право использова ВЗ — не имеет зависимостей
ния функционального блока
А4 — записи! от результата выполнения А2 В4 — зависит от результата выполнения В2
Упражнение 7.13
Для уменьшения стоимости управления современными высокопроизводительными
серверами в настоящее время активно распространяется программное обеспечение
для создания виртуальной среды. Такие компании, как VMWare, Microsoft и IBM,
разработали целую линейку продуктов для виртуализации. Основная концепция,
рассмотренная в главе 5, предусматривает возможность введения между оборудо
ванием и операционной системой уровня гипервизора, позволяющего нескольким
операционным системам совместно использовать одно и то же физическое оборудо
вание. Уровень гипервизора отвечает за распределение ресурсов центрального про
цессора и памяти, а также за предоставления тех служб, которые обычно находятся
в ведении операционной системы (например, за предоставление ввода-вывода).
Виртуализация предоставляет абстрактный взгляд на базовое оборудование
со стороны принятых на обслуживание операционных систем и прикладных про
грамм. Это требует от нас переосмысления того, как многоядерные и мультипро
цессорные системы будут конструироваться в будущем для поддержки совместного
использования центральных процессоров и устройств памяти несколькими опера
ционными системами в параллельном режиме.
7.13.1 [30] <7.5> Выберите из предлагаемых сегодня на рынке два гипервизора,
и найдите сходства и различия в том, как они проводят виртуализацию и управле
ние базовым оборудованием (центральными процессорами и памятью).
7.13.2 [15] <7.5> Проанализируйте, какие изменения могут быть необходимы
в будущей многоядерной платформе, чтобы она больше соответствовала запросам
ресурсов, помещенных на таких системах Например, может ли многопоточность
772 Глава 7. Многоядермость, мультипроцессорные системы и кластеры
Упражнение 7.14
Нужно выполнить показанный цикл как можно эффективнее. 13 нашем распоря
жении две разные машины. MIMD и SIMD.
for П-0; i < 2000: 1++)
fo r (j«0: j<3000: )♦♦)
X _ a rra y [i][j] - Y _array()][i] + 200.
7.14.1 [10J < 7.6> Покажите для четырехпроцессорной M IM D -машины
последовательность M IPS-инструкций, которые будут выполняться на каждом
центральном процессоре. Какое ускорение будет достигнуто на этой M IM D -
машине?
7.14.2 (20) <7.6> Напишите для SIM D-машины, имеющей восемь параллель
ных функциональных SIM D-блоков, программу на ассемблере, используя ваши
собственные SlM D -расширеиия к MIPS для выполнения цикла. Сравните коли
чество инструкций, выполненных на SIM D-машине и на M IM D-машине.
Упражнение 7.15
Примером M ISD-машины может служить систолическая матрица. Она представ
ляет собой конвейерную сеть или «волновой фронт* элементов обработки данных.
Каждому из этих элементов не нужен счетчик команд, поскольку выполнение пере
ключается поступающими данными. Синхронизированная систолическая матрица
ведет вычисления в режиме «жесткой конфигурации», где каждый процессор вы
полняет поочередные фазы вычисления и связи.
7.15.1 [10] <7.6> Рассмотрите предложенную реализацию систолической
матрицы (информацию об этом можно найти в Интернете или в технических
публикациях). Затем попробуйте запрограммировать цикл из упражнения 7.14,
используя эту M ISD-модель. Проанализируйте все трудности, с которыми при
дется столкнуться.
7.15.2 (10) <7.6> Проанализируйте схожести и различия между M ISD- и
SIM D-машинами. Используйте при этом терминологию параллелизма на уровне
данных.
Упражнение 7.16
Допустим, что нам нужно выполнить DAXP-цикл из упражнения «Сравнение
векторов с обычным кодом» раздела 7.6 в M IPS-ассемблере на процессоре NVIDIA
8800 GTX GPU, рассмотренном в данной главе. При решении этой задачи мы будем
считать, что все математические операции производятся над числами с плавающей
точкой одинарной точности (мы переименуем цикл в SAXP), Предположим, что на
выполнение инструкций затрачивается следующее количество тактовых циклов.
7.14. Упражнения 773
7.16.1 [20 J <7.7> Опишите, как вы будете составлять варпы для SAXP-цикла,
чтобы задействовать восемь ядер, предоставляемых в одном мультипроцессоре.
Упражнение 7.17
Загрузите с веб-сайта www.nvidia.com /object/cuda_get.html CUDA T o o lkit и SDK.
Воспользуйтесь «emu release* (режим эмуляции) версией кода (для этого назна
чения не понадобится настоящего оборудования NVIDIA). Создайте программы
примеров, предоставляемые в SDK, и удостоверьтесь, что они выполняются на
эмуляторе.
7.17.1 [90] <7.7> Используя в качестве отправной точки имеющийся в SDK
образец «template*, напишите CU D A -программу для выполнения следующих
векторных операций:
1) а - b (вычитание вектора из вектора);
2) а ■b (скалярное произведение векторов).
Скалярное произведение двух векторов а - \av аг ..., ал) и Ь = [6,, Ь}....6 J опре
делено как:
Л
а Ь ‘ 2 агЬ> •+ а А -
1-1
Представьте код для каждой программы, которая демонстрирует каждую опе
рацию и проверяет правильность результатов.
7.17.2 [90] <7.7> Если вам доступно оборудование GPU, завершите анализ про
изводительности вашей программы, проверив время вычисления для ее G PU -вер
сии и для C PU -версии для диапазона размеров векторов. Объясните все получен
ные результаты.
Упражнение 7.18
Недавно компанией AMD было объявлено, что она ин гефирует фафическос про
цессорное устройство с их хвб-ядрами в едином наборе, хотя и с разными тактовы
ми частотами для каждого из ядер. Это станет примером гетерогенной мультипро
цессорной системы, чье промышленное производство мы ожидаем в ближайшем
будущем. Одной из ключевых конструктивных особенностей станет разрешение
быстрого обмена данными между центральным и фафическим процессорами.
Сегодня обмен данными должен выполняться между отдельными кристаллами
центрального и фафического процессоров. Но это положение вещей изменяется
в разрабатываемой AMD архитектуре Fusion (слияние). На данный момент для
облегчения внутреннего обмена данными планируется использовать несколько
(минимум 16) каналов PCI express. Компания Intel также стремительно врывается
774 Глава 7. Многоядерность. мультипроцессорные системы и кластеры
Упражнение 7.19
Посмотрите на рис. 7.6, б, где показана топология внутренних соединений «-куба
третьего порядка, в котором объединены восемь узлов. Одной из привлекательных
особенностей сети внутренних соединений «-куба является возможность справ
ляться с повреждениями линий без потерн возможности связи.
7.19.1 [ 10] <7.8> Выведите уравнение, вычисляющее количество связей в п-кубе
(где п — это порядок куба), которые могут быть разорваны при сохранении га
рантий, что существующие неразорванные связи обеспечат связь с любым узлом
«-куба.
7.19.2 [10] <7.8> Сравните отказоустойчивость «-куба с полностью подклю
ченной сетью внутренних соединений с таким же количеством узлов. Отобразите
графически сравнение надежности в виде функции от количества связей, которые
могут быть разорваны для обеих топологий.
Упражнение 7.20
Тестирование с помощью контрольных задач является областью исследований,
часть которых — нахождение эталонных рабочих нагрузок для запуска на опре
деленных компьютерных платформах с целью объективного сравнения произво
дительности двух систем. В данном упражнении будут сравниваться два класса
контрольных задач: W hetstone CPU benchmark и PARSEC benchmark. Выберите
одну из программ из набора PARSEC. Все программы должны быть в свободном
доступе в Интернете. Рассмотрите запуск нескольких копий W hetstone в сравне
нии с решением контрольной задачи PARSEC на любой из систем, приведенных
в разделе 7.11.
7.20.1 [60] <7.9> В чем состоит существенное различие между этими двумя
классами рабочей нагрузки при выполнении задач на этих многоядерных системах?
7.20.2 [60] < 7.9,7.10> Насколько в понятиях roofline-моделн полученные вами
результаты будут зависимы при выполнении этих контрольных задач от степени
присутствия совместно используемых ресурсов и синхронизации в используемой
рабочей нагрузке?
Упражнение 7.21
При выполнении вычислений с разреженными матрицами латентность в иерархии
памяти становится одним из решающих факторов. У разреженных матриц наблюда
ется недостаток пространственной локальности в потоке данных, который обычно
7 14 Упражнения 775
Упражнение 7.22
В будущих системах мы ожидаем увидеть гетерогенные вычислительные платфор
мы, созданные на основе гетерогенных центральных процессоров. Их появление
уже наблюдается на рынке встроенных вычислительных устройств в системах, со
держащих в однокристальном модуле цифровые сигнальные процессоры и микро-
контроллерные центра.'! ьные процессоры.
Предположим, что у вас есть три класса центральных процессоров:
ЦПУ А — среднескоростной многоядерный центральный процессор (с - м
вычислений с плавающей точкой), способный выполнять несколько инструкций
за один цикл.
776 Глава 7. Многоядерность, мультипроцессорные системы и кластеры
Упражнение 7.23
Предположим, что компьютерная система, имеющая четыре ядра, может обрабо
тать транзакцию базы данных в установившемся скоростном режиме поступления
запросов в секунду. Также предположим, что на обработку каждой транзакции
уходит фиксированное количество времени. Б следующей таблице показаны пары
латентности транзакции и скорости ее обработки.
(XX) «Мир книг». 198206, Санкт-Петербург. Петергофское шоссе, 73. лит А29
Налоговая льгота — общероссийский классификатор продукции ОК 005-93. том 2; 95 3005 — литература учебная.
Подписано а печать 17 11.11. Формат 70x100/16. Уев. п. л .63,210. Тираж 2000. Закат 26874.
Отпечатано по технологии СЧР в ОАО «Первая Образцовая типография», обособленное подридесейме «Печатный явор..
197110. Санкт-Петербург, Чкаловский пр„ 15.
ВАМ НРАВЯТСЯ НАШИ КНИГИ?
ЗАРАБАТЫВАЙТЕ ВМЕСТЕ С НАМИ!
У Вас е сть свой са й т?
Вы ведете блог?
Регулярно общаетесь на форумах? Интересуетесь литературой,
любите рекомендовать хорошие книги и хотели бы с т а т ь нашим
партнером?
ЭТО ВПОЛНЕ РЕАЛЬНО!
СТАНЬТЕ УЧАСТНИКОМ
ПАРТНЕРСКОЙ ПРОГРАММЫ ИЗДАТЕЛЬСТВА «ПИТЕР»!
Зарегист рируйт есь на нашем сайт е в качест ве парт нера
по адресу w w w .piter.com /eP artners
В се п о с ы л к и о т п р а в л я ю т с я ч е р е з « П о ч ту Р о с с и и » . О т р а б о т а н н а я
система позволяет нам организовы вать доставку Ваших покупок м а кс и
мально быстро. Дату отправления Вашей покупки и предполагаемую дату
доставки Вам сообщат по e-m ail.
пзаА т епьскпИ а о м
ЬбП П ТЕР»WWW PITER COM
КЛУБ П Р(0 С С ИОЕ АЛ
ОснованийИздр— Д— 1Д тви41«щ > а 1997 гаду, книжный ютуб «Профессионал» собирает всвоих
рядах знаггш* своего дева, о п о р а объединяет тяга к знаниям и любовь к книгам. Для членов клуба
проводятся розам ые мврофвтш и. разумеется, предусмотрены привилегии
Привилегии д м ч а с а » пуба:
• карта члов «Клуба Профессионал»,
• бесплатное п о к у е м яубсго издания - журнала «Клуб Профессионал»;
• дисконтная а и л а га к в приобретаемую литературу в размере 10 или 15%;
• бесплатная курьераоя д о с т а ю заказов по Москве и Санкт-Петербургу;
• участие во воет аодвв Издательского дома «Питер» в розничной сети на льготных условиях.
К а к вступктъ в кл уб?
Для вступлвлв» в «Клуб Профессионал» вам необходимо:
• совершить покупку те сайте w w w .p ite r.c o m или в фирменном магазине Издательского дома
•nmefH тесуьм уот 1 5 0 0 рублей без учета почтовых расходов или стоимости курьерской доставки;
• ознакомиться с условиями получения карты и сохранения скидок;
• выразить свое с о л о м е вступить в дисконтный клуб, отправив гмсьмо на адрес: pastbook@prter.cori;
• залолють аглету члена клуба (зарегистрированным на нашем сайте этого делать не надо).
П равил а д л я чл ен о в «Ю туба П р о ф есси о н ал »:
• для продлено членства в клубе и получения с ки д ки 1 0 % в течение каждых 6 м ес я ц е в нужно
совершать покупки на общую сумму от 1 5 0 0 до 2 5 0 0 рублей, без учета почтовых расходов или
стоимости курьерской доставки;
• если же за указанный период вы выкупите товар на сумму от 2501 рубля, скидка будет увеличена
до 15% от розничной цены издательства.
З а ка з а ть н аш и кн и ги вы м о ж е те лю бы м уд об ны м д л я вас с п о с о б о м :
• по телефону: (012)703-73-74;
• по электронной почте: pasttxx)k@piter.com;
• на нашем сайте: www.piter.com;
• по почте: 197190, Санкт-Петербург, а/я 127 ООО «Питер Мейл».
П ри о ф о р м л ен и и з а к а з а у ка ж и те :
• ваш регистрационный номер (если выявляетесь членом клуба), фамилию, имя, отчество, телефон,
факс, e-mail;
• почтовый индекс, регион, район, населенный пункт, улицу, дом, корпус, квартиру;
• название книги, автора, количество заказываемых экземпляров.
пзалгепьскпЛ а о м
О&ППТЕР WWW P IT E R .C O M
С&ППТЕР
Нет времени
www.piter.com
РОССИЯ
Санкт-Петербург м. «Выборгская., Б Саикхмиееский п р „ д. 29а
тел./факс: (812) 703-73-73,703-73-72: e -m a i sales@piter.com
УКРАИНА
Харьков ул. Суздальские ряды, д. 12. офис 10: тел.: (1038057)751-10-02
758-41-45; факс: (1038057) 712-27-05: e-m ai pier@WHfkov.piter.com
БЕЛАРУСЬ
Минск ул. Притыцкого, д. 34, офис 2; тел факс: (1037517) 201-48-79, 201-48-81
e-mail: gv@minsk.pier.com
К н и га , вы ходящ ая уж е в 4 -м и з д а н и и , по свя щ ен а с т р у к т у р н о й о р га н и з а ц и и
ком пь ю тер а и отраж ает ре во л ю ц и о н н ы е и зм ен ен и я, п р о и с х о д я щ и е в области
а п п а р а т н о го обе спечен и я, в ча с тн о с ти стрем ительны й п е р е хо д от о д н о п р о ц е с с о р н ы х
си сте м к м н ого яд е рн ы м м и к р о п р о ц е с с о р а м . В и з д а н и и п о д р о б н о описы вается
а р х и те кт у р а ко м пь ю те р а и устр о й с т в о в сех его к о м п о н е н т о в : п р о ц е ссо р о в , бл о ко в
пам яти, сре д ств в в о д а -в ы в о д а и хра н ен и я д а н н ы х. О тл ичительной о со б е н н о стью
к н и г и является д е м о н стр а ц и я в за и м о д е й стви й м е ж д у а п пар атн ы м и сре д ств ам и
и си сте м н ы м п р о гр а м м н ы м об е спе ч е н и е м . О собое вн и м а н и е уделяется м н ого яд е рн ы м
вы числительны м си сте м а м и па р а л л е л ь но м у п р о гр а м м и р о в а н и ю . М н о го ч и сл е н н ы е
у п р а ж н е н и я и за д а чи , п р и в о д и м ы е после к а ж д о й темы, п о м о га ю т за кр е п и ть м атериал.
- —
Тема: А р хи те ктур а ком пью тер а / Уровень пользователя: опытный
С ^П П ТЕ Р
Заказ книг:
197198 Самкт ПетедЛург, а.я Уг7, теп.: (812) 703-73 74 pObtbOOKOpiter com
61093 Харьков 93 aJn 9130 тел.. (057) 756-41-45. 751-10 02 pHerVkhBfkrtv рЛвг со«п