Ноутбуки обычно имеют максимум четыре ядра, а двухъядерные процессоры, вероятно, более распространены. Я недавно переключился с четырехъядерного на двухъядерный, и я могу подтвердить, что существует ограниченное количество сценариев использования для четырехъядерных процессоров, даже с задачами, интенсивно использующими процессор.
С другой стороны, на мобильных телефонах, кажется, распространены квадроциклы, гексакоры и октакоры. Почему? Какие задачи могут их использовать?
Я понимаю, что big.LITTLE может быть частью ответа. То есть главное преимущество такого количества ядер заключается не в возможности использовать их все одновременно, а в том, чтобы использовать ядро с энергопотреблением, соответствующим текущей рабочей нагрузке. Однако, например, Snapdragon 625 имеет восемь ядер Cortex-A53, что, похоже, не подходит для big.LITTLE.
Возможно, архитектура ARM имеет более низкую точку оптимальной производительности на ватт. То есть, если одно ядро настроено на оптимальную производительность на ватт, производительность ARM будет ниже, чем у Intel. Таким образом, для обеспечения производительности используется больше ядер. Это всего лишь гипотеза.
Но даже в этом случае я не вижу, какую рабочую нагрузку можно эффективно использовать, скажем, восемь ядер на мобильном телефоне. На ноутбуках я могу представить несколько таких, как полная (неинкрементная) компиляция проекта. А на телефонах?
- Игры могут быть требовательны к производительности, но они обычно требуют производительности GPU, а не CPU, не так ли?
- Теоретически, несколько ядер могут ускорить компиляцию Android Lollipop / Marshmallow при установке или обновлении (т. Е. Фаза «Оптимизация приложений 3/121»). Я, однако, не уверен, может ли это использовать несколько ядер. Насколько я помню код, за один раз компилируется только одно приложение, но, возможно, в самом процессе компиляции есть некоторый параллелизм.
- Также Android 7+ может использовать несколько ядер при компиляции. Но так как он, как сообщается, компилируется, когда простаивает и заряжается, выгода, кажется, довольно минимальна. По крайней мере, когда кто-то заряжает телефон в одночасье - мне действительно все равно, если в таком сценарии это займет 30 минут или два часа.
Ответы:
Как вы уже отметили, big.LITTLE сочетание стратегии (технически, HMP , гетерогенный Multi-Processing кластеров) является основной причиной столь многих (а иногда и в подавляющем большинстве случаев много) ядер. Мобильное устройство часто работает в нескольких сценариях, включая как тяжелые, так и легкие.
Примером экстремального потребительского класса является MediaTek Helio X20, который имеет 2 ориентированных на производительность ядра A72, 4 сбалансированных ядра A53 и 4 энергосберегающих ядра A35. Это очень гибко в разных случаях использования. Тем не менее, я думаю, что
8 ядер2 кластера обычно достаточно.Есть также еще один пример, похожий на настольный компьютер, серия Qualcomm Snapdragon 800 (S 800, S 801 и S 805). В каждом SoC есть только 4 ядра одной и той же микроархитектуры, с 2 тактами выше и 2 тактами ниже. Qualcomm сделал эти SoC, потому что они были очень уверены в своей собственной микроархитектуре (Krait 400 и Krait 450).
Для игр, даже если они, по-видимому, требуют производительности графического процессора, а не процессора, они по-прежнему сильно нагружают процессор. Графический процессор не может работать в одиночку без предоставления каких-либо данных для обработки, и это одна из основных задач, которую процессор выполняет во время игры. В большинстве игровых случаев графический процессор воспроизводит только графику, тогда как все другие задания, такие как загрузка данных, ресурсов и ресурсов, а также вычисление игровой механики, такой как система, окружающая среда и физика, выполняются процессором. Вы не будете наблюдать более высокую частоту кадров, если обновите свой графический процессор, придерживаясь низкоуровневого процессора.
Вторая причина заключается в том, как Android использует ресурсы процессора . Android в значительной степени создает собственную среду приложений. Он использует только коды (и API) из Java, но у него есть собственная виртуальная машина с именем Dalvik, которая позже была заменена на ART (API Level 21). APK имеют свои исполняемые коды в «нейтральном» формате, очень похожем на
.class
файлы в Java. Перед запуском коды снова компилируются в нативные инструкции машины [1] . Процесс компиляции является многопоточным и может использовать многоядерные процессоры для повышения производительности.И когда приложение работает, есть несколько других процессов и механизмов (таких как сборщик мусора), которые работают рядом или параллельно с приложением. Большее количество ядер может обеспечить более эффективную работу вспомогательных процессов, а также основного приложения.
1. Если вы используете идентификатор типа файла, вы обнаружите, что «оптимизированные» файлы dex имеют формат ELF, а «нейтральные» файлы dex - только в своем собственном формате.
Другая меньшая причина заключается в том, что ядра ARM не могут работать так же быстро, как чип Intel x86 . Микроархитектура Intel x86 может быть датирована 1976 годом, когда началось проектирование чипа Intel 8086 , что означает, что x86 разрабатывался в течение длительного времени. Одно современное высокопроизводительное ядро ARM Cortex-A73 является настолько же мощным, как и ядро Intel Clarkdale, на примере Core i5-660 (GeekBench, одноядерный). Это связано с тем, что x86 - это микроархитектура CISC, а ARM - RISC.микроархитектуры. Вы, конечно, не хотите, чтобы телефон стал зависать только с двумя или около того активными приложениями. Больше ядер поможет снять давление. Вот почему двухъядерные SoC относительно популярны только на умных часах. Кому нужна производительность на умных часах?
Интересно, что большее количество ядер приведет к меньшей мощности, чем одно ядро при той же нагрузке . Соотношение между частотой процессора и энергопотреблением более чем линейное, поэтому удвоение частоты всегда приводит к потреблению более чем в два раза или даже в 3 или 4 раза больше энергии, обеспечивая при этом производительность менее чем в два раза (из-за других ограничений ресурсов, таких как кэш-память ). Таким образом, 4 ядра могут легко справиться с одним ядром при одной и той же нагрузке, обеспечивая лучшую производительность и одновременно требуя меньше энергии.
Дальнейшее чтение:
источник
Причина как проста, так и сложна.
Короткий ответ: «потому что рынок мобильных телефонов никогда не был и не управляется Intel».
Длинный ответ слишком длинен, чтобы его можно было возобновить, но основная концепция заключается в том, что Intel годами доминировала на рынке ПК всеми возможными способами, вплоть до того, чтобы платить и портить (и быть оштрафованным за это), чтобы его процессоры были первый и единственный выбор для производителей ПК.
Полный контроль над рынком позволил Intel взвинчивать цены на ЦП, искусственно решая, какие функции и сколько вычислительной мощности следует ожидать пользователям, и если вы немного проанализируете историю Intel, вы заметите, что ее основная сила в основном заключается в увеличение частоты процессоров, поэтому он в основном никогда не пытался сделать что-то действительно умное или инновационное; и он не нуждался в этом, потому что он может просто сказать людям: «Вам не нужно больше ядер, но у меня есть эти сочные новые процессоры, которые работают на 100 МГц быстрее». В то же время он может продавать многоядерные процессоры на рынке серверов по абсурдно высоким ценам (потому что серверы всегда были нужнытонн параллельной мощности, до такой степени, что в настоящее время наблюдается тенденция к реализации серверов, которые используют ... угадайте, что? Сотни ваших дешевых телефонных процессоров работают параллельно)
Это, в свою очередь, отразилось на сообществе разработчиков, которое никогда не догадывалось о важности параллельного программирования, так что многие, если не большинство из них, никогда не удосужились использовать более одного потока за раз, или выразить его в не техническим способом, когда их программное обеспечение выполняет более одной задачи одновременно. Что, кстати, имеет смысл, когда 99% вашей клиентской базы имеют максимум два ядра. К сожалению, это привело к легенде о том, что параллельные алгоритмы действительно трудно реализовать, и они применимы только к небольшому подмножеству проблем.
Вместо этого, наконец, мобильный рынок никогда не видел успеха Intel; На самом деле, наоборот, поскольку в большинстве случаев Intel пытается сделать что-то отличное от обычной архитектуры X86. Таким образом, отсутствие влияния и контроля на рынке, другие производители процессоров пошли в направлении, которое было нормой целую вечность за пределами рынка ПК: параллельные вычисления.
источник
Происходят два фактора: один очень практичный, а другой исторический.
Практическая причина - использование смешанных архитектур в телефонах. Потребление энергии имеет решающее значение для телефонов, и телефоны проводят много времени в режимах, где они требуют очень мало производительности. Имеет смысл оптимизировать некоторые ядра для минимального энергопотребления, когда требуется небольшая производительность, а некоторые ядра оптимизированы для обеспечения максимальной производительности, когда это необходимо.
Другая причина в значительной степени историческая. До 2005 года настольные процессоры были одноядерными. Повышение производительности процессоров настольных компьютеров состояло почти исключительно в создании ядра, которое может выполнять как можно больше инструкций в секунду. Даже сегодня такое большое количество программ для настольных ПК не может в полной мере использовать преимущества нескольких ядер, поэтому многие предпочли бы процессор с 4 ядрами, а не 8-ядерный процессор с ядрами на 20% медленнее.
Чтобы получить как можно больше производительности от одного ядра, требуется огромное количество ресурсов процессора. Это недвижимость, которую в противном случае можно было бы использовать для обеспечения большего количества ядер. Вот почему новейшие процессоры Intel Kaby Lake имеют максимальную производительность в 4 ядра, и люди покупают их, потому что каждое ядро быстрее, чем ядра их предшественника. Для многих они являются обновлением даже от процессоров с большим количеством ядер.
Со временем вы ожидаете увидеть гораздо больше настольных программ, полностью оптимизированных для поддержки большего количества ядер. Как только это произойдет, инженерные компромиссы начнут отдавать предпочтение большему количеству ядер по сравнению с более быстрыми ядрами на настольных ПК. Хотя ядра почти наверняка будут работать быстрее, вы увидите, что люди предпочитают 8-ядерный ЦП, а не 4-ядерный ЦП, даже если каждое ядро работает на 20% медленнее. Дизайнеры чипов будут следить за рынком.
источник
Для телефона крайне важно иметь возможность обеспечивать вычислительную мощность в коротких пакетах (нам нужны определенные приложения, чтобы быть быстрыми), но также избегать перегрева (рассеивание тепла гораздо сложнее для телефонов, чем для ноутбуков или ПК). Для этого архитекторы проектируют телефоны для использования одного ядра, когда рабочая нагрузка мала, и предоставляют дополнительные ядра для повышения производительности, когда это необходимо. Если бы в телефонах использовалось меньше крупных ядер, перегрев стал бы проблемой, даже если рабочая нагрузка довольно мала.
Источник: курс по компьютерной архитектуре для выпускников.
источник
Во-первых, виртуальная машина Java исторически может выиграть от многоядерности больше, чем обычное программное обеспечение для настольных компьютеров. Даже если вы напишите однопоточное приложение на Java, оно будет работать быстрее на многоядерном, потому что большая часть кода сборщика мусора будет работать вместе с вашим приложением.
Во-вторых, в фоновом режиме на вашем телефоне происходит много событий: автоматические обновления, загрузка рекламы, антивирусное программное обеспечение, управление GSM-модулем и т. Д. На ноутбуке все эти задачи едва ли могли бы занять одно ядро, но ядра ARM гораздо менее мощный, поэтому вы можете иметь хотя бы пару из них, предназначенных для фоновых задач, если вы хотите адаптивную систему.
Наконец, есть маркетинг. Не многие пользователи могут оценить, выиграют ли они от 8 ядер, но 8-ядерный смартфон, безусловно, звучит дороже, чем 2 или 4-ядерный.
источник
Ответы до сих пор объясняют некоторые аспекты проблемы, приводящей к огромному количеству процессорных ядер на телефонах Android. Прочитайте это снова; Телефоны Android. IPhone уже целую вечность держится всего пару ядер и все еще работает намного лучше, чем любой флагман Android.
Разработчики Android сделали огромную ставку, решив выбрать программирование на Java и, как следствие, JVM в качестве среды выполнения приложений. Java, благодаря своим принципам проектирования, решает проблему необходимости компилировать и компилировать код для каждой архитектуры ЦП, прежде чем он может быть запущен на нем, жертвуя производительностью. Java представляет тяжелую и громоздкую виртуальную машину, обычно называемую JVM. JVM фактически эмулирует процессор на программном уровне, чтобы избежать необходимости компилировать код отдельно для каждого устройства. Думайте о JVM как о виртуальном процессоре, который обладает одинаковыми свойствами независимо от устройства, на котором он работает, поэтому код должен быть скомпилирован только один раз для JVM и затем может быть запущен на каждом устройстве. Это позволяет производителям выбрасывать любое оборудование, которое они хотят, прежде чем беспокоиться о совместимости приложений.
Сама JVM - это просто спецификация, и люди могут разрабатывать свои собственные JVM, если они придерживаются этой спецификации. Оригинальный андроид JVM назывался Dalvik. В настоящее время Google заменил это на ART.
Теперь в чем проблема с JVM? Это тяжелое программное обеспечение, которое потребляет много вычислительных ресурсов. Добавьте к этому некоторые другие свойства языка Java, такие как сборка мусора и потребление ресурсов JVM, просто становится слишком много для устройства со скромной аппаратной мощностью. Каждое приложение и системная служба, открытые на вашем устройстве, сами по себе являются экземпляром ART JVM, и к настоящему времени вы можете заключить, что для управления всеми ними требуется действительно мощное оборудование. Ситуация станет еще хуже, когда возникнет необходимость рисовать пользовательские интерфейсы.
Каждое приложение работает в нескольких потоках. Каждое ядро процессора может запускать только один поток за раз. Каждое приложение имеет один основной поток, в котором оно выполняет работу, связанную с пользовательским интерфейсом. В каждом приложении может быть гораздо больше потоков для доступа к файлам, сети и т. Д. Обычно открыты больше приложений (и системных служб), чем ядер ЦП, и в результате обычно потоков гораздо больше, чем ядер ЦП. Таким образом, каждое ядро должно постоянно переключаться между обработкой различных потоков, делая немного каждого и переходя к следующему. Это переключение занимает много времени для процессора, и в случае, когда приложения по сути являются JVM, эта задача становится еще более исчерпывающей.
Исходя из этого объяснения, можно сделать вывод, что для нормальной работы Android требуется мощное оборудование. Первые поколения устройств Android были известны отставанием, сбоями и многими другими неприятными вещами. Но за эти годы эти проблемы были в основном решены с помощью мощного оборудования.
С другой стороны, приложения для iOS скомпилированы с собственным машинным кодом и, следовательно, не нуждаются в виртуализации. Используемый язык и операционная система также более эффективны и, следовательно, позволяют этим устройствам оставаться гладкими без необходимости использования какого-либо излишнего набора микросхем.
источник
Продолжая все вышеизложенное, могу сказать, что случаи использования ПК и телефона совершенно разные. ПК чаще всего используется в одном или нескольких приложениях (конечно, браузер с кучей вкладок требует много процессорных ядер, может отставать даже на топ-i-3), телефоны, используемые для многозадачности. По крайней мере, подключение к сети, отрисовка пользовательского интерфейса, системные триггеры, уведомления. Если вы откроете диспетчер задач на ПК, то там также будет много процессов, но они потребляют менее нескольких% мощности процессора даже на старом Core 2 duo. 4 ядра довольно дешевы (MTK 65x2 стоил 1 $ при запуске для OEM). Это также РИСК по сравнению с CISC, когда в последний раз не хватало производительности на ядро. Энергоэффективность! = Мощная, как мы видим здесь . Многоядерность идеально подходит для мобильных устройств, поскольку не требует серьезной нагрузки на один протектор и позволяет работать с несколькими задачами (но мы видим, что айфонам требуется меньше ядер и оперативной памяти из-за хорошего программного обеспечения).как в этом видео или других )
источник
Я думаю, что один из главных движущих факторов, помимо 4 или 8 (для больших: маленьких конфигураций), это просто маркетинг в данный момент.
Одна огромная проблема большого количества ядер заключается в том, что вы учитываете объем памяти. Обычно в настольных приложениях, когда вы хотите улучшить использование нескольких ядер, вам нужно дублировать структуры и использовать гораздо больше памяти, чем в однопоточном приложении.
Этого не происходит, потому что ОЗУ очень дорого (особенно в кризисной ситуации с ОЗУ в 2017/2018 гг.). Маркетинг хочет больших цифр, но контроль хочет снизить цены на компоненты. Если вы видите баланс менее 1 гигабайта ОЗУ на ядро, вы увидите неудачный компромисс.
источник