Анти-оптимизация: поиск самого медленного кода
В то время как инженеры Intel и AMD стремятся ускорить процессоры, исследователь Christopher Domas (известный в GitHub как @xoreaxeaxeax) пошел по обратному пути. Он создал проект CPU Deoptimization — своеобразный «Зал позора» для инструкций x86, цель которого — найти команду, выполняющуюся максимально долго. Это не просто хакерская забавa: анализ крайних случаев помогает понять архитектурные узкие места и пределы производительности современных CPU.
Рекордсмен: fxrstor64 и 198 миллиардов циклов
Абсолютным победителем стала инструкция fxrstor64, предназначенная для восстановления состояния регистров SIMD (ширина 512 бит). В стандартных условиях она работает быстро, но Домас смог искусственно замедлить её до абсурдных значений, используя три этапа:
- Поиск узкого места: С помощью собственного инструмента mmiotic исследователь нашел область с высокой задержкой во внутренней шине PCIe.
- Нагрузка на MMIO: Был инициирован загрузочный запрос 512-байтового состояния из Memory-Mapped I/O, что заняло 74 млрд циклов (23 секунды).
- Голодание шины: Ключевой шаг — параллельная серия 4-байтных чтений из другого регистра с высокой задержкой. Это перегрузило корневой комплекс PCIe, заставив инструкцию fxrstor64 ждать в очереди за «бесполезными» операциями.
Итоговый результат: 198 002 498 236 циклов или ровно 62 секунды на процессоре Intel Core i7-8559U.
Другие участники «Зала позора»
Помимо главного аутсайдера, проект выявил интересные особенности других архитектур. Например, на старом процессоре VIA Eden инструкция rdmsr (чтение специфического регистра) показала аномально высокую задержку из-за использования недокументированного регистра 0x133. Ниже приведена сводка по зафиксированным рекордам медлительности.
| Инструкция | Процессор | Задержка (циклы) | Время выполнения | Причина замедления |
|---|---|---|---|---|
| fxrstor64 | Intel Core i7-8559U | 198 002 498 236 | 62 секунды | Перегрузка шины PCIe и очередь MMIO-запросов |
| rdmsr | VIA Eden (embedded) | 161 602 | 202 мкс | Доступ к недокументированному регистру 0x133 |
Почему это важно для индустрии?
Проект демонстрирует, что производительность зависит не только от тактовой частоты, но и от взаимодействия инструкций с подсистемой памяти и шинами. Домас планирует расширить проект на архитектуры ARM и RISC-V. Важно отметить, что все тесты проводились на «чистом» железе без модификаций, а результаты нормализованы по базовой частоте процессора. Единственное правило: оценивается выполнение строго одной инструкции без прерываний и эмуляции.
Эксперимент также напоминает о проекте movfuscator — компиляторе C, который использует только инструкцию пересылки данных (mov), доказывая, что даже самые простые команды могут стать «бутылочным горлышком» при неправильном контексте выполнения.
Источник: Tom's Hardware ↗
