@Pantene742

Может ли процессор изменять порядок инструкций в программе?

Читаю статью на хабре и тут напоролся на странные строки,
автор инженер из Mozilla(автор оригинала), проверял пишет то же самое на английском. О том что ->
Для того, чтобы использовать ресурсы системы эффективно, множество компиляторов и процессоры меняют порядок выполнения операций.
Насчет компиляторов поверю, но вот процессора ??? как ??? максимум "процессор" виртуальной машины, так как она может спарсить байт код перед выполнением и трансляцией его частей в инструкции процессора не лету. Но вот возможно ли такое, чтоб железо анализировало программу и решало: "ой давай-ка я за следующий такт исполню ту и вон ту инструкцию, так как часть схемы будет простаивать, если буду делать всё по порядку". (Для анализа надо сделать миллион инструкций!!!!) Или это реализовано как-то по другому ?
dr_L4TrqRQaPT1f7hGEIrA.jpeg
  • Вопрос задан
  • 406 просмотров
Решения вопроса 4
@Mercury13
Программист на «си с крестами» и не только
А там нет такого уж сложного анализа. Процессор преобразует каждую команду x86 в команду VLIW (Very Long Instruction Word — что делать каждому из блоков процессора), а затем пробует спрессовывать эти команды вместе. Насколько мне известно, первым на x86 такой механизм был предложен в процессоре Transmeta Crusoe, за пару лет до Intel.

А ещё подобное налаживание зависимостей позволяет процессору делать что-то сразу же, а не ждать данных из медленной памяти. А ещё — патчить ошибки процессора :). Не помню, запатчили так Meltdown или нет.

Подсистема памяти тоже может так работать — на x86 я не могу привести примеры, но представьте себе: одну строку кэша сбросило в память, а вторую держит.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Насчет компиляторов поверю, но вот процессора ??? как ???

Читать тут, лучше сразу английскую версию.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега C++
software engineer
Может, если это заложено на уровне архитектуры.
В современных процессорах есть даже возможность парралельно выполнять условие и цепочки при да/нет, а потом когда условие выполнилось, взять готовый результат нужной цепочки.

В общем, современные процессоры имеют довольно сложную внутреннюю логику. И это одна из причин, почему компилятор может сгенерировать код лучше человека - те, кто пишут современные компиляторы, не только вычитывают последние спецификации процессоров, но зачастую общаются с инженерами в двухстороннем порядке.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы