Первый модуль
- Архитектуры RISC и их основные свойства.
- Архитектуры VLIW и их основные свойства.
- Архитектуры EPIC и их основные свойства.
- Архитектуры CISC и их основные свойства.
- Варьируемый, регулярный и фиксированный форматы инструкций.
- Ортогональность регистров.
- Способы адресации аргументов. Ортогональность способов адресации.
- Вращение регистров.
- Архитектуры с «открытым» конвейером.
- Арность команд. Команды с перекрытием.
- Предикация. Удаление коротких условных переходов.
- Архитектуры типа Load/Store.
- Диспетчеризация команд в разных типах архитектур, связки команд.
Второй модуль
- Абсолютная модель программы.
- Перемещаемая программа. Неразрещённые ссылки.
- Относительная модель программы.
- Явная сегментация.
- Неявная сегментация.
- MAS (Multiple address spaces).
- SAS (Single address spaces).
- Омонимы и синонимы в системах MAS.
- Разделение данных между задачами в системах MAS.
- Принципы PIC и COW компоновки динамических библиотек в системах MAS.
- GP-относительная адресация, межмодульные вызовы и указатели на функции в системах SAS.
- Оптимизация использования конвейра процессора путём развёртывания циклов. Выбор глубины развёртывания. Роль количества регистров. Развёртывание вложенных циклов. Сокращение обращений в память.
- Оптимизация использования конвейра процессора путём перепланирования циклов. Пролог, ядро и эпилог перепланированного цикла.
- Типы архитектурных механизмов предсказания переходов. Оптимизация использования механизма предсказаний процессора путём перепланирования условных операторов. Профилирование. Учёт частотных характеристик условных операторов. Выделение трасс выполнения.
- Оптимизация использования кэш-памяти процессора путём планирования схемы обращений в оперативную память. Проблемы при использовании кэш-памяти. Анализ алгоритмов на эффективность/повторность использования кэш-памяти. Преобразование потоковых алгоритмов в блочные (на примере алгоритмов линейной алгебры).
Вопросы итогового контроля
- Понятие «архитектура набора команд» (ISA), классификацию машинных архитектур с точки зрения набора команд: CISC, RISC, VLIW, EPIC. Предикация, арность команд, выравнивание кода.
- Модели среды исполнения, модели исполняемой программы.
- Классификация моделей исполняемых программ, абсолютная программа.
- Классификация моделей исполняемых программ, относительная программа.
- Классификация моделей исполняемых программ, сегментированая программа. Явная и неявная сегментация.
- Машинно-зависимые аспекты реализации системы памяти: выравнивание, оптимизация структурных типов данных, порядок байтов, атомарность доступа.
- Машинно-зависимые аспекты реализации системы памяти: кэш, трансляция виртуальных адресов, буфер трансляции.
- Системы с множественными адресными пространствами MAS. Поддержка перемещаемых программ в MAS. Позиционно-независимый код или «копирование при записи».
- Системы с единственным адресным пространством SAS.
- Машинно-зависимые аспекты планирования операций: конвейер, зависимости по данным, порядок команд, развертывание циклов.
- Машинно-зависимые аспекты планирования операций: конвейер, зависимости по управлению, политики предсказания переходов, планирование трассы исполнения программы, профилирование.
- Принципы построения исполняемой программы: таблицы векторов перехода, разрешение внешних ссылок, GOT.
- Принципы компоновки исполняемой программы: статическая, динамическая, позднее связывание (ленивая загрузка).
- Архитектура набора команд ISA и проблема эффективного исполнения кода: внеочередное исполнение команд, параллельное исполнение команд, команды с перекрытием, роль количества регистров, глобальные зависимости.
- Структуры (базы) данных ассемблера. Алгоритмы распознавания ключевых слов и идентификаторов. Бинарный поиск. Хеширование.
- Методы оптимизации распределения регистров. Граф зависимостей, граф интерференций, распределение регистров на основе раскраски графа.
- Алгоритмы работы ассемблеров. Многопроходной ассемблер. Глобальная оптимизация на уровне компоновщика.
- Макропроцессоры.
- Редакторы связей. Глобальная оптимизация.
- Загрузчики.
- Компиляторы, их структура. Back-end и Front-end компилятора. Промежуточные языки, RTL.
- Кросс-платформная разработка программ.