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