Многоядерный процессор представляет собой компьютерный процессор на одной интегральную схему с двумя или более отдельными блоками обработки, называемых сердечниками, каждый из которых считывает и выполняет программные инструкции. Инструкции представляют собой обычные инструкции ЦП (такие как добавление, перемещение данных и переход), но отдельный процессор может одновременно выполнять инструкции на отдельных ядрах, увеличивая общую скорость для программ, поддерживающих многопоточность или другие методы параллельных вычислений. Производители обычно интегрируют ядра в один кристалл интегральной схемы (известный как мультипроцессор микросхемы или CMP) или на несколько кристаллов в одном корпусе микросхемы. Микропроцессоры, которые в настоящее время используются почти во всех персональных компьютерах, являются многоядерными.
Многоядерный процессор реализует многопроцессорность в одном физическом корпусе. Разработчики могут плотно или свободно соединять ядра в многоядерном устройстве. Например, ядра могут или не могут совместно использовать кеши, и они могут реализовывать методы межъядерной передачи сообщений или совместно используемой памяти. Общие сетевые топологии, используемые для соединения ядер, включают шину, кольцо, двумерную сетку и перекладину. Однородные многоядерные системы включают только идентичные ядра; В гетерогенных многоядерных системах ядра не идентичны (например, big.LITTLE имеет гетерогенные ядра с одним и тем же набором инструкций, а у AMD Accelerated Processing Units есть ядра, которые не используют один и тот же набор инструкций). Как и в однопроцессорных системах, ядра в многоядерных системах могут реализовывать такие архитектуры, как VLIW, суперскалярная, векторная или многопоточность.
Многоядерные процессоры широко используются во многих областях приложений, включая универсальные, встроенные, сетевые, цифровые процессоры обработки сигналов (DSP) и графику (GPU). Количество ядер достигает даже десятков, а для специализированных микросхем - более 10 000, а в суперкомпьютерах (то есть кластерах микросхем) - может превышать 10 миллионов.
Повышение производительности за счет использования многоядерного процессора во многом зависит от используемых программных алгоритмов и их реализации. В частности, возможный выигрыш ограничен той частью программного обеспечения, которое может работать параллельно одновременно на нескольких ядрах; этот эффект описывается законом Амдала. В лучшем случае, так называемые неприятно параллельные проблемы могут реализовать факторы ускорения, близкие к количеству ядер, или даже больше, если проблема разделена настолько, чтобы поместиться в кеш-память каждого ядра, избегая использования гораздо более медленной основной системной памяти.. Однако большинство приложений не ускоряются так сильно, если программисты не вкладывают чрезмерно много усилий в перефакторинг всей проблемы.
Распараллеливание программного обеспечения - важная тема постоянных исследований. Совместная интеграция многопроцессорных приложений обеспечивает гибкость при проектировании сетевой архитектуры. Адаптивность в рамках параллельных моделей - дополнительная особенность систем, использующих эти протоколы.
Термины многоядерный и двухъядерный чаще всего относятся к некоторому типу центрального процессора (ЦП), но иногда также применяются к процессорам цифровых сигналов (DSP) и системе на кристалле (SoC). Эти термины обычно используются только для обозначения многоядерных микропроцессоров, которые производятся на одном кристалле интегральной схемы ; отдельные кристаллы микропроцессора в одном корпусе обычно называются другим именем, например, многочиповый модуль. В этой статье используются термины «многоядерный» и «двухъядерный» для ЦП, изготовленных на одной и той же интегральной схеме, если не указано иное.
В отличие от многоядерных систем, термин « многопроцессорность» относится к нескольким физически отдельным процессорам (которые часто содержат специальные схемы для облегчения связи друг с другом).
Термины многоядерный и массовый многоядерный иногда используются для описания многоядерных архитектур с особенно большим количеством ядер (от десятков до тысяч).
В некоторых системах используется множество программных ядер микропроцессора, размещенных на одной ПЛИС. Каждое «ядро» можно рассматривать как « ядро интеллектуальной собственности полупроводников », а также ядро ЦП.
В то время как технологии производство улучшается, уменьшая размер отдельного ворота, физические пределы полупроводниковой -А микроэлектроника стали основной проблемой дизайна. Эти физические ограничения могут вызвать значительное рассеивание тепла и проблемы с синхронизацией данных. Различные другие методы используются для повышения производительности процессора. Некоторые методы параллелизма на уровне инструкций (ILP), такие как суперскалярная конвейерная обработка, подходят для многих приложений, но неэффективны для других, содержащих труднопредсказуемый код. Многие приложения лучше подходят для методов параллелизма на уровне потоков (TLP), а несколько независимых процессоров обычно используются для увеличения общего TLP системы. Сочетание увеличенного доступного пространства (из-за усовершенствованных производственных процессов) и потребности в увеличении TLP привело к разработке многоядерных процессоров.
Несколько бизнес-мотивов стимулируют разработку многоядерных архитектур. На протяжении десятилетий можно было улучшить производительность ЦП за счет уменьшения площади интегральной схемы (ИС), что снизило стоимость одного устройства на ИС. В качестве альтернативы, для той же области схемы можно было бы использовать больше транзисторов в конструкции, что повысило бы функциональность, особенно для архитектур со сложным набором команд (CISC). Тактовые частоты также выросли на порядки в десятилетия конца 20-го века, с нескольких мегагерц в 1980-х годах до нескольких гигагерц в начале 2000-х.
По мере того как скорость повышения тактовой частоты замедлялась, все большее использование параллельных вычислений в форме многоядерных процессоров преследовалось для повышения общей производительности обработки. На одном и том же чипе ЦП использовалось несколько ядер, что могло привести к увеличению продаж чипов ЦП с двумя или более ядрами. Например, Intel выпустила 48-ядерный процессор для исследований в области облачных вычислений; каждое ядро имеет архитектуру x86.
Поскольку производители компьютеров уже давно реализовали конструкции с симметричной многопроцессорной обработкой (SMP) с использованием дискретных ЦП, проблемы, связанные с реализацией архитектуры многоядерных процессоров и ее поддержкой программным обеспечением, хорошо известны.
Кроме того:
Чтобы продолжать регулярно улучшать производительность процессоров общего назначения, такие производители, как Intel и AMD, обратились к многоядерным конструкциям, жертвуя более низкими производственными затратами в пользу более высокой производительности в некоторых приложениях и системах. Разрабатываются многоядерные архитектуры, но также и альтернативы. Особенно сильным претендентом на устоявшиеся рынки является дальнейшая интеграция периферийных функций в чип.
Близость нескольких ядер ЦП на одном кристалле позволяет схеме когерентности кэша работать с гораздо более высокой тактовой частотой, чем это возможно, если сигналы должны проходить вне кристалла. Объединение эквивалентных процессоров на одном кристалле значительно улучшает производительность операций отслеживания кеша (альтернатива: отслеживание шины ). Проще говоря, это означает, что сигналы между разными ЦП проходят меньшие расстояния, и, следовательно, эти сигналы меньше ухудшаются. Эти сигналы более высокого качества позволяют отправлять больше данных за определенный период времени, поскольку отдельные сигналы могут быть короче и их не нужно повторять так часто.
Предполагая, что кристалл физически может поместиться в корпус, конструкции многоядерных процессоров требуют гораздо меньше места на печатной плате, чем конструкции многочиповых SMP. Кроме того, двухъядерный процессор потребляет немного меньше энергии, чем два связанных одноядерных процессора, в основном из-за меньшей мощности, необходимой для передачи сигналов, внешних по отношению к микросхеме. Кроме того, ядра используют общие схемы, такие как кэш L2 и интерфейс с внешней шиной (FSB). С точки зрения конкурирующих технологий для доступной области кремниевых кристаллов, многоядерная конструкция может использовать проверенные конструкции библиотеки ядер ЦП и производить продукт с меньшим риском ошибки проектирования, чем при разработке новой конструкции с более широким ядром. Кроме того, добавление большего количества кеша страдает от уменьшения отдачи.
Многоядерные чипы также обеспечивают более высокую производительность при меньшем энергопотреблении. Это может быть важным фактором для мобильных устройств, работающих от батарей. Поскольку каждое ядро многоядерного процессора обычно более энергоэффективно, чип становится более эффективным, чем одно большое монолитное ядро. Это обеспечивает более высокую производительность при меньшем потреблении энергии. Однако проблема заключается в дополнительных накладных расходах на написание параллельного кода.
Максимальное использование вычислительных ресурсов, предоставляемых многоядерными процессорами, требует корректировки как поддержки операционной системы (ОС), так и существующего прикладного программного обеспечения. Кроме того, способность многоядерных процессоров увеличивать производительность приложений зависит от использования нескольких потоков в приложениях.
Интеграция многоядерного чипа может снизить производительность производства чипов. Кроме того, с ними труднее работать в термическом отношении, чем с одноядерными конструкциями с меньшей плотностью. Intel частично решила эту первую проблему, создав свои четырехъядерные конструкции, объединив два двухъядерных на одном кристалле с унифицированным кешем, поэтому можно использовать любые два рабочих двухъядерных кристалла, в отличие от производства четырех ядер на одном кристалле. один кристалл и требует, чтобы все четыре работали для создания четырехъядерного процессора. С архитектурной точки зрения, в конечном итоге конструкции с одним процессором могут лучше использовать площадь поверхности кремния, чем многопроцессорные ядра, поэтому приверженность разработке этой архитектуры может нести риск устаревания. Наконец, необработанная вычислительная мощность - не единственное ограничение производительности системы. Два ядра обработки, совместно использующие одну системную шину и пропускную способность памяти, ограничивают реальное преимущество в производительности. В отчете за 2009 год д-р Джун Ни показал, что если одно ядро близко к ограничению пропускной способности памяти, то переход на двухъядерный процессор может дать улучшение на 30-70%; если пропускная способность памяти не проблема, можно ожидать улучшения на 90%; однако закон Амдала делает это утверждение сомнительным. Приложение, использующее два процессора, могло бы работать быстрее на одноядерном, если бы связь между процессорами была ограничивающим фактором, что можно было бы считать улучшением более чем на 100%.
Тенденция в разработке процессоров заключалась в постоянно увеличивающемся количестве ядер, поскольку теоретически становятся возможными процессоры с сотнями или даже тысячами ядер. Кроме того, многоядерные микросхемы в сочетании с одновременной многопоточностью, памятью на кристалле и специализированными «гетерогенными» (или асимметричными) ядрами обещают дальнейшее повышение производительности и эффективности, особенно при обработке мультимедиа, распознавания и сетевых приложений. Например, ядро big.LITTLE включает в себя высокопроизводительное ядро (называемое «большим») и ядро с низким энергопотреблением (называемое «LITTLE»). Также существует тенденция к повышению энергоэффективности за счет сосредоточения внимания на производительности на ватт с усовершенствованным мелкозернистым или сверхмелкозернистым управлением питанием и динамическим масштабированием напряжения и частоты (например, портативные компьютеры и портативные медиаплееры ).
Микросхемы, разработанные с самого начала для большого количества ядер (а не возникшие на основе одноядерных схем ), иногда называют многоядерными, что подчеркивает качественные различия.
Состав и баланс ядер в многоядерной архитектуре очень разнообразны. В некоторых архитектурах используется один повторяющийся проект ядра («однородный»), в то время как в других используется смесь разных ядер, каждое из которых оптимизировано для своей « разнородной » роли.
Реализация и интеграция нескольких ядер существенно влияет как на навыки программирования разработчика, так и на ожидания потребителей в отношении приложений и интерактивности по сравнению с устройством. Устройство, рекламируемое как восьмиядерное, будет иметь независимые ядра только в том случае, если оно рекламируется как True Octa-core или аналогичный стиль, в отличие от всего лишь двух наборов четырехъядерных процессоров, каждый с фиксированной тактовой частотой.
Статья Рика Мерритта, EE Times 2008, «Разработчики процессоров обсуждают будущее многоядерных процессоров», включает следующие комментарии:
Чак Мур [...] предположил, что компьютеры должны быть похожи на мобильные телефоны, с использованием различных специализированных ядер для запуска модульного программного обеспечения, запланированного с помощью высокоуровневого интерфейса программирования приложений.
[...] Ацуши Хасэгава, старший главный инженер Renesas, в целом согласен. Он предположил, что использование в мобильном телефоне множества специализированных ядер, работающих согласованно, является хорошей моделью для будущих многоядерных устройств.
[...] Анант Агарвал, основатель и исполнительный директор стартапа Tilera, придерживается противоположной точки зрения. Он сказал, что многоядерные чипы должны представлять собой однородные наборы ядер общего назначения, чтобы модель программного обеспечения оставалась простой.
Устаревшая версия антивирусного приложения может создать новый поток для процесса сканирования, в то время как его поток графического интерфейса ожидает команд от пользователя (например, отменить сканирование). В таких случаях многоядерная архитектура приносит мало пользы самому приложению из-за того, что всю тяжелую работу выполняет один поток, а также из-за невозможности равномерно распределить работу между несколькими ядрами. Программирование действительно многопоточного кода часто требует сложной координации потоков и может легко привести к появлению тонких и трудно обнаруживаемых ошибок из-за переплетения обработки данных, совместно используемых потоками (см. Потокобезопасность ). Следовательно, такой код намного сложнее отлаживать, чем однопоточный код, когда он ломается. Было очевидным отсутствие мотивации для написания поточных приложений потребительского уровня из-за относительной редкости потребительского спроса на максимальное использование компьютерного оборудования. Кроме того, последовательные задачи, такие как декодирование алгоритмов энтропийного кодирования, используемых в видеокодеках, невозможно распараллелить, поскольку каждый сгенерированный результат используется для создания следующего результата алгоритма энтропийного декодирования.
Принимая во внимание растущее внимание к конструкции многоядерных микросхем из-за серьезных проблем с тепловым и энергопотреблением, возникающих в результате любого дальнейшего значительного увеличения тактовой частоты процессора, степень, в которой программное обеспечение может быть многопоточным для использования преимуществ этих новых микросхем, вероятно, будет меньше. единственное самое серьезное ограничение производительности компьютеров в будущем. Если разработчики не могут разработать программное обеспечение для полного использования ресурсов, предоставляемых несколькими ядрами, они в конечном итоге достигнут непреодолимого потолка производительности.
Рынок телекоммуникаций был одним из первых, кто нуждался в новом дизайне параллельной обработки пакетов тракта данных, потому что эти многоядерные процессоры были очень быстро адаптированы для тракта данных и плоскости управления. Эти MPU заменят традиционные сетевые процессоры, основанные на патентованном микрокоде или пикокоде.
Методы параллельного программирования могут напрямую выиграть от использования нескольких ядер. Некоторые существующие модели параллельного программирования, такие как Cilk Plus, OpenMP, OpenHMPP, FastFlow, Skandium, MPI и Erlang, могут использоваться на многоядерных платформах. Intel представила новую абстракцию для параллелизма C ++ под названием TBB. Другие исследовательские разработки включают систему сита Codeplay, Cray's Chapel, Sun's Fortress и IBM X10.
Многоядерная обработка также повлияла на возможности разработки современного вычислительного программного обеспечения. Разработчики, программирующие на новых языках, могут обнаружить, что их современные языки не поддерживают многоядерные функции. Затем это требует использования числовых библиотек для доступа к коду, написанному на таких языках, как C и Fortran, которые выполняют математические вычисления быстрее, чем новые языки, такие как C #. MKL Intel и ACML AMD написаны на этих родных языках и используют преимущества многоядерной обработки. Балансировка нагрузки приложения между процессорами может быть проблематичной, особенно если они имеют разные характеристики производительности. Существуют различные концептуальные модели для решения проблемы, например, с использованием координационного языка и строительных блоков программы (программных библиотек или функций высшего порядка). У каждого блока может быть своя собственная реализация для каждого типа процессора. Пользователи просто программируют, используя эти абстракции, а интеллектуальный компилятор выбирает лучшую реализацию на основе контекста.
Управление параллелизмом приобретает центральную роль в разработке параллельных приложений. Основные этапы разработки параллельных приложений:
С другой стороны, на стороне сервера многоядерные процессоры идеальны, потому что они позволяют множеству пользователей одновременно подключаться к сайту и иметь независимые потоки выполнения. Это позволяет веб-серверам и серверам приложений иметь гораздо лучшую пропускную способность.
Поставщики могут лицензировать некоторое программное обеспечение «на процессор». Это может вызвать двусмысленность, поскольку «процессор» может состоять либо из одного ядра, либо из комбинации ядер.
Встроенные вычисления работают в области процессорной технологии, отличной от таковой для "обычных" ПК. То же самое технологическое стремление к многоядерности применимо и здесь. Действительно, во многих случаях приложение "естественным образом" подходит для многоядерных технологий, если задача может быть легко разделена между различными процессорами.
Кроме того, встроенное программное обеспечение обычно разрабатывается для конкретной версии аппаратного обеспечения, что делает проблемы переносимости программного обеспечения, устаревшего кода или поддержки независимых разработчиков менее критичными, чем в случае ПК или корпоративных вычислений. В результате разработчикам легче внедрять новые технологии, и в результате появляется большее разнообразие архитектур и поставщиков многоядерных процессоров.
По состоянию на 2010 год многоядерные сетевые процессоры стали массовыми, и такие компании, как Freescale Semiconductor, Cavium Networks, Wintegra и Broadcom, производили продукты с восемью процессорами. Для разработчика системы ключевой задачей является использование всех ядер в этих устройствах для достижения максимальной сетевой производительности на системном уровне, несмотря на ограничения производительности, присущие операционной системе с симметричной многопроцессорной обработкой (SMP). Такие компании, как 6WIND, предоставляют портативное программное обеспечение для обработки пакетов, разработанное таким образом, чтобы уровень сетевых данных работал в среде быстрого доступа вне операционной системы сетевого устройства.
В области цифровой обработки сигнала, та же тенденция относится: Texas Instruments имеет три-жильный TMS320C6488 и четырьмя ядрами TMS320C5441, Freescale с четырьмя ядрами MSC8144 и шестиядерный MSC8156 (и оба заявили, что они работают на восемь сердцевиной наследников). Новые записи включают семейство Storm-1 от Stream Processors, Inc с 40 и 80 универсальными ALU на чип, все программируемые на C как SIMD-движок, и Picochip с тремя сотнями процессоров на одном кристалле, ориентированные на коммуникационные приложения.
В гетерогенных вычислениях, где система использует более одного процессора или ядер, многоядерные решения становятся все более распространенными: Xilinx Zynq UltraScale + MPSoC имеет четырехъядерный ARM Cortex-A53 и двухъядерный ARM Cortex-R5. Программные решения, такие как OpenAMP, используются для облегчения межпроцессорной связи.
Мобильные устройства могут использовать архитектуру ARM big.LITTLE.
При исследовании и разработке многоядерных процессоров часто сравниваются многие варианты, и для помощи в таких оценках разрабатываются тесты. Существующие тесты включают SPLASH-2, PARSEC и COSMIC для гетерогенных систем.