Планирование инструкций
-
Планирование команд в информатике
- Оптимизация компилятора для улучшения параллелизма и производительности.
- Избегает сбоев в конвейере команд, изменяя порядок инструкций.
- Избегает незаконных и семантически неоднозначных операций.
-
Сбои в конвейере и зависимости данных
- Сбои могут быть вызваны структурными, данными и управлением проблемами.
- Зависимости данных определяют порядок выполнения инструкций.
- Существуют три типа зависимостей: чтение после записи, запись после чтения и запись после записи.
- Чтение за чтением не ограничивает порядок выполнения, но полезно для скалярной замены элементов массива.
-
Графы зависимостей и топологическая сортировка
- Граф зависимостей представляет собой ориентированный ациклический граф.
- Топологическая сортировка — это алгоритм для построения допустимого расписания команд.
- Задержка зависимости — это количество тактовых циклов, необходимых для выполнения команды без сбоев.
-
Алгоритмы и эвристики планирования
- Используются эвристики для прогнозирования и повышения приоритета кандидатов на планирование.
- Планирование может выполняться до или после выделения регистров, с преимуществами и недостатками каждого подхода.
-
Типы планирования команд
- Локальное планирование ограничивает перемещение инструкций базовым блоком.
- Глобальное планирование позволяет перемещать инструкции за пределы блоков.
- Планирование по модулю чередует итерации внутреннего цикла для повышения параллелизма.
- Планирование трассировки оптимизирует путь потока управления, выполняемый чаще всего.
- Планирование суперблоков упрощает работу генератора кода, не объединяя пути потока управления на «боковых входах» трассировки.
-
Примеры компиляторов и источники информации
- GCC и LLVM предоставляют информацию о задержках и использовании портов для планирования команд.
- Агнер Фог и InstLatx64 собирают данные для архитектуры x86.
- LLVM-exegesis предоставляет информацию о процессорах, отличных от x86.
-
Рекомендации и дальнейшее чтение
- Упоминаются дополнительные темы, такие как предикация ветви, генерация кода и управление процессом выполнения.