Задать вопрос

Чем отличается выполнение программы на x86 процессорах 2003 и 2024 года выпуска?

Кроме более быстрого выполнения команд и набором доп инструкций(которые программой не используются)

1.Есть ли принципиальная разница для работы программы на процессоре х86 разных годов?

2.Нужны ли разные компиляторы для разных процессоров архитектуры х86?
  • Вопрос задан
  • 211 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@pfg21
ex-турист
1. нет, если в коде отсутствуют команды из расширений архитектуры.
да, если в коде присутствуют команды расширений, то на процессоре без них код просто не заработает.
2. да. для использования расширений архитектуры компилятор+библиотеки должен их поддерживать.
Ответ написан
Комментировать
TrueBers
@TrueBers
Гуглю за еду
Конечно разница есть. Не просто ж так вкладывают сотни миллиардов в исследования.
Даже если взять 2 процессора одинаковой частоты и с одинаковым количеством ядер, будет множество отличий.

1. Существует конвеер исполнения инструкций. Который состоит из портов выполнения. С каждым новым поколением процессора этот конвеер допиливают. Улучшают синхронизации кешей, меняют в целом принцип работы кешей и порядок выполнения инструкций. Добавляют новые порты. Перепиливают микрокод для инструкций, используя эти изменения.
2. Переупорядочивание выполнения инструкций. Каждый новый проц что-то да делает с этим. Улучшают сам алгоритм переупорядочивания, избавления потоков выполнения от лишних зависимостей данных, увеличивают внутренние буферы, используемые для этих целей. В итоге растёт retired instruction per clock.
3. Предсказатели переходов постоянно совершенствуются, меньше тупняков конвеера дают, меньше сбросов кеша.
4. Декодер инструкций. Fetch-буфер растёт, буфер декодинга растёт, буфер переупорядочивания растёт.
5. Интерфейсы взаимодействия с памятью тоже совершенствуются. Одноканальный DDR из 2003-го, который требует отдельного контроллера памяти на северном мосту, и мноканальный DDR6 из 2025-го -- мягко говоря, вещи из разных миров. Не только память должна быть быстрой, но и процессор должен уметь общаться с этой памятью. В конце нулевых контроллер памяти начали встраивать в сам процессор, это позволило снизить задержки доступа к памяти в разы.

А ещё много-много тонкостей, которые не афишируются публично и держатся в коммерческой тайне.

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

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

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