Министерство образования и науки Российской Федерации НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ЭФФЕКТИВНОЕ ПРОГРАММИРОВАНИЕ СОВРЕМЕННЫХ МИКРОПРОЦЕССОРОВ Утверждено Редакционно-издательским советом университета в качестве учебного пособия НОВОСИБИРСК 2014 1 УДК 004.31-181.48(075.8) Э 949 Коллектив авторов В.П. Маркова, С.Е. Киреев, М.Б. Остапкевич, В.А. Перепелкин Рецензенты: д-р техн. наук, профессор, Я.И. Фет канд. техн. наук, доцент В.Д. Корнеев Работа подготовлена на кафедре параллельных вычислительных технологий Э 949 Эффективное программирование современных микропроцессоров: учеб. пособие / В.П. Маркова, С.Е. Киреев, М.Б. Остапкевич, В.А. Перепелкин. <...> ЭФФЕКТИВНОЕ ПРОГРАММИРОВАНИЕ СОВРЕМЕННЫХ МИКРОПРОЦЕССОРОВ Учебное пособие Редактор И.Л. <...> В настоящем учебном пособии основное внимание уделяется: рассмотрению особенностей организации современных компьютеров, которые влияют на скорость выполнения программ; подходам к разработке программ с учетом организации компьютера. <...> Для лучшего усвоения теоретического материала и формирования базы практических навыков программирования с учетом организации компьютера в пособии имеется несколько практических работ. <...> Микроархитектура определяет структуру компьютера, а именно набор компонентов компьютера, их связи, функциональные возможности каждого компонента (например, количество арифметико-логических устройств, число стадий конвейера, размер аппаратного регистрового файла или разрядность шины между оперативной памятью и процессором). <...> В первых микроархитектурах (8086, 8088) отсутствовали кэш-память, виртуальная память, команды выполнялись последовательно на одном конвейере. <...> В микроархитектуре i386 введены кэш-память и страничная виртуальная память. <...> В i486 добавлен конвейер, позво4 ляющий завершать выполнение одной команды на каждом такте даже для команд, которые выполняются в течение нескольких тактов. <...> В микроархитектуре P6 были добавлены функциональные <...>
Эффективное_программирование_современных_микропроцессоров.pdf
Министерство образования и науки Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ЭФФЕКТИВНОЕ
ПРОГРАММИРОВАНИЕ
СОВРЕМЕННЫХ
МИКРОПРОЦЕССОРОВ
Утверждено
Редакционно-издательским советом университета
в качестве учебного пособия
НОВОСИБИРСК
2014
1
Стр.1
УДК 004.31-181.48(075.8)
Э 949
Коллектив авторов
В.П. Маркова, С.Е. Киреев, М.Б. Остапкевич, В.А. Перепелкин
Рецензенты:
д-р техн. наук, профессор, Я.И. Фет
канд. техн. наук, доцент В.Д. Корнеев
Работа подготовлена
на кафедре параллельных вычислительных технологий
Э 949 Эффективное программирование современных микропроцессоров:
учеб. пособие / В.П. Маркова, С.Е. Киреев, М.Б. Остапкевич,
В.А. Перепелкин. – Новосибирск: Изд-во НГТУ, 2014. – 148 с.
ISBN 978-5-7782-2391-2
Пособие посвящено изучению особенностей архитектуры современных микропроцессоров,
которые влияют на скорость выполнения прикладных программ. Для
закрепления теоретического материала по курсу «Архитектура ЭВМ и ВС» предлагаются
практические работы. Их цель – сформировать практические навыки разработки
эффективных программ с учетом организации иерархической памяти, наличия
векторных расширений и других особенностей архитектуры.
Учебное пособие предназначено для студентов I курса факультета ФПМИ направлений
010400.62 «Прикладная математика и информатика» и 010500.62 «Математическое
обеспечение и администрирование информационных систем».
ЭФФЕКТИВНОЕ ПРОГРАММИРОВАНИЕ
СОВРЕМЕННЫХ МИКРОПРОЦЕССОРОВ
Учебное пособие
Редактор И.Л. Кескевич
Выпускающий редактор И.П. Брованова
Корректор И.Е. Семенова
Дизайн обложки А.В. Ладыжская
Компьютерная верстка А.В. Сухарева
Подписано в печать 07.02.2014. Формат 60 84 1/16. Бумага офсетная. Тираж 200 экз.
Уч.-изд. л. 8,6. Печ. л. 9,25. Изд. № 180/13.
Заказ № 238. Цена договорная
Отпечатано в типографии
Новосибирского государственного технического университета
630073, г. Новосибирск, пр. К. Маркса, 20
УДК 004.31-181.48(075.8)
© Коллектив авторов, 2014
ISBN 978-5-7782-2391-2
2
© Новосибирский государственный
технический университет, 2014
Стр.2
ОГЛАВЛЕНИЕ
1. Введение в архитектуру компьютера ................................................. 3
1.1. Определение архитектуры и организации компьютера ................ 3
1.2. Архитектурные принципы построения компьютера
фон Неймана ...................................................................................... 5
1.3. Компьютер фон Неймана, его узкие места и усовершенствования
...................................................................................................... 6
1.4. Основные компоненты современного компьютера ..................... 10
Контрольные вопросы ........................................................................... 12
2. Организация подсистемы памяти .................................................... 13
2.1. Типичная схема иерархии памяти в современном компьютере
............................................................................................ 16
2.2. Организация кэш-памяти ............................................................... 18
2.2.1. Аппаратная и программная предвыборка ........................... 20
2.2.2. Алгоритмы отображения адресов оперативной памяти
в строки кэш-памяти ............................................................ 23
2.3. Примеры работы с кэш-памятью ................................................... 29
2.3.1. Обработка матриц по строкам ............................................. 29
2.3.2. Обработка матриц по столбцам с буксованием ................. 31
2.3.3. Обработка матриц по столбцам без буксования ................ 33
2.4. Виртуальная память ........................................................................ 34
Контрольные вопросы ........................................................................... 37
3. Введение в параллельную обработку ............................................... 39
3.1. Конвейерное выполнение ............................................................... 39
3.2. Пространственный параллелизм ................................................... 45
3.2.1. Параллелизм на уровне данных ........................................... 45
3.2.2. Параллелизм на уровне команд ........................................... 49
3.2.3. Параллелизм на уровне потоков .......................................... 54
3.3. Пример процессора с различными видами параллелизма .......... 56
Контрольные вопросы ........................................................................... 58
4. Инструментальные средства разработки программ ..................... 59
4.1. Оптимизирующий компилятор ...................................................... 59
4.1.1. Уровни оптимизации компилятора GCC ............................ 61
4.1.2. Примеры оптимизирующих преобразований
в компиляторе GCC .............................................................. 63
4.2. Инструментальные средства отладки программ .......................... 66
4.2.1. Принципы работы отладчика ............................................... 66
147
Стр.147
4.2.2. Отладчик GNU GDB ............................................................. 69
4.3. Средства для измерения времени выполнения программы ........ 72
4.3.1. Методика измерения времени выполнения прикладной
программы ............................................................................. 72
4.3.2. Системные таймеры .............................................................. 76
4.3.3. Способы получения показаний некоторых таймеров........ 78
Контрольные вопросы ........................................................................... 82
5. Рекомендации по эффективному программированию с учетом
особенностей подсистемы памяти ......................................................... 83
5.1. Роли программиста, компилятора и компьютера в оптимизации
программ и их выполнения ............................................................ 83
5.2. Эффективное программирование с учетом памяти ..................... 86
5.2.1. Данные на границе блоков памяти ...................................... 87
5.2.2. Разреженное размещение данных в памяти ....................... 89
5.2.3. Данные, смещенные на величину, кратную размеру
банка кэш-памяти ................................................................. 92
5.2.4. Нарушение локальности во времени обращений
к памяти ................................................................................. 96
5.2.5. Неупорядоченный обход данных в памяти ........................ 97
Контрольные вопросы ........................................................................... 99
Приложение 1. Средства разработки программ ................................... 101
П1.1. Определение времени работы прикладных программ ............ 101
П1.2. Изучение оптимизирующего компилятора.............................. 103
Приложение 2. Эффективное программирование ............................... 105
П2.1. Влияние кэш-памяти на время обработки массивов ............... 105
П2.2. Измерение степени ассоциативности кэш-памяти .................. 110
П2.3. Устранение буксования кэш-памяти ........................................ 114
П2.4. Совместный доступ нескольких потоков к данным
в общей памяти ............................................................................. 118
Приложение 3. Введение в архитектуру x86/x86-64 ........................... 123
Приложение 4. Векторизация вычислений .......................................... 128
Список терминов ...................................................................................... 135
Библиографический список .................................................................... 145
148
Стр.148