В чем преимущество планирования инструкций компилятора по сравнению с динамическим планированием?

В настоящее время суперскалярные процессоры RISC обычно поддерживают выполнение не по порядку, с предсказанием переходов и спекулятивным выполнением. Они планируют работу динамически.

В чем преимущество планирования команд компилятора по сравнению с динамическим планированием внеочередного ЦП? Имеет ли значение статическое планирование во время компиляции вообще для ЦП, вышедшего из строя, или только для простых ЦП?

Кажется, что в настоящее время большинство программных инструкций по планированию сосредоточено на VLIW или простых процессорах. Страница планирования вики GCC также не проявляет особого интереса к обновлению алгоритмов планирования gcc.

2 ответа

Решение

Преимущество статического (компиляторного) планирования:

  • Нет ограничений по времени, поэтому можно использовать очень сложные алгоритмы;
  • Нет ограничений в окне инструкций. Это позволяет, например, обмениваться инструкцией с целым циклом вызова функции.

Преимущество динамического (процессорного планирования):

  • Позаботьтесь о реальной среде (кеш, арифметический блок занят из-за другой гиперпотоки);
  • Не заставляйте перекомпилировать код для каждого обновления архитектуры.

Это все, что я могу думать сейчас.

Во-первых, я должен отметить, что текущие архитектуры RISC сначала компилируются, затем выполняют перепланирование, потому что команды сборки "высокого уровня" компилируются в меньшие команды RISC. По крайней мере, это верно для архитектуры x86/x64.

Тогда мы можем представить цикл выполнения следующим образом: компилировать - оптимизировать / перепланировать - уменьшить масштаб - компилировать - оптимизировать / перепланировать.

Такого рода ответы на вопрос, компилятор имеет гораздо более широкую область видимости в приложении, поэтому он в основном оптимизируется на макроуровне (блоки команд приложения), в то время как процессор в основном оптимизируется на микроуровне (блоки команд RISC).

Другие вопросы по тегам