Введение
Многоядерный процессор – это микропроцессор на одной интегральной схеме с двумя или более отдельными вычислительными ядрами (например, двухъядерный или четырехъядерный), каждое из которых считывает и выполняет инструкции программы. Инструкции являются стандартными инструкциями процессора (такими как сложение, перемещение данных и переход), но один процессор может одновременно выполнять инструкции на разных ядрах, увеличивая общую скорость для программ, поддерживающих многопоточность или другие методы параллельных вычислений. Производители обычно интегрируют ядра в единую интегральную схему (известную как чип-мультипроцессор или CMP) или в несколько кристаллов в одном корпусе. Микропроцессоры, используемые практически во всех современных персональных компьютерах, являются многоядерными. Многоядерный процессор реализует многопроцессорность в одном физическом корпусе. Разработчики могут тесно или слабо связывать ядра в многоядерном устройстве. Например, ядра могут совместно использовать кэш-память или не использовать, и они могут реализовывать обмен сообщениями или методы связи через общую память. Распространенные сетевые топологии для соединения ядер включают шину, кольцо, двумерную сетку и кроссбар. Однородные многоядерные системы содержат только идентичные ядра; неоднородные многоядерные системы имеют ядра, которые отличаются друг от друга (например, big.LITTLE имеют гетерогенные ядра, использующие один и тот же набор инструкций, в то время как в ускоренных процессорах AMD (APU) ядра не используют один и тот же набор инструкций). Как и в однопроцессорных системах, ядра в многоядерных системах могут реализовывать такие архитектуры, как VLIW, суперскалярная, векторная или многопоточная. Многоядерные процессоры широко используются в различных областях, включая универсальные вычисления, встраиваемые системы, сети, цифровую обработку сигналов (DSP) и графику (GPU). Количество ядер может достигать десятков, а для специализированных чипов – более 10 000.
A multi core processor is a microprocessor on a single integrated circuit with two or more separate processing units, called cores (for example, dual core or quad core), each of which reads and executes program instructions. The instructions are ordinary CPU instructions (such as add, move data, and branch) but the single processor can run instructions on separate cores at the same time, increasing overall speed for programs that support multithreading or other parallel computing techniques. Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP) or onto multiple dies in a single chip package. The microprocessors currently used in almost all personal computers are multi core. A multi core processor implements multiprocessing in a single physical package. Designers may couple cores in a multi core device tightly or loosely. For example, cores may or may not share caches, and they may implement message passing or shared memory inter core communication methods. Common network topologies used to interconnect cores include bus, ring, two dimensional mesh, and crossbar. Homogeneous multi core systems include only identical cores; heterogeneous multi core systems have cores that are not identical (e. g. big. LITTLE have heterogeneous cores that share the same instruction set, while AMD Accelerated Processing Units have cores that do not share the same instruction set). Just as with single processor systems, cores in multi core systems may implement architectures such as VLIW, superscalar, vector, or multithreading. Multi core processors are widely used across many application domains, including general purpose, embedded, network, digital signal processing (DSP), and graphics (GPU). Core count goes up to even dozens, and for specialized chips over 10,000,
The improvement in performance gained by the use of a multi core processor depends very much on the software algorithms used and their implementation. In particular, possible gains are limited by the fraction of the software that can run in parallel simultaneously on multiple cores; this effect is described by Amdahl's law. In the best case, so called embarrassingly parallel problems may realize speedup factors near the number of cores, or even more if the problem is split up enough to fit within each core's cache(s), avoiding use of much slower main system memory. Most applications, however, are not accelerated as much unless programmers invest effort in refactoring. The parallelization of software is a significant ongoing topic of research. Cointegration of multiprocessor applications provides flexibility in network architecture design. Adaptability within parallel models is an additional feature of systems utilizing these protocols. In the consumer market, dual core processors (that is, microprocessors with two units) started becoming commonplace in the late 2000s. Quad core processors were also being adopted for higher end systems. In the late 2010s, hexa core (six cores) started entering the mainstream.
Увеличение производительности, достигаемое за счет использования многоядерного процессора, во многом зависит от используемых программных алгоритмов и их реализации. В частности, возможный прирост ограничен долей программного обеспечения, которое может выполняться параллельно на нескольких ядрах; этот эффект описывается законом Амдаля. В лучшем случае, так называемые "легко распараллеливаемые" задачи могут достигать ускорения, близкого к числу ядер, или даже больше, если задача достаточно разделена, чтобы поместиться в кэш каждого ядра, избегая использования гораздо более медленной основной системной памяти. Однако большинство приложений не ускоряются в такой степени, если программисты не прилагают усилий для их рефакторинга. Параллелизация программного обеспечения является важной и актуальной областью исследований. Совместная интеграция многопроцессорных приложений обеспечивает гибкость при проектировании сетевой архитектуры. Адаптивность в параллельных моделях является дополнительной особенностью систем, использующих эти протоколы. На потребительском рынке двухъядерные процессоры (то есть микропроцессоры с двумя вычислительными блоками) стали широко распространены в конце 2000-х годов. Четырехъядерные процессоры также внедрялись в более производительные системы. В конце 2010-х годов шестиядерные процессоры (шесть ядер) начали выходить на массовый рынок.
A multi core processor is a microprocessor on a single integrated circuit with two or more separate processing units, called cores (for example, dual core or quad core), each of which reads and executes program instructions. The instructions are ordinary CPU instructions (such as add, move data, and branch) but the single processor can run instructions on separate cores at the same time, increasing overall speed for programs that support multithreading or other parallel computing techniques. Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP) or onto multiple dies in a single chip package. The microprocessors currently used in almost all personal computers are multi core. A multi core processor implements multiprocessing in a single physical package. Designers may couple cores in a multi core device tightly or loosely. For example, cores may or may not share caches, and they may implement message passing or shared memory inter core communication methods. Common network topologies used to interconnect cores include bus, ring, two dimensional mesh, and crossbar. Homogeneous multi core systems include only identical cores; heterogeneous multi core systems have cores that are not identical (e. g. big. LITTLE have heterogeneous cores that share the same instruction set, while AMD Accelerated Processing Units have cores that do not share the same instruction set). Just as with single processor systems, cores in multi core systems may implement architectures such as VLIW, superscalar, vector, or multithreading. Multi core processors are widely used across many application domains, including general purpose, embedded, network, digital signal processing (DSP), and graphics (GPU). Core count goes up to even dozens, and for specialized chips over 10,000,
The improvement in performance gained by the use of a multi core processor depends very much on the software algorithms used and their implementation. In particular, possible gains are limited by the fraction of the software that can run in parallel simultaneously on multiple cores; this effect is described by Amdahl's law. In the best case, so called embarrassingly parallel problems may realize speedup factors near the number of cores, or even more if the problem is split up enough to fit within each core's cache(s), avoiding use of much slower main system memory. Most applications, however, are not accelerated as much unless programmers invest effort in refactoring. The parallelization of software is a significant ongoing topic of research. Cointegration of multiprocessor applications provides flexibility in network architecture design. Adaptability within parallel models is an additional feature of systems utilizing these protocols. In the consumer market, dual core processors (that is, microprocessors with two units) started becoming commonplace in the late 2000s. Quad core processors were also being adopted for higher end systems. In the late 2010s, hexa core (six cores) started entering the mainstream.
Терминология
Термины "многоядерный" и "двухъядерный" чаще всего относятся к центральному процессору (CPU), но иногда также применяются к цифровым процессорам сигналов (DSP) и системам на чипе (SoC). Эти термины обычно используются только для обозначения многоядерных микропроцессоров, изготовленных на одном кристалле; отдельные микропроцессорные кристаллы в одном корпусе обычно называют иначе, например, многочиповый модуль. В данной статье термины "многоядерный" и "двухъядерный" используются для обозначения процессоров, изготовленных на одном кристалле, если не указано иное. В отличие от многоядерных систем, термин "многопроцессорный" относится к нескольким физически разделенным процессорным блокам (которые часто содержат специальные схемы для облегчения обмена данными между ними). Термины "многоядерный" и "массивно многоядерный" иногда используются для описания многоядерных архитектур с особенно большим количеством ядер (от десятков до тысяч). Некоторые системы используют множество программно-определяемых микропроцессорных ядер, размещенных на одном FPGA. Каждое "ядро" может рассматриваться как "ядро интеллектуальной собственности" (IP-core), а также как ядро процессора.
Разработка
В то время как технологии производства совершенствуются, уменьшая размер отдельных транзисторов, физические ограничения полупроводниковой микроэлектроники становятся серьезной проблемой при проектировании. Эти физические ограничения могут вызывать значительное тепловыделение и проблемы синхронизации данных. Для повышения производительности центрального процессора используются различные другие методы. Некоторые методы параллелизма на уровне инструкций (ILP), такие как суперскалярное исполнение, подходят для многих приложений, но неэффективны для других, содержащих код, сложный для предсказания. Для многих приложений более подходят методы параллелизма на уровне потоков (TLP), и часто используются несколько независимых процессоров для увеличения общей степени TLP системы. Сочетание увеличения доступной площади (благодаря совершенствованию производственных процессов) и потребности в увеличении TLP привело к разработке многоядерных процессоров.
Коммерческие стимулы
Разработка многоядерных архитектур обусловлена рядом бизнес-мотивов. На протяжении десятилетий производительность процессора можно было повышать за счет уменьшения площади интегральной схемы (ИС), что снижало стоимость одного устройства на ИС. Альтернативно, при той же площади схемы можно было использовать больше транзисторов в конструкции, что увеличивало функциональность, особенно для архитектур с расширенным набором команд (CISC). Тактовая частота также увеличивалась в разы на протяжении десятилетий конца XX века – с нескольких мегагерц в 1980-х годах до нескольких гигагерц в начале 2000-х годов. Когда темпы увеличения тактовой частоты замедлились, для повышения общей вычислительной производительности стали активнее использовать параллельные вычисления в виде многоядерных процессоров. Несколько ядер размещались на одном кристалле процессора, что могло способствовать увеличению продаж процессоров с двумя и более ядрами. Например, Intel разработала 48-ядерный процессор для исследований в области облачных вычислений, каждое ядро которого имеет архитектуру x86.
Преимущества
Близость нескольких ядер CPU на одном кристалле позволяет схемам обеспечения когерентности кэша работать на значительно более высокой тактовой частоте, чем если бы сигналы должны были передаваться за пределы кристалла. Объединение эквивалентных процессоров на одном кристалле значительно повышает производительность операций перехвата кэша (альтернативно: прослушивания шины). Проще говоря, это означает, что сигналы между разными процессорами проходят меньшие расстояния, и, следовательно, меньше подвержены искажениям. Эти более качественные сигналы позволяют передавать больше данных за определенный период времени, поскольку отдельные сигналы могут быть короче и не требуют такого частого повторения. Если кристалл физически помещается в корпус, многоядерные процессоры занимают гораздо меньше места на печатной плате (PCB), чем многочиповые системы SMP. Кроме того, двухъядерный процессор потребляет немного меньше энергии, чем два отдельных одноядерных процессора, главным образом из-за снижения энергозатрат на передачу сигналов за пределы кристалла. Более того, ядра используют общие схемы, такие как кэш L2 и интерфейс с передней шиной (FSB). В плане конкурирующих технологий за доступную площадь кристалла, многоядерная архитектура позволяет использовать проверенные разработки ядер процессоров и создавать продукт с меньшим риском ошибок проектирования, чем разработка нового ядра большей ширины. Также, увеличение объема кэша дает все меньший прирост производительности. Многоядерные чипы также обеспечивают более высокую производительность при меньшем энергопотреблении, что особенно важно для мобильных устройств, работающих от аккумуляторов. Поскольку каждое ядро в многоядерном процессоре обычно более энергоэффективно, чип становится эффективнее, чем одно большое монолитное ядро. Это позволяет достичь более высокой производительности при меньшем энергопотреблении. Однако сложность заключается в дополнительных затратах на разработку параллельного кода.
Недостатки
Максимальное использование вычислительных ресурсов, предоставляемых многоядерными процессорами, требует корректировки как поддержки операционной системы (ОС), так и существующего прикладного программного обеспечения. Кроме того, способность многоядерных процессоров повышать производительность приложений зависит от использования нескольких потоков внутри приложений. Интеграция многоядерного чипа может снизить выход годных при производстве чипов. Они также сложнее в плане теплового управления, чем одноядерные конструкции с меньшей плотностью. Intel частично решил эту проблему, создав свои четырехъядерные процессоры путем объединения двух двухъядерных на одном кристалле с унифицированным кэшем, благодаря чему можно использовать любые два рабочих двухъядерных кристалла, в отличие от производства четырех ядер на одном кристалле и требования, чтобы все четыре работали для получения четырехъядерного процессора. С архитектурной точки зрения, в конечном счете, однопроцессорные конструкции могут более эффективно использовать площадь кремния, чем многоядерные, поэтому приверженность этой архитектуре может повлечь за собой риск устаревания. Наконец, сырая вычислительная мощность – не единственный фактор, ограничивающий производительность системы. Два процессорных ядра, совместно использующие одну и ту же системную шину и пропускную способность памяти, ограничивают реальное увеличение производительности. В отчете за 2009 год доктор Джун Ни показал, что если одно ядро близко к пределу пропускной способности памяти, то переход к двухъядерному процессору может дать прирост от 30% до 70%; если пропускная способность памяти не является проблемой, то можно ожидать прирост в 90%; однако закон Амдаля ставит под сомнение это утверждение. Возможно, приложение, использующее два процессора, в конечном итоге будет работать быстрее на одноядерном, если ограничивающим фактором будет связь между процессорами, что можно рассматривать как улучшение более чем на 100%.
Тенденции
Тенденция в разработке процессоров направлена на постоянное увеличение числа ядер, поскольку процессоры с сотнями и даже тысячами ядер становятся теоретически возможными. Кроме того, многоядерные чипы, сочетающие в себе одновременную многопоточность, память на кристалле и специализированные "гетерогенные" (или асимметричные) ядра, обещают дальнейший прирост производительности и эффективности, особенно при обработке мультимедиа, распознавании образов и в сетевых приложениях. Например, архитектура big.LITTLE включает высокопроизводительное ядро (именуемое 'big') и энергоэффективное ядро (именуемое 'LITTLE'). Также наблюдается тенденция к повышению энергоэффективности за счет оптимизации производительности на ватт с использованием продвинутых методов управления питанием с мелким или сверхмелким шагом, а также динамического изменения напряжения и частоты (например, в ноутбуках и портативных медиаплеерах). Чипы, изначально спроектированные для большого количества ядер (а не эволюционировавшие из одноядерных конструкций), иногда называют многоядерными архитектурами, подчеркивая их принципиальные отличия.
Эффекты программного обеспечения
Устаревшая версия антивирусного приложения может создавать новый поток для процесса сканирования, в то время как его графический поток ожидает команд от пользователя (например, отмены сканирования). В таких случаях многоядерная архитектура малоэффективна для самого приложения, поскольку единственная нить выполняет основную нагрузку и невозможно равномерно распределить работу между несколькими ядрами. Программирование действительно многопоточного кода часто требует сложной координации потоков и может легко приводить к скрытым и трудноуловимым ошибкам из-за переплетения обработки данных, совместно используемых потоками (см. безопасность потоков). Следовательно, отладка такого кода значительно сложнее, чем отладка однопоточного кода при возникновении сбоев. Отсутствие мотивации для разработки многопоточных приложений потребительского уровня было обусловлено относительно редкой потребностью пользователей в максимальном использовании аппаратных ресурсов компьютера. Кроме того, последовательные задачи, такие как декодирование алгоритмов энтропийного кодирования, используемых в видеокодеках, невозможно распараллелить, поскольку каждый полученный результат используется для создания следующего результата алгоритма декодирования энтропии. Учитывая растущий акцент на многоядерные чипы, вызванный серьезными проблемами с тепловыделением и энергопотреблением, возникающими при дальнейшем значительном увеличении тактовой частоты процессора, степень, в которой программное обеспечение может быть многопоточным для использования этих новых чипов, вероятно, станет основным ограничивающим фактором производительности компьютера в будущем. Если разработчики не смогут создавать программное обеспечение, полностью использующее ресурсы, предоставляемые несколькими ядрами, они в конечном итоге достигнут непреодолимого предела производительности. Рынок телекоммуникаций был одним из первых, кому потребовался новый подход к параллельной обработке пакетов данных, поскольку многоядерные процессоры для плоскости передачи данных и управления быстро получили распространение. Эти MPU заменят традиционные сетевые процессоры, основанные на проприетарном микрокоде или пикокоде. Методы параллельного программирования могут напрямую использовать преимущества нескольких ядер. Некоторые существующие модели параллельного программирования, такие как Cilk Plus, OpenMP, OpenHMPP, FastFlow, Skandium, MPI и Erlang, могут использоваться на многоядерных платформах. Intel представила новую абстракцию для параллелизма C++ под названием TBB. Другие исследовательские усилия включают в себя систему Codeplay Sieve, Chapel от Cray, Fortress от Sun и X10 от IBM. Многоядерная обработка также повлияла на возможности современной разработки вычислительного программного обеспечения. Разработчики, программирующие на новых языках, могут обнаружить, что их современные языки не поддерживают многоядерную функциональность. Это требует использования численных библиотек для доступа к коду, написанному на таких языках, как C и Fortran, которые выполняют математические вычисления быстрее, чем более новые языки, такие как C#. Intel MKL и AMD ACML написаны на этих языках и используют преимущества многоядерной обработки. Балансировка рабочей нагрузки приложения между процессорами может быть проблематичной, особенно если они имеют разные характеристики производительности. Существуют различные концептуальные модели для решения этой проблемы, например, использование языка координации и программных блоков (библиотек программирования или функций высшего порядка). Каждый блок может иметь собственную реализацию для каждого типа процессора. Пользователи просто программируют, используя эти абстракции, а интеллектуальный компилятор выбирает наилучшую реализацию в зависимости от контекста. Управление параллелизмом играет центральную роль в разработке параллельных приложений. Основные этапы проектирования параллельных приложений:
Partitioning The partitioning stage of a design is intended to expose opportunities for parallel execution. Hence, the focus is on defining a large number of small tasks in order to yield what is termed a fine grained decomposition of a problem. Communication The tasks generated by a partition are intended to execute concurrently but cannot, in general, execute independently. The computation to be performed in one task will typically require data associated with another task. Data must then be transferred between tasks so as to allow computation to proceed. This information flow is specified in the communication phase of a design. Agglomeration In the third stage, development moves from the abstract toward the concrete. Developers revisit decisions made in the partitioning and communication phases with a view to obtaining an algorithm that will execute efficiently on some class of parallel computer. In particular, developers consider whether it is useful to combine, or agglomerate, tasks identified by the partitioning phase, so as to provide a smaller number of tasks, each of greater size. They also determine whether it is worthwhile to replicate data and computation. Mapping In the fourth and final stage of the design of parallel algorithms, the developers specify where each task is to execute. This mapping problem does not arise on uniprocessors or on shared memory computers that provide automatic task scheduling. On the other hand, on the server side, multi core processors are ideal because they allow many users to connect to a site simultaneously and have independent threads of execution. This allows for Web servers and application servers that have much better throughput.
Разделение. Этап разделения предназначен для выявления возможностей для параллельного выполнения. Поэтому основное внимание уделяется определению большого количества небольших задач для получения так называемого мелкозернистого разложения проблемы.
Partitioning The partitioning stage of a design is intended to expose opportunities for parallel execution. Hence, the focus is on defining a large number of small tasks in order to yield what is termed a fine grained decomposition of a problem. Communication The tasks generated by a partition are intended to execute concurrently but cannot, in general, execute independently. The computation to be performed in one task will typically require data associated with another task. Data must then be transferred between tasks so as to allow computation to proceed. This information flow is specified in the communication phase of a design. Agglomeration In the third stage, development moves from the abstract toward the concrete. Developers revisit decisions made in the partitioning and communication phases with a view to obtaining an algorithm that will execute efficiently on some class of parallel computer. In particular, developers consider whether it is useful to combine, or agglomerate, tasks identified by the partitioning phase, so as to provide a smaller number of tasks, each of greater size. They also determine whether it is worthwhile to replicate data and computation. Mapping In the fourth and final stage of the design of parallel algorithms, the developers specify where each task is to execute. This mapping problem does not arise on uniprocessors or on shared memory computers that provide automatic task scheduling. On the other hand, on the server side, multi core processors are ideal because they allow many users to connect to a site simultaneously and have independent threads of execution. This allows for Web servers and application servers that have much better throughput.
Коммуникация. Задачи, сгенерированные на этапе разделения, предназначены для одновременного выполнения, но, как правило, не могут выполняться независимо. Вычисления, выполняемые в одной задаче, обычно требуют данных, связанных с другой задачей. Затем данные должны передаваться между задачами, чтобы обеспечить продолжение вычислений. Этот информационный поток указывается на этапе коммуникации при проектировании.
Partitioning The partitioning stage of a design is intended to expose opportunities for parallel execution. Hence, the focus is on defining a large number of small tasks in order to yield what is termed a fine grained decomposition of a problem. Communication The tasks generated by a partition are intended to execute concurrently but cannot, in general, execute independently. The computation to be performed in one task will typically require data associated with another task. Data must then be transferred between tasks so as to allow computation to proceed. This information flow is specified in the communication phase of a design. Agglomeration In the third stage, development moves from the abstract toward the concrete. Developers revisit decisions made in the partitioning and communication phases with a view to obtaining an algorithm that will execute efficiently on some class of parallel computer. In particular, developers consider whether it is useful to combine, or agglomerate, tasks identified by the partitioning phase, so as to provide a smaller number of tasks, each of greater size. They also determine whether it is worthwhile to replicate data and computation. Mapping In the fourth and final stage of the design of parallel algorithms, the developers specify where each task is to execute. This mapping problem does not arise on uniprocessors or on shared memory computers that provide automatic task scheduling. On the other hand, on the server side, multi core processors are ideal because they allow many users to connect to a site simultaneously and have independent threads of execution. This allows for Web servers and application servers that have much better throughput.
Агломерация. На третьем этапе разработка переходит от абстрактного к конкретному. Разработчики пересматривают решения, принятые на этапах разделения и коммуникации, с целью получения алгоритма, который будет эффективно выполняться на определенном классе параллельных компьютеров. В частности, разработчики рассматривают, целесообразно ли объединять или агломерировать задачи, определенные на этапе разделения, чтобы получить меньшее количество задач большего размера. Они также определяют, стоит ли реплицировать данные и вычисления.
Partitioning The partitioning stage of a design is intended to expose opportunities for parallel execution. Hence, the focus is on defining a large number of small tasks in order to yield what is termed a fine grained decomposition of a problem. Communication The tasks generated by a partition are intended to execute concurrently but cannot, in general, execute independently. The computation to be performed in one task will typically require data associated with another task. Data must then be transferred between tasks so as to allow computation to proceed. This information flow is specified in the communication phase of a design. Agglomeration In the third stage, development moves from the abstract toward the concrete. Developers revisit decisions made in the partitioning and communication phases with a view to obtaining an algorithm that will execute efficiently on some class of parallel computer. In particular, developers consider whether it is useful to combine, or agglomerate, tasks identified by the partitioning phase, so as to provide a smaller number of tasks, each of greater size. They also determine whether it is worthwhile to replicate data and computation. Mapping In the fourth and final stage of the design of parallel algorithms, the developers specify where each task is to execute. This mapping problem does not arise on uniprocessors or on shared memory computers that provide automatic task scheduling. On the other hand, on the server side, multi core processors are ideal because they allow many users to connect to a site simultaneously and have independent threads of execution. This allows for Web servers and application servers that have much better throughput.
Сопоставление. На четвертом и заключительном этапе проектирования параллельных алгоритмов разработчики определяют, где будет выполняться каждая задача. Эта задача сопоставления не возникает на однопроцессорных компьютерах или на компьютерах с общей памятью, которые обеспечивают автоматическое планирование задач. С другой стороны, на серверной стороне многоядерные процессоры идеально подходят, поскольку они позволяют многим пользователям одновременно подключаться к сайту и иметь независимые потоки выполнения. Это обеспечивает более высокую пропускную способность для веб-серверов и серверов приложений.
Partitioning The partitioning stage of a design is intended to expose opportunities for parallel execution. Hence, the focus is on defining a large number of small tasks in order to yield what is termed a fine grained decomposition of a problem. Communication The tasks generated by a partition are intended to execute concurrently but cannot, in general, execute independently. The computation to be performed in one task will typically require data associated with another task. Data must then be transferred between tasks so as to allow computation to proceed. This information flow is specified in the communication phase of a design. Agglomeration In the third stage, development moves from the abstract toward the concrete. Developers revisit decisions made in the partitioning and communication phases with a view to obtaining an algorithm that will execute efficiently on some class of parallel computer. In particular, developers consider whether it is useful to combine, or agglomerate, tasks identified by the partitioning phase, so as to provide a smaller number of tasks, each of greater size. They also determine whether it is worthwhile to replicate data and computation. Mapping In the fourth and final stage of the design of parallel algorithms, the developers specify where each task is to execute. This mapping problem does not arise on uniprocessors or on shared memory computers that provide automatic task scheduling. On the other hand, on the server side, multi core processors are ideal because they allow many users to connect to a site simultaneously and have independent threads of execution. This allows for Web servers and application servers that have much better throughput.
Лицензирование
Продавцы могут лицензировать некоторые программы "на процессор". Это может вызывать неоднозначность, поскольку под "процессором" может подразумеваться как одно ядро, так и комбинация ядер. Изначально для некоторых своих корпоративных программ Microsoft продолжала использовать систему лицензирования на сокет. Однако для некоторых программ, таких как BizTalk Server 2013, SQL Server 2014 и Windows Server 2016, Microsoft перешла на лицензирование на ядро. Oracle Corporation считает AMD X2 или двухъядерный процессор Intel за один процессор, но использует другие показатели для других типов, особенно для процессоров с более чем двумя ядрами.
Встроенные приложения
Встроенные вычисления функционируют в области процессорных технологий, отличной от области применения "традиционных" персональных компьютеров. Те же технологические тенденции к использованию многоядерных процессоров актуальны и здесь. Более того, во многих случаях применение идеально подходит для многоядерных технологий, если задачу можно легко разделить между различными процессорами. Кроме того, встроенное программное обеспечение обычно разрабатывается под конкретную версию аппаратного обеспечения, что снижает важность вопросов переносимости программного обеспечения, поддержки устаревшего кода или независимых разработчиков по сравнению с персональными или корпоративными вычислениями. В результате разработчикам проще внедрять новые технологии, и, как следствие, существует большее разнообразие многоядерных архитектур и поставщиков.
Сетевые процессоры
Многоядерные сетевые процессоры стали стандартом индустрии, и такие компании, как Freescale Semiconductor, Cavium Networks, Wintegra и Broadcom, выпускают продукты с восемью и более процессорами. Для разработчиков систем ключевой задачей является эффективное использование всех ядер этих устройств для достижения максимальной сетевой производительности на системном уровне, несмотря на ограничения, присущие симметричным многопроцессорным (SMP) операционным системам. Компании, такие как 6WIND, предлагают переносимое программное обеспечение для обработки пакетов, разработанное для работы сетевого уровня данных в среде быстрого доступа, вне операционной системы сетевого устройства.
Цифровая обработка сигналов
В цифровой обработке сигналов наблюдается та же тенденция: у Texas Instruments есть трехъядерные TMS320C6488 и четырехъядерные TMS320C5441, у Freescale – четырехъядерные MSC8144 и шестиъядерные MSC8156 (обе компании заявили о разработке восьмиядерных преемников). Среди новых разработок – семейство Storm 1 от Stream Processors, Inc с 40 и 80 универсальными арифметико-логическими устройствами (АЛУ) на чип, все из которых программируются на C как SIMD-движок, а также Picochip с 300 процессорами на одном кристалле, предназначенными для коммуникационных приложений.
Гетерогенные системы
В гетерогенных вычислениях, где система использует более одного типа процессоров или ядер, многоядерные решения становятся все более распространенными: Xilinx Zynq UltraScale+ MPSoC имеет четырехъядерный ARM Cortex A53 и двухъядерный ARM Cortex R5. Программные решения, такие как OpenAMP, используются для облегчения межпроцессорного взаимодействия. Мобильные устройства могут использовать архитектуру ARM big.LITTLE.
Сравнительные показатели
В исследованиях и разработке многоядерных процессоров часто рассматривается множество вариантов, и для оценки этих вариантов разрабатываются тесты производительности. К существующим тестам относятся SPLASH 2, PARSEC и COSMIC для гетерогенных систем.