Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Глава 1. Компьютерные абстракции и технологии . . . . . . . . . . . . . . . . . . . . 18
1.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2. Что находится ниже вашей программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3. Что скрывается под крышкой корпуса компьютера . . . . . . . . . . . . . . . . . . . . 30
1.4. Производительность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.5. Барьер потребляемой мощности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
1.6. Коренное изменение: переход от одного к нескольким процессорам . . . . 62
1.7. Реальное оборудование: производство и оценочное тестирование
AMD Opteron X4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.8. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.9. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.10. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Глава 2. Инструкции: язык компьютера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.2. Операции, осуществляемые компьютерным оборудованием . . . . . . . . . . . 99
2.3. Операнды компьютерного оборудования . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.4. Числа со знаком и без знака . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.5. Представление инструкций в компьютере . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
2.6. Логические операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
2.7. Инструкции для принятия решения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
2.8. Поддержка процедур в компьютерном оборудовании . . . . . . . . . . . . . . . . . 134
2.9. Общение с людьми . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.10. Адресация MIPS для 32-разрядных непосредственных значений
и адресов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
2.11. Параллелизм и инструкции: синхронизация . . . . . . . . . . . . . . . . . . . . . . . . . 159
2.12. Трансляция и запуск программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
2.13. Объединение всего ранее рассмотренного в упражнении
по сортировке на языке С . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
2.14. Сравнение массивов и указателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
2.15. Реальное оборудование: инструкции ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
2.16. Реальное оборудование: инструкции x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
2.17. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
2.18. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
2.19. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Ответы на вопросы для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Глава 3. Арифметика для компьютеров . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
3.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
3.2. Сложение и вычитание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
3.3. Умножение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
3.4. Деление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
3.5. Числа с плавающей точкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
3.6. Параллелизм и компьютерная арифметика: ассоциативность . . . . . . . . . . 297
3.7. Реальное оборудование: вычисления чисел с плавающей точкой в x86 299
3.8. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
3.9. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
3.10. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Ответы на вопросы для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Глава 4. Процессор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
4.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
4.2. Соглашения по логическому проектированию . . . . . . . . . . . . . . . . . . . . . . . . 337
4.3. Создание операционного блока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
4.4. Простая схема реализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
4.5. Обзор конвейеризации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
4.6. Операционный блок и система управления, оснащенные конвейером . . 381
4.7. Конфликты данных: сравнение препровождения данных и задержки . . . . 403
4.8. Конфликты управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
4.9. Исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
4.10. Параллелизм и расширенный параллелизм на уровне инструкций . . . . . . 435
4.11. Реальное оборудование: конвейер AMD Opteron X4 (Barcelona) . . . . . . . . . 451
4.12. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
4.13. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
4.14. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Ответы на вопросы для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Глава 5. Объемная и быстродействующая: анализ иерархии памяти . . . . 498
5.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
5.2. Основы кэш-памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
5.3. Измерение и повышение производительности кэш-памяти . . . . . . . . . . . . 525
5.4. Виртуальная память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
5.5. Общая среда для иерархий памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
5.6. Виртуальные машины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
5.7. Использование конечного автомата для управления простой
кэш-памятью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
5.8. Параллелизм и иерархии памяти: целостность данных в кэш-памяти . . . 592
5.9. Реальное оборудование: иерархии памяти AMD Opteron X4 (Barcelona)
и Intel Nehalem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
5.10. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
5.11. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
5.12. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Ответы на вопросы для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
Глава 6. Хранение информации и другие темы, связанные
с вводом-выводом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
6.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
6.2. Безотказность, надежность и готовность . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
6.3. Дисковое запоминающее устройство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
6.4. Флэш-накопители . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
6.5. Соединение процессоров, памяти и устройств ввода-вывода . . . . . . . . . . 644
6.6. Организация интерфейса устройств ввода-вывода с процессором,
памятью и операционной системой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
6.7. Оценки производительности ввода-вывода: примеры, связанные
с дисками и файловыми системами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
6.8. Разработка систем ввода-вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
6.9. Параллелизм и ввод-вывод: избыточные массивы недорогих дисков . . . 664
6.10. Реальное оборудование: сервер Sun Fire x4150 . . . . . . . . . . . . . . . . . . . . . . 672
6.11. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
6.12. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
6.13. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
Ответы на вопросы для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Глава 7. Многоядерность, мультипроцессорные системы и кластеры . . . 697
Мультипроцессор или кластерная организация . . . . . . . . . . . . . . . . . . . . . . . . . . 697
7.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
7.2. Сложности создания программ, выполняемых в параллельном режиме . 701
7.3. Мультипроцессоры с общей памятью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
7.4. Кластеры и другие мультипроцессоры с передачей сообщений . . . . . . . . 708
7.5. Аппаратная многопоточность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
7.6. SISD, MIMD, SIMD, SPMD и использование векторов . . . . . . . . . . . . . . . . . . 717
7.7. Введение в графические процессоры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
7.8. Введение в топологию мультипроцессорных сетей . . . . . . . . . . . . . . . . . . . 731
7.9. Контрольные задачи для мультипроцессоров . . . . . . . . . . . . . . . . . . . . . . . . 735
7.10. Roofline: Простая модель производительности . . . . . . . . . . . . . . . . . . . . . . . 738
7.11. Реальное оборудование: выполнение контрольных задач для четырех много-
ядерных процессоров с использованием модели Roofline . . . . . . . . . . . . . 748
7.12. Заблуждения и недоразумения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
7.13. Заключительные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
7.14. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
Ответы на вопросы для самопроверки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777