Почему у нас есть процессоры со всеми ядрами с одинаковыми скоростями, а не с комбинациями разных скоростей?

79

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

С точки зрения того, что доступно на рынке - кажется, что все процессоры имеют примерно одинаковую скорость с основными различиями в том, что у них больше потоков или больше ядер.

Например:

  • Intel Core i5-7600K, базовая частота 3,80 ГГц, 4 ядра, 4 потока
  • Intel Core i7-7700K, базовая частота 4,20 ГГц, 4 ядра, 8 потоков
  • AMD Ryzen 5 1600X, базовая частота 3,60 ГГц, 6 ядер, 12 потоков
  • AMD Ryzen 7 1800X, базовая частота 3,60 ГГц, 8 ядер, 16 потоков

Итак, почему мы видим эту тенденцию увеличения ядер со всеми ядрами, имеющими одинаковую тактовую частоту?

Почему у нас нет вариантов с разными тактовыми частотами? Например, два «больших» ядра и множество маленьких ядер.

Например, вместо четырех ядер на 4,0 ГГц (т.е. максимум 4x4 ГГц ~ 16 ГГц), как обстоят дела с процессором с двумя ядрами, работающими на 4,0 ГГц и четырьмя ядрами, работающими на 2 ГГц (то есть 2x4,0 ГГц) + 4x2,0 ГГц ~ 16 ГГц максимум). Разве второй вариант не будет одинаково хорош в однопоточных рабочих нагрузках, но потенциально лучше в многопоточных рабочих нагрузках?

Я задаю этот вопрос в качестве общего пункта - не конкретно о тех процессорах, которые я перечислил выше, или о какой-то конкретной рабочей нагрузке. Мне просто любопытно, почему шаблон такой, какой он есть.

Джейми
источник
15
Существует множество мобильных телефонов с быстрыми и медленными ядрами, и почти на всех современных многоядерных серверах частота ядра процессора зависит от нагрузки в зависимости от нагрузки, некоторые даже отключают ядра, когда они не используются. На компьютере общего назначения, где вы не разрабатываете для экономии энергии, однако наличие только двух типов ядер (CPU и GPU) просто делает платформу более гибкой.
eckes
5
Прежде чем планировщик потоков сможет сделать разумный выбор, какое ядро ​​использовать, он должен определить, может ли процесс использовать преимущества нескольких ядер. Надежное выполнение этого было бы очень проблематичным и подверженным ошибкам. Особенно, когда это может изменяться динамически в соответствии с потребностями приложения. Во многих случаях планировщик должен был сделать субоптимальный выбор, когда использовалось лучшее ядро. Одинаковые ядра упрощают работу, обеспечивают максимальную гибкость и, как правило, имеют лучшую производительность.
LMiller7
33
Нельзя сказать, что тактовые частоты являются аддитивными, как вы описали. Наличие четырех ядер, работающих на частоте 4 ГГц, не означает, что вы имеете «общее» значение 16 ГГц, а также не означает, что эти 16 ГГц могут быть разделены на 8 процессоров, работающих на 2 ГГц, или 16 процессоров, работающих на 1 ГГц.
Боб Джарвис
16
Суть вопроса просто неверна. Современные процессоры прекрасно способны работать с ядрами на разных скоростях
phuclv

Ответы:

85

Это известно как гетерогенная многопроцессорная обработка ( HMP ) и широко применяется на мобильных устройствах. В устройствах на базе ARM, которые реализуют big.LITTLE , процессор содержит ядра с различными профилями производительности и мощности, например, некоторые ядра работают быстро, но потребляют много энергии (более быстрая архитектура и / или более высокая тактовая частота), в то время как другие являются энергосберегающими, но медленными ( более медленная архитектура и / или более низкие часы). Это полезно, потому что энергопотребление имеет тенденцию непропорционально увеличиваться по мере того, как вы увеличиваете производительность, как только достигнете определенного уровня. Идея в том, чтобы получить производительность, когда она вам нужна, и время автономной работы, когда вы этого не делаете.

На настольных платформах энергопотребление является гораздо меньшей проблемой, поэтому в этом нет необходимости. Большинство приложений ожидают, что каждое ядро ​​будет иметь одинаковые характеристики производительности, а процессы планирования для систем HMP намного сложнее, чем планирование для традиционных систем SMP. (Технически Windows 10 имеет поддержку HMP, но в основном она предназначена для мобильных устройств, использующих ARM big.LITTLE.)

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

Хотя существует несколько процессоров для настольных компьютеров, которые имеют одно или два ядра, способных работать быстрее, чем другие, в настоящее время эта возможность ограничена некоторыми процессорами Intel очень высокого класса (например, Turbo Boost Max Technology 3.0) и предполагает лишь незначительное увеличение производительности. для тех ядер, которые могут работать быстрее.


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

Возьмем гипотетический процессор с двумя быстрыми ядрами Kaby Lake (ядро 7-го поколения) и восемью медленными ядрами Goldmont (Atom). Всего у вас будет 10 ядер, а рабочие нагрузки с высокой интенсивностью потоков, оптимизированные для этого типа процессора, могут получить прирост производительности и эффективности по сравнению с обычным четырехъядерным процессором Kaby Lake . Однако разные типы ядер имеют совершенно разные уровни производительности, а медленные ядра даже не поддерживают некоторые инструкции, которые поддерживают быстрые ядра, такие как AVX . (ARM позволяет избежать этой проблемы, требуя, чтобы и большое ядро, и ядро ​​LITTLE поддерживали одинаковые инструкции.)

Опять же, большинство многопоточных приложений на базе Windows предполагают, что каждое ядро ​​имеет одинаковый или почти одинаковый уровень производительности и может выполнять одни и те же инструкции, поэтому асимметрия такого типа, вероятно, приведет к снижению производительности до идеального уровня, возможно, даже в случае сбоя, если он использует инструкции, не поддерживаемые медленными ядрами. Хотя Intel может модифицировать медленные ядра для добавления расширенной поддержки команд, чтобы все ядра могли выполнять все инструкции, это не решило бы проблем с программной поддержкой гетерогенных процессоров.

Другой подход к разработке приложений, более близкий к тому, о чем вы, вероятно, думаете в своем вопросе, будет использовать графический процессор для ускорения высокопараллельных частей приложений. Это можно сделать с помощью таких API, как OpenCL и CUDA . Что касается одночипового решения, AMD продвигает аппаратную поддержку ускорения графических процессоров в своих APU, которые сочетают традиционный процессор и высокопроизводительный интегрированный графический процессор на том же чипе, что и гетерогенная системная архитектура , хотя это не вызывает большого интереса со стороны промышленности за ее пределами. из нескольких специализированных приложений.

bwDraco
источник
1
В Windows уже есть понятия «Приложения», «Фоновые процессы» и «Процессы Windows». Так что это не распространяется на аппаратный уровень?
Джейми
2
@Jamie «фоновый» процесс получает меньшие временные интервалы и с большей вероятностью будет прерван. Windows 10 в некоторой степени учитывает HMP-системы, хотя пока не так много информации о том, как это сделать.
Боб
Так что я думаю, что после редактирования @bwDraco довольно много ответил за меня. Если бы существовал «смешанный» процессор, он мог бы легко поддерживать тот же набор инструкций, если бы он был построен таким образом, поэтому нам понадобился бы какой-нибудь планировщик, чтобы выбрать правильное ядро. Я думаю, что на самом деле приложения, которые выигрывают от большого количества маленьких ядер, возможно, выиграют еще больше от большого количества маленьких ядер. Таким образом мы имеем ускорение GPU.
Джейми
3
Обратите внимание, что в случае с графическим процессором 2 больших ядра продаются не за 10 маленьких и медленных ядер, а скорее (очень грубый) эквивалент торговли двумя большими ядрами за 1024 маленьких и медленных ядра. Массивно параллельные, а не просто немного более параллельные.
Якк
4
Вероятно, Intel может получить ядро ​​Goldmont для выполнения инструкций AVX2 без большого количества кремния (медленно, путем декодирования до пар 128b операций). В Knight's Landing (Xeon Phi) есть ядра на базе Silvermont с AVX512, поэтому модифицировать Silvermont совсем не обязательно. Но KNL добавляет неупорядоченное выполнение для векторных инструкций, в то время как обычный Silver / Goldmont делает только OOO для целых чисел, поэтому они, вероятно, захотят разработать его ближе к Goldmont, чем KNL. В любом случае, наборы insn не являются реальной проблемой. Именно поддержка ОС и небольшая выгода являются реальными препятствиями для расходования ресурсов на ядро ​​с низким энергопотреблением.
Питер Кордес
68

Вы спрашиваете, почему современные системы используют симметричную многопроцессорность, а не асимметричную многопроцессорность .

Асимметричная многопроцессорная обработка использовалась в старые времена, когда компьютер был огромен и размещался на нескольких устройствах.

Современные процессоры отлиты как одно целое, в одном кристалле, где гораздо проще не смешивать процессоры разных типов, поскольку все они используют одну шину и оперативную память.

Существует также ограничение часов, управляющих циклами ЦП и доступом к ОЗУ. Это станет невозможным при смешивании процессоров разных скоростей. Экспериментальные компьютеры без часов существовали и были даже довольно быстрыми, но сложности современного оборудования наложили более простую архитектуру.

Например, ядра Sandy Bridge и Ivy Bridge не могут работать на разных скоростях одновременно, поскольку шина кэш-памяти L3 работает с той же тактовой частотой, что и ядра, поэтому для предотвращения проблем синхронизации все они должны работать на той же скорости или быть припаркованным / выключенным (ссылка: Архитектура Intel Sandy Bridge Exposed ). (Также проверено в комментариях ниже для Skylake.)

[РЕДАКТИРОВАТЬ] Некоторые люди ошибочно приняли мой ответ, чтобы сказать, что смешивание процессоров невозможно. В их пользу я заявляю: смешивание разных процессоров не выходит за рамки современных технологий, но не делается - вопрос «почему нет». Как было сказано выше, это будет технически сложно, поэтому дороже и будет стоить слишком мало или вообще не будет финансовой выгоды, поэтому не будет интересовать производителей.

Вот ответы на некоторые комментарии ниже:

Turbo Boost изменяет скорости процессора, поэтому их можно менять

Турбоусиление достигается за счет ускорения тактовой частоты и изменения некоторых множителей, что и делают люди при разгоне, за исключением того, что аппаратное обеспечение делает это за нас. Часы распределяются между ядрами на одном и том же процессоре, поэтому это равномерно ускоряет весь процессор и все его ядра.

Некоторые телефоны имеют более одного процессора разной скорости

Такие телефоны обычно имеют собственную прошивку и программный стек, связанный с каждым ЦП, более похожий на два отдельных ЦП (или, как ЦП и ГП), и им не хватает единого представления о системной памяти. Эту сложность сложно запрограммировать, поэтому асимметричная многопроцессорная обработка осталась в области мобильной связи, поскольку она требует низкоуровневой разработки программного обеспечения, близкого к аппаратному, что избегает настольных ОС общего назначения. Это причина того, что такие конфигурации не найдены на ПК (за исключением CPU / GPU, если мы достаточно растянем определение).

Мой сервер с 2x Xeon E5-2670 v3 (12 ядер с HT) в настоящее время имеет ядра на 1,3 ГГц, 1,5 ГГц, 1,6 ГГц, 2,2 ГГц, 2,5 ГГц, 2,7 ГГц, 2,8 ГГц, 2,9 ГГц и многие другие скорости.

Ядро либо активно, либо бездействует. Все активные ядра одновременно работают на одной частоте. То, что вы видите, является просто артефактом либо времени, либо усреднения. Я сам также отметил, что Windows не хранит ядро ​​в течение длительного времени, а скорее отдельно паркует / снимает с него все ядра намного быстрее, чем частота обновления Resource Monitor, но я не знаю причину такого поведения, которое, вероятно, обусловлено вышеупомянутое замечание.

Процессоры Intel Haswell имеют встроенные регуляторы напряжения, которые обеспечивают отдельные напряжения и частоты для каждого ядра

Индивидуальные регуляторы напряжения отличаются от тактовой частоты. Не все ядра идентичны - некоторые быстрее. Более быстрые ядра получают немного меньше энергии, создавая запас мощности для увеличения мощности, предоставляемой более слабым ядрам. Регуляторы напряжения ядра будут установлены на максимально низкое значение для поддержания текущей тактовой частоты. Блок управления питанием на ЦПУ регулирует напряжения и при необходимости переопределяет запросы ОС для ядер, отличающихся по качеству. Резюме: Отдельные регуляторы предназначены для обеспечения экономичной работы всех ядер на одной тактовой частоте, а не для настройки отдельных скоростей ядер.

harrymc
источник
3
Ах. больше mshorter и в точку. +1
Хенн
6
@harrymc есть блоки синхронизатора, которые прекрасно справляются с этим; DRAM работает медленнее, чем скорость ядра, и вы можете динамически запускать ядра Intel с разными скоростями на одном и том же чипе.
pjc50
10
Процессоры Intel Core серии работают на разных скоростях на одном кристалле все время.
Ник Т
9
Единственное существование архитектур big.LITTLE и независимое от ядра повышение тактовой частоты доказывает, что вы ошибаетесь. Гетерогенная многопроцессорная обработка является основным направлением. Это может быть сделано, то это будет сделано в телефонах, но по каким - то причинам не в настольных компьютерах.
Agent_L
9
@Agent_L: причина в сложности. Настольные процессоры уже достаточно дороги. Поэтому я повторяю: все возможно, но на самом деле вопрос в том, почему этого не сделано, а не в том, можно ли это сделать. Не нападайте на меня, как если бы я утверждал, что это невозможно - все, что я говорю, это то, что это слишком сложно, дорого и слишком мало, чтобы заинтересовать производителей.
harrymc
46

Почему у нас нет вариантов с разными тактовыми частотами? то есть. 2 «больших» ядра и множество маленьких ядер.

Вполне возможно, что телефон в вашем кармане имеет именно такую ​​схему - ARM big.LITTLE работает именно так, как вы описали. Там даже не разница в тактовой частоте, это могут быть совершенно разные типы ядер - как правило, более медленные такты даже «тупее» (без неупорядоченного выполнения и других оптимизаций ЦП).

По сути, это хорошая идея для экономии батареи, но у нее есть свои недостатки; бухгалтерия для перемещения вещей между различными процессорами более сложная, связь с остальными периферийными устройствами более сложная, и, что наиболее важно, для эффективного использования таких ядер планировщик задач должен быть чрезвычайно умным (и часто «угадывать правильно») ,

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

Однако планировщик имеет ограниченную информацию о виде работы, которую может выполнять каждая задача, и вынужден прибегать к некоторой эвристической (или внешней информации, такой как принудительное использование маски сходства для данной задачи), чтобы решить, где их планировать. Если это не так, вы можете в конечном итоге тратить много времени / энергии на выполнение задачи на медленном ядре и плохо работать с пользователем, или использовать «большие» ядра для задач с низким приоритетом и, таким образом, тратить энергию / энергию. украсть их подальше от задач, которые им понадобятся.

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


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

Matteo Italia
источник
1
Эвристика должна быть довольно простой. Любое вынужденное переключение задач (использование полного временного интервала) является признаком того, что медленный процессор не подходит для этой задачи. Очень низкое использование и все произвольные переключения задач указывают на то, что задача может быть перемещена в медленный процессор.
R ..
3
Другая проблема заключается в том, что 4 глупых ядра 2 ГГц могут занимать больше размера кристалла, чем 2 умных ядра 4 ГГц, или они могут быть меньше и потреблять гораздо меньше энергии, чем ядра 4 ГГц, но работать также намного медленнее
phuclv
2
@R .: В принципе, я согласен с вами, но даже включив некоторую базовую поддержку планировщика для этого, я увидел нелепое столкновение ядра на плате ARM, которую я использовал, так что должно быть что-то еще. Кроме того, большинство «обычных» многопоточных программ написано с учетом SMP, поэтому нет ничего необычного в том, чтобы пулы потоков были такими же большими, как общее количество ядер, а задания тянулись за медленными ядрами.
Matteo Italia
1
@Ramhound: 10-ядерная часть мощностью 120 Вт имеет бюджет мощности 12 Вт на ядро ​​(за исключением одноядерного турбо-режима). Вот почему наивысшие одноядерные часы находятся в четырехъядерных процессорах, где, например, Intel i7-6700k имеет бюджет мощности 91 Вт для 4 ядер: 22,75 Вт на ядро, поддерживаемое всеми активными ядрами (при 4,0 ГГц даже при Рабочая нагрузка AVX2 + FMA как у Prime95). По этой же причине запас по одноядерному Turbo занимает всего 0,2 ГГц по сравнению с 22-ядерным Broadwell E5-2699v4 с 2,2 ГГц при 145 Вт, 3,6 ГГц с турбонаддувом.
Питер Кордес
@Ramhound: добавлен ответ, который расширяет это. Многоядерный Xeon кажется именно тем, что ищет OP: используйте как можно больше ядер с низким энергопотреблением или тратите много энергии на работу с одним потоком, когда это возможно (турбо).
Питер Кордес
14

Производительность в играх, как правило, определяется скоростью одного ядра,

В прошлом (игры эпохи DOS): Правильно.
В наши дни это уже не так. Многие современные игры имеют многопоточность и выигрывают от нескольких ядер. Некоторые игры уже довольны 4 ядрами, и это число, похоже, со временем растет.

в то время как такие приложения, как редактирование видео, определяются количеством ядер.

Вроде правда.

Количество ядер * умноженная на скорость ядра * эффективность.
Если вы сравниваете одно и то же ядро ​​с набором идентичных ядер, то вы в основном правы.

С точки зрения того, что доступно на рынке - кажется, что все процессоры имеют примерно одинаковую скорость с основными различиями в том, что у них больше потоков или больше ядер. Например:

Intel Core i5 7600k, базовая частота 3,80 ГГц, 4 ядра Intel Core i7 7700k, базовая частота 4,20 ГГц, 4 ядра, 8 потоков AMD Ryzen 1600x, базовая частота 3,60 ГГц, 6 ядер, 12 потоков AMD Ryzen 1800x, базовая частота 3,60 ГГц, 8 ядер, 16 потоков

Сравнение разных архитектур опасно, но хорошо ...

Итак, почему мы видим эту тенденцию увеличения ядер со всеми ядрами, имеющими одинаковую тактовую частоту?

Частично потому что мы столкнулись с барьером. Дальнейшее увеличение тактовой частоты означает, что требуется больше энергии и больше тепла. Больше тепла означало еще больше энергии. Мы попробовали этот путь, в результате получился ужасный Pentium 4. Горячий и энергоемкий. Трудно охладить. И даже не быстрее, чем грамотно разработанный Pentium-M (P4 на 3,0 ГГц был примерно так же быстр, как P-mob на 1,7 ГГц).

С тех пор мы в основном отказались от увеличения тактовой частоты и вместо этого строим более умные решения. Частично это состояло в том, чтобы использовать несколько ядер с более высокой тактовой частотой.

Например, одно ядро ​​4 ГГц может потреблять столько же энергии и генерировать столько же тепла, сколько три ядра 2 ГГц. Если ваше программное обеспечение может использовать несколько ядер, это будет намного быстрее.

Не все программное обеспечение может сделать это, но современное программное обеспечение, как правило, может.

Что частично объясняет, почему у нас есть чипы с несколькими ядрами, и почему мы продаем чипы с различным количеством ядер.

Что касается тактовой частоты, думаю, я могу выделить три момента:

  • Процессоры с низким энергопотреблением имеют смысл во многих случаях, когда необработанная скорость не требуется. Например, контроллеры домена, настройки NAS, ... Для этого у нас есть процессоры с более низкой частотой. Иногда даже с большим количеством ядер (например, 8-кратный процессор имеет смысл для веб-сервера).
  • В остальном мы обычно приближаемся к максимальной частоте, которую мы можем сделать без перегрева нашего текущего дизайна. (скажем, от 3 до 4 ГГц с текущими проектами).
  • И вдобавок ко всему, мы делаем биннинг. Не все CPU генерируются одинаково. Некоторые процессоры имеют плохие оценки или плохие результаты в части своих чипов, эти части отключены и продаются как другой продукт.

Классическим примером этого был 4-ядерный чип AMD. Если было сломано одно ядро, оно было отключено и продавалось как трехъядерный чип. Когда спрос на эти 3 ядра был высоким, даже 3 ядра были проданы как 3-ядерная версия, и при правильном взломе программного обеспечения вы могли бы снова включить 4-е ядро.

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

И затем есть производство и маркетинг, и это портит это еще дальше.

Почему у нас нет вариантов с разными тактовыми частотами? то есть. 2 «больших» ядра и множество маленьких ядер.

Мы делаем. В местах, где это имеет смысл (например, мобильные телефоны), у нас часто есть SoC с медленным процессором (малой потребляемой мощностью) и несколькими более быстрыми ядрами. Однако в типичном настольном ПК этого не делается. Это сделало бы установку намного более сложной, более дорогой, и не было бы батареи для разряда.

Hennes
источник
1
Как я уже говорил, «я задаю этот вопрос в качестве общего пункта, а не конкретно о тех процессорах, которые я перечислил выше», и была причина, по которой я привел два примера для каждой архитектуры. Если мы рассмотрим два сценария как 1. все большие ядра и 2. два больших и два маленьких - тогда я думаю, что все упомянутые вами пункты применимы к обоим случаям - т.е. теоретическая максимальная одноядерная скорость, распределение фишек, разгон, когда он не используется.
Джейми
Одно ядро ​​с максимальной скоростью не так уж и интересно, когда его не выбирают. Планировщики должны быть обновлены, чтобы фактически отдать предпочтение высокоскоростным ядрам.
Хеннес
10

Почему у нас нет вариантов с разными тактовыми частотами? Например, два «больших» ядра и множество маленьких ядер.

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

У нас уже есть ядра, которые могут замедляться для экономии энергии. Какой смысл ограничивать их максимальную производительность?

Дэвид Шварц
источник
2
Это то, о чем я думал. Зачем намеренно использовать некоторые низшие компоненты, когда все они могут быть элитными? +1.
MPW
1
@MPW Выбор не между созданием большого ядра и его стерилизацией, а между большим и маленьким ядрами. Поскольку у вас есть два конкурирующих сценария - однопоточная и многопоточная, почему бы не максимизировать оба? Знаем ли мы, что вы не можете изготовить чип с несколькими большими и множеством маленьких ядер?
Джейми
@Jamie Вы можете изготовить чип с несколькими большими и маленькими ядрами. Но меньшие ядра не будут работать на более низкой тактовой частоте.
Дэвид Шварц
Они были бы, если бы они были спроектированы таким образом ... Вопрос в том, почему они не спроектированы таким образом с нуля, не взяв существующий процесс изготовления и не стерилизовав его.
Джейми
@ Джейми, я не понимаю, что ты говоришь. Весь ЦП должен быть выполнен с одним и тем же процессом изготовления, а максимальная тактовая частота в значительной степени характерна для процессов изготовления. Ядра, которые требуют более низкой тактовой частоты на том же уровне изготовления, как правило, будут более сложными и занимают больше места, в противном случае зачем им нужна более низкая тактовая частота?
Дэвид Шварц
9

Почему у нас нет вариантов с разными тактовыми частотами? Например, два «больших» ядра и множество маленьких ядер.

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

Я отчасти удивлен многими другими ответами. Современные процессоры могут и делают это. Вы можете проверить это, например, открыв CPU-Z на смартфоне - мой Google Pixel вполне способен работать с разными ядрами на разных скоростях:

Номинально он равен 2,15 ГГц, но два ядра работают на 1,593 ГГц, а два - на 1,132 ГГц.

Фактически, начиная с 2009 года основные процессоры Intel имеют логику для повышения отдельных ядер выше, при этом разгоняя другие ядра, обеспечивая лучшую производительность одноядерных процессоров, оставаясь в рамках бюджета TDP: http://www.anandtech.com/show/2832/4

Более новые процессоры Intel с «Favored Core» (маркетинговый термин Intel) характеризуют каждое ядро ​​на заводе с самыми быстрыми ядрами, способными повысить сверхвысокую скорость: http://www.anandtech.com/show/11550/the-intel -skylakex-обзор-ядро-i9-7900x-i7-7820x-и-i7-7800x испытания / 7

У чипов AMD Bulldozer была примитивная версия этого: http://www.anandtech.com/show/4955/the-bulldozer-review-amd-fx8150-tested/4

Вероятно , это есть и в новых чипах Ryzen от AMD , хотя здесь об этом прямо не сказано: http://www.anandtech.com/show/11170/the-amd-zen-and-ryzen-7-review-a-deep-dive -он-1800x-1700x-и-1700/11

Грант Ву
источник
Вы отвечаете на другой вопрос. Вопрос в том, много ли больших ядер против пары больших ядер и много маленьких ядер - достоинства двух сценариев. В обеих ситуациях вы можете увеличивать и уменьшать частоту в зависимости от спроса или увеличивать ядро.
Джейми
3
Я так не читаю вопрос. Вопрос не затрагивает архитектурно разные ядра, несмотря на использование слов «большой» и «маленький». Он ориентирован исключительно на тактовую частоту.
Грант Ву
8

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

Причина, по которой все ядра идентичны, заключается в том, что для потока, работающего на одном ядре в одной точке, проще всего запустить на другом ядре в другой точке. Как уже упоминалось ранее, есть часто используемые чипы, которые не следуют этому принципу идентичных ядер, а именно процессоры ARM "big.LITTLE". Хотя, на мой взгляд, самое важное различие между «большими» и «маленькими» ядрами заключается не в тактовой частоте («большие» ядра, как правило, более причудливые, более широкие, более умозрительные ядра, которые получают больше инструкций за такт за счет более высокого энергопотребление, в то время как «маленькие» ядра ближе к единичным, упорядоченным корням с низким энергопотреблением ARM), поскольку они

И, углубляясь в область гетерогенных вычислений, также становится обычным видеть ядра «ЦП» и «ГПУ», интегрированные в один и тот же чип. Они имеют совершенно разные конструкции, запускают разные наборы инструкций, адресуются по-разному и, как правило, также будут работать по-разному.

Hobbs
источник
7

Быстрая однопоточная производительность и очень высокая многопоточная пропускная способность - это именно то, что вы получаете с таким процессором, как Intel Xeon E5-2699v4 .

Это 22-ядерный Broadwell. Поддерживаемая тактовая частота составляет 2,2 ГГц со всеми активными ядрами (например, кодирование видео), но одноядерный макс турбо - 3,6 ГГц.

Поэтому, выполняя параллельную задачу, он использует свой бюджет мощности 145 Вт как 22 ядра по 6,6 Вт. Но при выполнении задачи с несколькими потоками тот же бюджет мощности позволяет нескольким ядрам работать на частоте до 3,6 ГГц. (Более низкая пропускная способность одноядерной памяти и L3-кэша в большом Xeon означает, что он может работать не так быстро, как настольный четырехъядерный процессор на частоте 3,6 ГГц. Одно ядро ​​в настольном процессоре Intel может использовать гораздо больше общая пропускная способность памяти.)

Тактовая частота 2,2 ГГц является низкой из-за тепловых ограничений. Чем больше ядер у процессора, тем медленнее они должны работать, когда все они активны. Этот эффект не очень велик для 4- и 8-ядерных процессоров, о которых вы упоминаете в этом вопросе, потому что 8 не так много ядер, и у них очень высокий уровень энергопотребления. Даже настольные процессоры-энтузиасты заметно демонстрируют этот эффект: Intel Skylake-X i9-7900X представляет собой 10c20t-часть с базовой частотой 3,3 ГГц, максимальная турбо 4,5 ГГц . Это намного больше одноядерного турбо запаса мощности, чем у i7-6700k (4,0 ГГц устойчивый / 4,2 ГГц турбо без разгона).

Масштабирование частоты / напряжения (DVFS) позволяет одному и тому же ядру работать в широком диапазоне кривой производительности / эффективности. См. Также эту презентацию IDF2015 по управлению питанием Skylake , в которой много интересных деталей о том, что ЦП могут делать эффективно, и о соотношении производительности и эффективности как статически во время разработки, так и на лету с DVFS.

На другом конце спектра процессоры Intel Core-M имеют очень низкую постоянную частоту, например 1,2 ГГц при 4,5 Вт , но могут работать на частоте до 2,9 ГГц. С активными несколькими ядрами они будут работать с более эффективной тактовой частотой, как гигантские Xeon.

Вам не нужна гетерогенная архитектура стиля big.LITTLE, чтобы получить большую часть преимуществ. Маленькие ядра в ARM big.LITTLE - довольно дрянные ядра, которые не годятся для вычислительной работы. Дело в том, чтобы просто запустить пользовательский интерфейс с очень низким энергопотреблением. Многие из них не были бы хороши для кодирования видео или другого серьезного перебора чисел. ( @ Lưu Vĩnh Phúc нашел несколько рассуждений о том, почему у x86 нет big.LITTLE . По сути, тратить дополнительное количество кремния на сверхмалое сверхмалое ядро не стоило бы для обычного использования настольного компьютера или ноутбука.)


в то время как такие приложения, как редактирование видео, определяются количеством ядер. [Разве 2x 4,0 ГГц + 4x 2,0 ГГц не будут лучше при многопоточной рабочей нагрузке, чем 4x 4 ГГц?]

Это ваше ключевое недоразумение. Вы, кажется, думаете, что одинаковое количество тактов в секунду более полезно, если оно распределено по нескольким ядрам. Это никогда не так. Это больше похоже

cores * perf_per_core * (scaling efficiency)^cores

( perf_per_coreэто не то же самое, что тактовая частота, потому что Pentium 4 с частотой 3 ГГц будет работать намного меньше за такт, чем Skylake с частотой 3 ГГц.)

Что еще более важно, очень редко, когда эффективность составляет 1,0. Некоторые смущающие параллельные задачи действительно масштабируются почти линейно (например, компиляция нескольких исходных файлов). Но кодирование видео не так. Для x264 масштабирование очень хорошо до нескольких ядер, но ухудшается с увеличением количества ядер. Например, от 1 до 2 ядер почти удвоит скорость, но от 32 до 64 ядер поможет гораздо меньше для типичного кодирования 1080p. Точка, в которой скорость плато зависит от настроек. ( -preset veryslowбольше анализирует каждый кадр и может занять больше ядер, чем -preset fast).

С большим количеством очень медленных ядер однопоточные части x264 станут узкими местами. (Например, окончательное кодирование потока битов CABAC. Это эквивалент gzip для h.264 и не распараллеливание.) Наличие нескольких быстрых ядер решило бы это, если бы ОС знала, как это запланировать (или если x264 прикрепил соответствующие потоки к быстрые ядра).

x265 может использовать в своих интересах больше ядер, чем x264, поскольку у него больше анализа, а дизайн WP.2 в h.265 позволяет больше кодировать и декодировать параллелизм. Но даже для 1080p вам не хватает параллелизма для использования в какой-то момент.


Если у вас есть несколько видео для кодирования, хорошо работает несколько видео в параллельном масштабе, за исключением конкуренции за общие ресурсы, такие как емкость и пропускная способность кэша L3, а также пропускная способность памяти. Меньше более быстрых ядер могло бы получить больше преимуществ от того же объема кеша L3, так как им не нужно было бы работать сразу над многими разными частями проблемы.

Питер Кордес
источник
4

Несмотря на то, что можно проектировать компьютеры с разными частями, работающими на разных независимых скоростях, для арбитража ресурсов часто требуется возможность быстро решить, какой запрос обслуживать первым, что, в свою очередь, требует знания того, достаточно ли быстро поступил какой-либо другой запрос, чтобы получить приоритет , Решать такие вещи в большинстве случаев довольно просто. Нечто подобное схеме "викторины" может быть реализовано всего с двумя транзисторами. Проблема в том, что принятие быстрых решений, которые надежнооднозначно сложно. Единственный практический способ сделать это во многих случаях - это использовать решение, называемое «синхронизатором», которое может избежать двусмысленности, но вводит задержку в два цикла. Можно было бы разработать контроллер кэширования, который бы надежно осуществлял арбитраж между двумя системами с раздельными тактовыми импульсами, если бы каждый был готов допустить двухтактную задержку для каждой операции, чтобы определить, кто выиграл арбитраж. Однако такой подход был бы менее чем полезен, если бы хотелось, чтобы кэш немедленно отвечал на запросы в отсутствие конкуренции, поскольку даже не оспариваемые запросы по-прежнему имели бы задержку в два цикла.

Запуск всего с общих часов исключает необходимость синхронизации, что, в свою очередь, позволяет избежать двухтактной задержки связи каждый раз, когда необходимо передавать информационные или управляющие сигналы между тактовыми доменами.

Supercat
источник
4

Настольные компьютеры уже делают это.

Они имеют (набор) ЦП (ов), с активными 1-72 потоками одновременно, и (набор) GPU (ов) с 16-7168 вычислительными блоками.

Графика является примером задачи, которая, по нашему мнению, эффективна для массивной параллельной работы. Графический процессор оптимизирован для выполнения операций, которые мы хотим выполнять с графикой (но это не ограничивается этим).

Это компьютер с несколькими большими ядрами и множеством маленьких ядер.

В общем, обмен одного ядра в X FLOPS на три ядра в X / 2 FLOPS не стоит; но обмен одного ядра в X FLOPS на сто ядер в X / 5 FLOPS очень того стоит.

При программировании для этого вы генерируете совсем другой код для CPU и для GPU. Много работы сделано, чтобы разделить рабочую нагрузку, чтобы GPU получал задачи, которые лучше всего выполнять на GPU, а CPU - задачи, которые лучше всего выполнять на CPU.

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

Теперь мобильные устройства делают это по другой причине. Они имеют ядра с низким энергопотреблением, которые значительно медленнее, но также потребляют значительно меньше энергии на единицу вычислительной мощности. Это позволяет им значительно продлить срок службы батареи, если не выполнять задачи, интенсивно использующие процессор. Здесь мы имеем другой вид "большой отдачи"; не производительность, а энергоэффективность. Все еще требуется много работы со стороны ОС и, возможно, разработчика приложений, чтобы заставить это работать правильно; только большая отдача стоила того.

Yakk
источник
-1

Причина, по которой обычные системы имеют ядра с одинаковой скоростью, - простая математическая задача. Синхронизация ввода и вывода (с оптимизацией), основанная на одном наборе констант (которые масштабируются = умножаются на количество единиц).

И кто-то здесь сказал, что мобильные устройства имеют несколько процессоров с разными скоростями. Это просто неправда. Это не центральная единица обработки, если она не единица центральной обработки; независимо от того, что производитель говорит, что это или нет. в этом случае [не процессор] это просто «пакет поддержки».

Hypersoft Systems
источник
-10

Я не думаю, что ОП понимает основную электронику. Для работы всех компьютеров требуется одна вещь - часы. Циклы, генерируемые внутренними часами, являются метрономом для перемещения всех данных. Для достижения синхронности все операции должны быть привязаны к общим часам. Это верно как для внутреннего выполнения данных на изолированном компьютере, так и для целых сетей.

Если вы хотите изолировать ядра на процессоре, выполняя их на разных частотах, вы наверняка могли бы спроектировать такую ​​платформу. Хотя для этого потребуется разработка решения для материнской платы, которое связывает каждое отдельное ядро ​​с отдельным набором функций материнской платы. У вас останется 4 отдельных компьютера вместо четырехъядерного компьютера.

В качестве альтернативы, как отметил другой человек, вы можете добавить в свое ядро ​​код, который регулирует частоту ядра на индивидуальной основе. Это приведет к снижению производительности. Вы можете иметь скорость или энергоэффективность - но вы не можете иметь и то и другое.

RyRoUK
источник
1
Я не, следовательно, мой вопрос. Сравнивая Intel i5 7600 с i5 7600k, мы видим, что базовая тактовая частота составляет 100 МГц для обоих, и разница заключается в соотношении ядер. Таким образом, у вас может быть два ядра с одинаковыми базовыми тактовыми частотами 100 МГц, но с разными коэффициентами ядра - нарушает ли этот сценарий требование синхронности?
Джейми
4
Да, это слишком упрощает; не совсем верно, что все операции должны быть привязаны к одним и тем же часам, есть много часовых доменов, и вполне возможно запускать разные ядра с одинаковой скоростью. Автобусные часы не совпадают с внутренними часами и т. Д.
pjc50
11
Современные чипы уже имеют несколько тактовых доменов (даже RTC дешевого и тупого микроконтроллера обычно работает в отдельном домене 32,7 кГц). Вам просто нужно синхронизировать между часовыми доменами. Даже с обычными часами вы можете разделить их на 2, 4, 8 и так далее.
Майкл
1
Все верно. Но это все же снижает эффективность работы. И это всегда цель в отношении производительности. Это была моя точка зрения. Конечно, вы можете сделать это. Но вы получите удар по производительности.
RyRoUK
«Снижает производительность» - по сравнению с чем? Вы предполагаете базовое состояние, в котором у вас n процессоров, работающих с одинаковыми часами. Это не должно быть так. Процессор X + Процессор Y является более мощным / гибким решением, чем один процессор X, независимо от того, какой именно процессор Y.
hmijail