Вы когда-нибудь задумывались, почему ваш смартфон работает на процессоре ARM, а мощный игровой ПК — на x86? Эти две архитектуры играют ключевую роль в современных технологиях, но используются в разных устройствах. ARM-процессоры применяют в смартфонах, планшетах, умных часах, MacBook и даже некоторых серверах благодаря низкой потребляемой мощности. Процессоры на x86 известны своей производительностью и гибкостью, что делает их идеальными для сильных ПК и серверов.
В этой статье мы разберем, чем отличаются эти архитектуры, как они работают и почему ARM стал популярным выбором для мобильных устройств, а x86 сохраняет позиции в мире мощных ПК и серверных решений.
Используйте навигацию, если не хотите читать текст полностью:
→ Краткий обзор архитектур ARM и x86
→ Структурные различия между ARM и x86
→ Применение в различных устройствах и приложениях
→ Заключение
Краткий обзор архитектур ARM и x86
Архитектуры процессоров ARM и x86 — две различные философии проектирования в компьютерной инженерии. Каждая из них имеет свои структурные характеристики, наборы команд и области применения.
Архитектура ARM разработана Acorn Computers в 1980-х годах. Она основана на принципах вычислений с упрощенным набором инструкций (RISC) и славится энергоэффективностью и преимуществами производительности на ватт. ARM стала популярным решением для мобильных устройств, встраиваемых систем и приложений.
Архитектура x86 следует парадигме вычислений с комплексным набором инструкций (CISC). Она доминирует в ПК и ноутбуках, а также в серверных средах благодаря своей способности обрабатывать сложные инструкции и обширной поддержке устаревшего программного обеспечения.
Одним из главных аспектов при рассмотрении архитектур является иерархия памяти. Она определяет скорость доступа к данным и эффективность, играя ключевую роль в обеспечении баланса между производительностью и энергопотреблением.
Важность иерархии памяти возросла с ростом производительности процессоров. На рисунке показаны изменения производительности одного процессора во времени, с учетом исторических улучшений скорости доступа к основной памяти.
Источник.
Линия процессора показывает среднее количество запросов к памяти в секунду, а линия памяти — увеличение количества обращений к DRAM в секунду. В реальности частота запросов процессора неодинакова, а система памяти обычно имеет несколько банков DRAM и каналов.
В 2000 году время доступа к памяти DRAM составляло около 100 наносекунд, а в 2020 — уже более 200. Однако значительного улучшения производительности отдельных процессоров за это время не произошло. Следовательно, разрыв в пропускной способности между процессорами и DRAM хоть и продолжил расти, но этот рост замедлился. Основная причина того, что разрыв все же увеличивается — рост числа ядер в процессорах. Чем их больше, тем больше и разрыв.
Каждое ядро высокопроизводительных процессоров для настольных ПК, на примере Intel® Core® i7 6700, может обрабатывать два запроса к памяти за один такт. Благодаря четырем ядрам и тактовой частоте 4,2 ГГц процессор i7 может генерировать пиковые 32,8 миллиарда обращений к памяти с 64-битными данными в секунду, в дополнение к пиковой потребности в примерно 12,8 миллиарда ссылок на 128-битные инструкции. Его общая пиковая пропускная способность составляет 409,6 ГБ/с. Эта невероятная величина достигается за счет многопортовой и конвейерной обработки кэшей.
Структурные различия между ARM и x86
Наборы инструкций
Основные различия между ARM и x86 заключаются в их наборах инструкций и парадигмах выполнения. Процессоры ARM используют набор инструкций, основанный на Reduced Instruction Set Computing (RISC). Этот подход к проектированию подчеркивает простоту и содержит меньше инструкций, которые могут быть выполнены за один такт. Это обеспечивает эффективное декодирование и выполнение, что приводит к повышению производительности за такт и снижению энергопотребления.
Процессоры x86 используют архитектуру Complex Instruction Set Computing (CISC), характеризующуюся большим набором инструкций. Многие из этих инструкций требуют выполнения нескольких тактовых циклов, что увеличивает время декодирования и энергопотребление. Однако эта сложность также обеспечивает больше возможностей команд, что делает процессоры x86 хорошо подходящими для сложных задач и широкой совместимости программного обеспечения.
Эти различия влияют на эффективность работы: архитектура загрузки-хранения ARM оптимизирует скорость выполнения простых команд, в то время как способность x86 выполнять операции непосредственно в памяти благоприятствует сложным вычислительным задачам.
Инструкции CISC могут быть любой длины. Максимальная теоретическая длина инструкции x86 может быть бесконечной, но на практике не превышает 15 байт. Инструкции RISC имеют ограниченную длину. Источник.
Наборы команд
Источник.
Различия в наборах инструкций обуславливают также разницу в способах выполнения команд. Для RISC характерно использование простых и однотипных команд, тогда как CISC предлагает более сложные и разнообразные.
Вот как можно охарактеризовать наборы команд для ARM.
- Ограниченное количество команд. RISC-архитектуры обычно используют небольшое количество базовых инструкций, что позволяет ускорить их выполнение. Каждая инструкция предназначена для выполнения простой операции.
- Единая длина. Все инструкции в архитектуре RISC имеют одинаковую длину, что упрощает процесс их декодирования и способствует более высокой скорости выполнения.
- Конвейеризация. Архитектуры RISC разработаны для облегчения конвейеризации команд, где несколько этапов инструкций обрабатываются одновременно, тем самым повышая общую производительность. Поскольку каждая команда занимает одинаковый интервал времени для выполнения, конвейеризация более эффективна в системах RISC.
- Большое количество регистров. Чтобы минимизировать необходимость в более медленном доступе к памяти, RISC-системы используют большое количество регистров. Это позволяет командам работать непосредственно с данными, хранящимися в регистрах, а не обращаться к памяти часто.
- Гарвардская архитектура. RISC обычно использует гарвардскую модель памяти, которая разделяет пути хранения и передачи сигналов для инструкций и данных, что еще больше повышает эффективность обработки.
- Оптимизация компилятора. RISC-системы в значительной степени полагаются на сложные компиляторы для оптимизации кода и эффективного управления регистрами. Простота набора команд облегчает компиляторам генерацию эффективного машинного кода.
Источник.
С другой стороны, архитектура CISC характеризуется сложным набором инструкций, который позволяет выполнять многошаговые операции в рамках одной инструкции.
- Сложные команды. Системы CISC включают в себя широкий спектр сложных инструкций, каждая из которых способна выполнять несколько операций, таких как загрузка, оценка и сохранение данных, в рамках одной инструкции.
- Переменная длина. Инструкции в архитектурах CISC различаются по длине, что может усложнить процесс их декодирования. Блок управления (CU) должен определить длину каждой инструкции и декодировать ее соответствующим образом.
- Несколько тактовых циклов. Если в RISC большинство инструкций выполняются за один тактовый цикл, для выполнения инструкций CISC может потребоваться несколько циклов. Это объясняется сложностью самих инструкций.
- Меньше регистров. Архитектуры CISC обычно имеют меньше регистров по сравнению с RISC. Этот выбор дизайна компенсируется сложными командами, которые могут напрямую манипулировать данными в памяти.
- Простота компиляторов. Хотя инструкции CISC сложнее, они часто упрощают работу компилятора, поскольку одна сложная инструкция может заменить ряд более простых. Это уменьшает размер программы, но может увеличить время выполнения из-за сложности декодирования и выполнения команд.
Открытость архитектуры ARM
Открытость архитектуры ARM позволяет производителям и разработчикам адаптировать процессоры под специфические нужды, добавляя или изменяя компоненты ядра в зависимости от задач. Это гибкость дает, например, возможность создания энергоэффективных и производительных решений для разнообразных устройств — от смартфонов до серверов.
AWS, Alibaba и другие компании разрабатывают собственные чипы на базе ARM. Это позволяет им оптимизировать производительность своих серверов и снижать затраты. Также существуют открытые решения, такие как процессоры Ampere, доступные для тестирования и использования в различных конфигурациях.
В отличие от ARM архитектура х86 является закрытой и патентованной. То есть ее кастомизацию ограничивают лицензии и патенты, а также высокая степень стандартизации и совместимости между различными процессорами. Вместе с тем, патентованные технологии позволяют держать под контролем развитие архитектуры и поддерживать высокие стандарты производительности и безопасности.
Бэкграунд
Со временем набор инструкций x86 эволюционировал, включив в себя многочисленные устаревшие функции для поддержания обратной связи со старым программным обеспечением. Это привело к увеличению сложности архитектуры. Избыточный бэкграунд порой препятствует росту производительности и эффективности проектирования. Например, архитектура x86 расширилась от простых 16-битных инструкций до 32- и 64-битных режимов, а также виртуальной памяти, виртуализации и функций безопасности.
В свою очередь, архитектура ARM хотя и развивалась, сохранила более чистый дизайн, сосредоточившись на сокращении унаследованного «багажа». Например, набор инструкций ARM начинался как 32-битная архитектура, а затем включал 16-битный режим и поддержку 64-битной архитектуры, но она избежала обширного накопления устаревших функций, наблюдаемых в x86.
Использование регистра
Использование и структура регистров также подчеркивают различия между архитектурами ARM и x86. Архитектура x86 включает в себя множество регистров: общего назначения (EAX, EBX и т. д.), специализированных (CS, DS), управляющих (CR0, CR2) и векторных (XMM0, K0).
ARM обычно использует более рационализированный набор регистров, фокусируясь на сокращении количества инструкций, требующих доступ к памяти. Например, в RISC-проекте инструкции, такие как ADD, всегда принимают регистры в качестве операндов. Это упрощает конвейер и может повысить производительность с помощью конвейеризации и управления регистрами.
Производительность и эффективность
Хотя архитектуры ARM и x86 были оптимизированы для соответствующих рынков, фокус на энергоэффективности по сравнению с производительностью различается. Философия дизайна ARM подчеркивает низкое энергопотребление, что делает его идеальным для встраиваемых приложений и мобильных устройств, где энергоэффективность имеет первостепенное значение. Простота набора инструкций способствует этой эффективности, поскольку для их выполнения требуется меньше тактовых циклов.
Процессоры x86 часто оптимизированы для высокой производительности, где вычислительная мощность является ключевым фактором. Сложный набор инструкций обеспечивает широкий спектр вычислительных возможностей и совместимость программного обеспечения. Обратная сторона этого — высокое энергопотребление.
Применение в различных устройствах и приложениях
ARM
Процессоры ARM могут потреблять до 30-50% меньше энергии по сравнению с x86. К тому же они меньше. Например, Snapdragon 8 Gen 2 имеет размер чипа около 16x16 мм. Apple, Qualcomm и Samsung используют процессоры ARM в смартфонах и планшетах, получая выгоду от их более низких требований к питанию и интегрированных функций.
Переход Apple на Apple Silicon на базе ARM в компьютерах Mac подчеркивает растущее присутствие ARM на рынке настольных компьютеров и ноутбуков. Архитектура ARM обеспечивает этим устройствам значительную энергоэффективность и конкурентную производительность, хотя совместимость с приложениями x86 часто требует трансляционных слоев, таких как Rosetta 2.
ARM также проникает на рынки серверов и центров обработки данных. Примером служат серверы ARM01-NVMe Selectel на базе процессоров Ampere Altra, предназначенные для масштабирования облачных инфраструктур и обработки интенсивных рабочих нагрузок. Эти серверы предлагают 128 ядер, поддерживают высокую пропускную способность и энергоэффективность.
Многоядерные серверы с процессорами Ampere Altra оптимизированы для виртуализации, работы с базами данных и контейнерными оркестраторами. Например, облачные серверы с поддержкой Kubernetes позволяют гибко распределять ресурсы и масштабировать приложения, минимизируя затраты на энергопотребление. Этот подход особенно эффективен для предприятий, стремящихся к устойчивому развитию и снижению операционных расходов.
Такие сервера демонстрируют превосходные результаты в различных бенчмарках. Процессоры Ampere Altra Max M128-30 продемонстрировали хорошую производительность. Особенно в тесте mysqlslap — во многом благодаря большому количеству ядер и микроархитектурным оптимизациям. Хотя в ряде случаев они проигрывали x86-процессорам — например, в операциях записи и в одном и двух потоках из-за особенностей архитектуры. Конфиг может стать хорошим компромиссом между стоимостью и производительностью: однопроцессорная система такой стоимости составляет хорошую конкуренцию закоренелым лидерам рынка.
Кроме того, в нагрузках на базе MySQL и Redis серверы ARM превосходят многие традиционные x86 решения, предлагая лучшую производительность на ватт и пониженные энергозатраты, что крайне важно для крупных дата-центров.
Для дополнительных примеров и детальной информации о доступных конфигурациях серверов Selectel на базе ARM, можно посетить официальный сайт. Масштабируемая архитектура ARM хорошо подходит для обработки различных рабочих нагрузок в серверных средах.
Источник.
Универсальность ARM распространяется и на высокопроизводительные вычисления, как это демонстрирует Fugaku. Это самый быстрый в мире суперкомпьютер, использующий процессоры ARM для обеспечения исключительной вычислительной мощности и эффективности.
Энергоэффективный дизайн процессоров ARM делает их идеальными для устройств для умного дома, носимых технологий и промышленных датчиков. Способность ARM работать непрерывно при минимальном энергопотреблении делает его предпочтительным выбором для этих постоянно работающих приложений.
Подход ARM к поддержанию производительности при оптимизации энергоэффективности воплощен в многоядерном процессоре Cortex-A9 CPU и архитектуре «big.LITTLE». Она объединяет высокопроизводительные ядра с энергоэффективными для управления рабочими нагрузками.
x86
Источник.
Процессоры на архитектуре x86 благодаря высокой производительности и совместимости с почти любым ПО покорили рынок ПК, ноутбуков и дата-центров. Они подходят для самых требовательных задач: работы с 3D-графикой, рендеринга видео, игр, машинного обучения и т. д.
В сегменте игровых компьютеров процессоры на x86 обеспечивают выдающуюся производительность. Например, Intel® Core® i9-13900K имеет 24 ядра и 32 потока, что позволяет достигать тактовой частоты до 5,8 ГГц. Эти процессоры поддерживают новейшие видеоигры и VR-приложения, обеспечивая частоту кадров до 144 FPS в современных играх на максимальных настройках. AMD RyzenTM 9 7950X также предлагает отличные характеристики с 16 ядрами и 32 потоками, что делает его идеальным для высокопроизводительных игр и задач рендеринга.
Другие процессоры на x86 играют ключевую роль в дата-центрах и облачных вычислениях. Например, Intel® Xeon® Platinum 8380 поддерживает до 40 ядер и 80 потоков, обеспечивая масштабируемость и производительность для крупных серверных приложений. Он также обладает поддержкой до 6 ТБ оперативной памяти, что позволяет эффективно работать с большими объемами данных. AMD EPYCTM 7742 имеет 64 ядра и 128 потоков, обеспечивая выдающуюся многозадачность и высокую производительность для виртуализированных сред и вычислительных кластеров.
Заключение
Итак, ARM и x86 — это два разных инструмента для разных задач. ARM со своей энергоэффективностью делает смартфоны и планшеты быстрыми и долговечными. Ваш iPhone 15 с чипом A16 Bionic или новый Android на Qualcomm Snapdragon — все они работают долго без подзарядки и справляются с любыми приложениями благодаря ARM.
А вот x86 — это настоящая рабочая лошадка для серверов и мощных ПК. Если у вас дома стоит крутой игровой компьютер на Intel® Core® или рабочая станция на AMD RyzenTM, или если вы пользуетесь сервисами, работающими на серверах с Intel® Xeon® или AMD EPYCTM, то это все заслуга x86. Эти процессоры отлично справляются с тяжелыми вычислениями и поддерживают тонны софта.
Теперь, когда вы немного больше знаете о том, как работают эти архитектуры, вы сможете лучше понять, почему ваш смартфон такой шустрый, а рабочий ПК такой мощный. Каждая архитектура имеет свое место и задачи, и это знание помогает осознанно выбирать технику, которая подходит именно вам. А что вы думаете по этому поводу? Напишите в комментариях.
Комментарии (50)
AlexB17
19.08.2024 08:40+8"Каждое ядро современных высокопроизводительных процессоров для настольных ПК, таких как Intel® Core® i7 6700"
Дальше читать не стал...ildarz
19.08.2024 08:40+5Видимо, автор где-то нашел курсовую (свою или чужую) 2015-2016 года. Иначе содержание статьи, в том числе по уровню изложения, объяснить сложно.
LordCarCar
19.08.2024 08:40А что делает приведенный ассемблерный код для ARM?
unreal_undead2
19.08.2024 08:40Где вы в статье ARM ассемблер нашли? Я вижу псевдокод, иллюстрирующий разницу между гипотетическими CISC и RISC.
LordCarCar
19.08.2024 08:40+1Ок, псевдокод.
Пытались показать одно и тоже действие на разных процессорах, но что-то пошло не так!
Могут, конечно, сказать, что так в источнике, но зачем копировать ошибки?
unreal_undead2
19.08.2024 08:40+1Если не считать опечаток в номерах регистров, вроде криминала нет ) Но если говорить именно про ARM - то в нём есть достаточно продвинутая адресная арифметика и явно вычислять адрес отдельными инструкциями в данном случае не надо.
tmxx
19.08.2024 08:40+2Вот как можно охарактеризовать наборы команд для ARM.
...
Гарвардская архитектура. RISC обычно использует гарвардскую модель памяти, которая разделяет пути хранения и передачи сигналов для инструкций и данных, что еще больше повышает эффективность обработки
Давно ли в ARM общего применения, которые рассматриваются в статье, гарвардскую архитектуру реализовали?
techno_mot Автор
19.08.2024 08:40насколько я знаю в относительно свежих процессорах, таких как ARM Cortex-X2 и Neoverse V1, применяется гарвардская архитектура с раздельными кэшами для инструкций и данных. Некое продолжение традиции, начавшейся с архитектуры ARMv6 2002 года)
unreal_undead2
19.08.2024 08:40архитектура с раздельными кэшами для инструкций и данных
Используется на интеловских процессорах начиная по крайней мере с Pentium Pro (1995 год). В каком то смысле это элемент гарвардской архитектуры, но всё таки адресное пространство для инструкций и данных общее и снаружи они поступают в процессор через одну и ту же шину или контроллер памяти.
tmxx
19.08.2024 08:40+1Вот как можно охарактеризовать наборы команд для ARM...
...
Большое количество регистров. Чтобы минимизировать необходимость в более медленном доступе к памяти, RISC-системы используют большое количество регистров. Это позволяет командам работать непосредственно с данными, хранящимися в регистрах, а не обращаться к памяти часто.
ARM и x64 имеют практически одинаковое количество регистров.
Т.е. в целом, архитектуры RISC и CISC действительно имеют такие свойства, но в статье рассматриваются конкретные семейства.
unreal_undead2
19.08.2024 08:40+1Всё таки регистров общего назначения (не векторных) на данный момент на x86 16, а в Aarch64 32. Но интеловский APX грозится это исправить.
Armmaster
19.08.2024 08:40+5Абсолютно безграмотная статья. Тот редкий случай, когда неправильно почти всё. Наверное, можно написать отдельную статью, чтобы указать все косяки. Самое главное, абсолютно некорректен посыл, что от архитектуры RISC/CISC как-то существенно зависит производительность или энергопотребление. От архитектуры это сейчас практически не зависит никак, всё определяется микроархитектурой чипа, применяемым техпроцессом, качеством физдизайна и набором других параметров, никак с системой команд не связанными.
aabzel
19.08.2024 08:40Господа,
Предлагаю коллективно создать реестр для сравнения процессорных ядер
https://docs.google.com/spreadsheets/d/1y9DpZ5n3_t8Bk6t6CaU0f8WBJGfK05y20dzH8ncdMrs/edit?usp=drivesdk
Это поможет нам лучше понимать ход развития истории в этой предметной область и находить ближайшие аналоги, прослеживать эволюцию. Делать аналитику.
Было бы здорово, если каждый напишет про тот проц с которым упорно работал.
Кто готов пополнить реестр я добавлю возможность редактировать.
molnij
19.08.2024 08:40+3Эм, Селектел, вас-то кто укусил? Вроде обычно достаточно вменяемые статьи, а тут прям какой-то поток бессознательного бреда. Новую сетку для написания шлака на хабр тестируете? Мож не надо, их тут и так уже .. изрядно больше чем хотелось бы
Просто лень перечислять, плохо буквально всё..
LAutour
19.08.2024 08:40+2В 2000 году время доступа к памяти DRAM составляло около 100 наносекунд, а в 2020 — уже более 200
Память за 20 лет стала медленее?
techno_mot Автор
19.08.2024 08:40Увеличилась эффективная задержка, это не только физическое время доступа, но и задержки, связанные с архитектурными особенностями, а как раз абсолютное время доступа к ячейкам DRAM фактически уменьшилось.
ildarz
19.08.2024 08:40Что такое "эффективная задержка"? Вот у меня i5-13600KF с DDR4, латентность в тесте памяти AIDA чуть меньше 100нс . Это эффективная задержка, или не очень, и как мне получить те 200 из вашего текста?
techno_mot Автор
19.08.2024 08:40тест AIDA дает чуть меньше 100 нс это относиться к физической задержке доступа к памяти. Если мы говорим об эффективной задержке, то учитывайте дополнительные системные задержки, такие как время доступа к кэшу и задержки шины, которые могут добавить примерно 100 нс. Так что, эффективная задержка может составлять около 200 .
ildarz
19.08.2024 08:40+1тест AIDA дает чуть меньше 100 нс это относиться к физической задержке доступа к памяти.
Нет. "Физическая задержка" (если под ней понимать CAS latency, время от поступления чипу сигнала "давай данные" до возвращения им данных из столбца) там порядка 15нс.
то учитывайте дополнительные системные задержки, такие как время доступа к кэшу и задержки шины
К какому кэшу? У любого процессорного кэша задержки МЕНЬШЕ, чем у самой памяти. И что это за "задержки шины", которые тест не показывает? Он как-то мимо шины читает данные? Если да, то как?
И вопрос "как получить 200нс" все еще открыт (как получить 100нс в 2000, я примерно знаю :)). Их можно каким-то широко распространенным ПО увидеть? Вы же опирались на какие-то реальные данные, когда про 100 и 200нс писали, правда ведь? :)
kuza2000
В статье описывается, что CISC хорош для высокой производительности, а ARM для снижения энергопотребления. Для меня такое противопоставление не понятно. Есть характеристика производительность на ватт подводимой мощности. ARM тут выигывает. То есть, делаем два мощных процессора, которые потребляют одинаково, по максимому, сколько может рассеивать один процессор. ARM получится мощнее, чем x86.
В моем понимании железа, RISC превосходит CISC. Единственная причина, по который мы не на ARM или другом RISC - это совместимость со старым ПО. Просто тащим этот груз, который выкинуть бы давно пора. А в статье пишется, что вроде как есть другие причины, но я не нашел ни одной. Пишется, что x86 лучше для высокой производительности. Но чем лучше? Может, хотя бы в одном потоке он обгоняет ARM при сопостовимой потребляемой мощности? Или есть ограничения на максимальную мощность ARM? Может, я что-то упускаю?
Тема не раскрыта.
unreal_undead2
Большая часть отличий в производительности вообще и производительности на ватт определяется не архитектурой, а микроархитектурой. Разве что более сложный декодер x86 влияет на энергопотребление и в мобильном сегменте это заметно. А в плане пригодности ARM для высокой производительности - см. последние чипы от Apple и номер 4 в Top 500.
Sun-ami
Главный недостаток RISC - это больший размер исполняемого кода, чем у CISC. Это приводит к большей потребности в чтении из памяти, а память намного медленнее процессора, даже если это кэш-память не самого первого уровня. Выходом здесь может быть увеличение ширины шины памяти, её скорости и количества каналов за счёт многоэтажной конструкции чипов с вертикальными связями, как в процессорах Apple M. Но пока такая конструкция плохо масштабируется и не имеет никаких возможностей для апгрейда.
unreal_undead2
Всё не так однозначно - вот тут есть сравнение с цифрами.
yatanai
Тоесть в итоге получаем, "теоретический CISC лучше, ибо по-сути представляет из себя сжатый набор команд закодированный по частоте использования"
На практике у нас есть только х86, который уже давно перестал быть оптимальным решением
kuza2000
У меня вывод, что лучше RISC. Длинна кода для RISC не возрастает (выше пруфы). Сам кристалл вроде бы проще, но это не точно. Все остальное одинаково. Но для RISC компилятор собирает код из более мелких кусочков, чем для CISC и у него больше возможностей для оптимизации.
Sun-ami
У компилятора для RISC обычно действительно больше возможностей для оптимизации, но по другой причине. В CISC есть все команды, которые есть в RISC, так что никто не запрещает компилятору применить те же возможности оптимизации. С CISC хуже другое - для одной системы команд разные процессоры имеют существенно разный по алгоритму микрокод с существенно разными задействованными для каждой конкретной команды ресурсами, поэтому для наилучшей оптимизации компилятору теоретически нужно знать конкретную модель процессора. На практике это обычно неприменимо, кроме, разве что компиляции ядра Linux под конкретный процессор. А для RISC вариантов использования ресурсов процессора гораздо меньше, и универсально оптимизировать код намного проще.
Sun-ami
Кроме этого теоретического преимущества у CISC также есть существенные недостатки в виде сложного декодера, вместо которого в некоторых случаях можно было бы поставить второе ядро на той же площади кристалла, и более длинного конвейера, который вынуждает использовать более сложный предсказатель ветвлений, и при этом всё равно больше теряет из-за его ошибочных предсказаний. Ну а у современной версии х86, судя по приведенным здесь результатам измерений, и этого преимущества не осталось, потому что его система команд уж слишком отягощена обратной совместимостью.
unreal_undead2
Кроме прочего переменный размер инструкции - ни разу не отличительная особенность CISC. Скажем, в RISC V есть расширение для использования 2байтных инструкций вперемешку с "обычными" 4байтными.
melodictsk
На практике уже давно не х86, а амд64. Х86 есть в кристалле, но давно не используется.
Armmaster
БОльший размер исполняемого кода влияет только на одно - на количество instruction cache misses. Это иногда может сыграть заметную роль по перфу, но найти такой тест, чтобы это стало заметно в части ARM vs X86 надо ещё постараться. И это точно не станет никогда узким местом в части обращения непосредственно в память и требованиям к канальности памяти. Несколько мегабайт (или даже десятки ) LLC кэша вполне гарантируют вам попадание всего кода в кэш.
Sun-ami
Большой LLC кэш может гарантировать попадание всего кода в кэш только в том случае, если ядер мало, или они все выполняют один и тот же код. А в ARM-процессорах, которые претендуют на замену мощных X86, ядер больше сотни, так позволяет сделать низкое энергопотребление ядер, но если все они будут выполнять различный код - LLC кэша вполне может не хватить для кода.
Armmaster
В общем, это придуманная проблема. Никогда скорость и канальность памяти не проектируется исходя из вопроса размера кода, главное там - это объём обмена данными и работы подсистемы кэша данных. В принципе, если у вас из L1I код начинает часто выпадать, это уже криминал. Размер кода инструкций имел важное значение на заре проектирования микропроцессоров, также определённую важность он имеет сейчас при проектировании микроконтроллеров. А для соврменных серверных/десктопных процессоров разница в размере кода между CISC/RISC не влияет почти ни на что. Скорее более сложный декодер для CISC имеет значение, хотя впрочем тоже небольшое
Sun-ami
Что такое часто? К примеру, размер кэша L1 процессора AMD Ryzen 7 8700 - 512 кбайт, а задержка при обращении к L2 - 3 нс, что при частоте 5,1ГГц составляет 15 тактов.
Armmaster
Часто - это значит если вы в профилировщике видите какую-то значимую величину хотя бы больше 1% от суммарного времени исполнения в поле icache_stalls.
unreal_undead2
На энтерпрайз приложениях (базы данных, всяческие Spark/Hadoop и т.п.) обычное дело, когда большая часть обращений к L2 инициируется L1I миссами. И iTLB миссы тоже существенно влияют на производительность. Но, как писал выше, разница в размере кода на CISC и RISC - скорее миф, чем реальность, надо сравнивать конкретный код на конкретных архитектурах.
techno_mot Автор
Но еще x86-процессоры, как Intel Core i9-13900K, превосходят ARM в однопоточных задачах благодаря более высокой частоте и IPC, достигая 30 000 баллов в Geekbench 5 по сравнению с 1 700 баллами у Apple M1. При сопоставимой мощности x86 обычно предлагает лучшую производительность на такт, но ARM-процессоры показывают лучшую производительность на ватт (1.5-2.0 производительности на ватт). ARM-процессоры, хотя и улучшаются, традиционно имеют ограничения в максимальной мощности по сравнению с высокопроизводительными x86-процессорами.
kuza2000
А кто или что ограничивает ARM-процессоры в максимальной мощности? Если сделать два процессора с одинаковой потребляемой мощностью ARM и x86, то ARM будет производительнее, так?
И что мешает частоту для ARM увеличить?
ildarz
Нет, не так. Это так не работает, производительность не масштабируется однозначно с потребляемой мощностью ни вверх, ни вниз. Можно сравнивать только реально существующие процессоры. А ответ на вопрос "что мешает увеличить частоту" может быть очень разным, от "не впишемся в термопакет" для мобильных устройств до "не получается" для серверных.
kuza2000
Речь не про мобильные устройства, и "не впишимся в термопакет" не аргумент. "Не получается для серверных" - почему?
Я хочу понять - существуют ли реальные причины не использовать ARM для высокопроизводительных систем - серверов, десктопов, рабочих станций. Пока никто не назвал мне ни одной реальной причины. Поэтому, у меня складывается впечатление, что причина только одна - совместимость, традиция. Получается это просто тормозит прогресс, и все.
unreal_undead2
Существуют построенные на ARM сервера, десктопы и рабочие станции. Что будет дальше с их долей на рынке - посмотрим.
unreal_undead2
Что мешает погуглить характеристики серверных процессоров ARM?
kuza2000
Это не дает ответы на мои вопросы.
Кстати, какие сейчас наиболее производительные ARM или RISC? Гуглю - все какие-то старые статьи попадаются...
unreal_undead2
Скажем, NVIDIA Grace, Apple M3, Snapdragon X Elite. Ну и "старенький" A64FX ещё вполне жив.