Обзор мультиядерной и многоядерной архитектуры процессора
В 2001 году был выпущен первый процессор общего назначения, который показал несколько процессорных ядер на той же CMOS матрице: процессор POWER4 от IBM. С тех пор, многоядерные процессоры стали нормой и в настоящее время единственный способ улучшить производительность для высокопроизводительных процессоров заключается в добавлении поддержки нескольких потоков, либо нескольких ядер, или же достигается путем многопоточности ядер для маскировки операций с длительным периодом задержки.
Есть несколько причин, почему тактоваячастота, существовавшая в прошлом, больше не может использоваться. Неустойчивый уровень потребления электроэнергии, подразумеваемый более высокой тактовой частотой, является просто самой очевидной и веской причиной; не менее важен тот факт, что задержки проводов, а не переключение транзистора будет доминирующим вопросом для каждого такта.
По сравнению с однопоточными процессорами, мультиядерные процессоры сильно различаются, и существует огромное множество вариантов их конструкции. В этой главе мы представляем архитектурные принципы архитектуры многоядерных микросхем, обсуждаем некоторые текущие примеры и обращаем внимание на важнейшие вопросы в отношении масштабируемости.
Архитектурные принципы
Многие из технологий, предшествующие нынешней мультиядерной архитектуре были разработаны во время с 1975 по 2000 для параллельных суперкомпьютеров. Например, согласованность кэша, основанная на директориях, появилась в 1978 году благодаря Цензиру и Фитреру ([1]), которые затем ссылались на выслеживающую согласованность кэша (хотя это не называлось так), как на «классическое решение».
Развитие полупроводниковой технологии позволило интегрировать эти идеи в один однокристальный мультипроцессор, который чаще всего называют многоядерным процессором. Однако, как всегда, баланс преимуществ и недостатков приобрёл радикальные отличия в процессе интеграции на одном и том же кремниевом кристалле.
Кроме того, последние достижения в области полупроводниковых технологий позволили добиться большего контроля и гибкости с помощью отдельных областей напряжения и частоты, которые также предоставляли системному программному обеспечению возможность контролировать производительность и регулировать потребление энергии в соответствии с текущими потребностями.
Этот раздел разделен на две части: установившиеся понятия, которые фокусируются на идеях архитектуры, лежащих в основе всех мультиядерных архитектур, так или иначе, и новые концепции, описывающие идеи, которые только были опробованы экспериментально или реализованы в ограниченной степени в коммерческих процессорах.
Установившиеся понятия
Само понятие многоядерной архитектуры подразумевает, по крайней мере, три аспекта, которые будут главными темами этой главы:
• Есть несколько вычислительных ядер
• Существует способ, с помощью которого эти ядра взаимодействуют
• Ядра процессора взаимодействуют с внешним миром.
Многоядерность
Концепция нескольких ядер может показаться тривиальной на первый взгляд. Однако, как мы увидим в разделе, посвященном вопросам масштабируемости, существуют многочисленные компромиссы, стоящие рассмотрения.
В первую очередь нам нужно коснуться вопроса о том, следует ли процессор быть однородным или подвергаться некоторой гетерогенности. Большинство современных многоядерных процессоров общего назначения однородны как в плане архитектур набора команд, так и в плане производительности. Это означает, что ядра могут выполнять операции с одними и теми же двоичными файлами, и что на самом деле не имеет значения, с функциональной точки зрения, на каком ядре работает программа. Последние виды мультиядерной архитектуры, однако, позволяют системному программному обеспечению управлять тактовой частотой индивидуально для каждого ядро для того, чтобы либо сохранить энергию или временно повысить однопоточную производительность.
Большинство из этих однородных видов архитектуры также реализуют общее глобальное адресное пространство с полной синхронизацией кэша (которую мы обсудим позже), так что с точки зрения программного обеспечения, одно ядро невозможно отличить от другого, даже если процесс (или поток) перемещается во время выполнения.
В отличие от этого, неоднородная архитектура имеет по меньшей мере два различных вида ядра, которые могут отличаться как в архитектуре набора команд, а также в функциональности и производительности. Наиболее распространенным примером разнородной мультиядерной архитектуры является архитектура Cell BE, совместно разработанная IBM, Sony и Toshiba и используемая в таких областях, как игровые устройства и компьютеры, ориентированные на вычисления высокой производительности.
Однородная архитектура с общей глобальной памятью, несомненно, является более лёгкой для параллельного принципа организации – это значит, что программа может использовать все ядро – чем неоднородная архитектура, где ядра имеют разный набор команд. С другой стороны, в случае приложения, которое естественно поддерживает разделение на долговечные потоки управления с небольшой или регулярной коммуникацией, имеет смысл вручную устанавливать перегородки на ядра, которые специализируется на конкретной задаче.
Внутренне организация ядер может иметь существенные различия. Все современные конструкции ядра сегодня поставлены на конвейер, где инструкции декодируются и выполняются поэтапно, чтобы улучшить общую пропускную способность, хотя задержка производительности остается прежней или даже увеличивается. Большинство высокопроизводительных конструкций также имеют ядра с адаптивной динамической диспетчеризацией команд, сделанных на аппаратном уровне. Эти методы увеличивают среднее число команд, выполняемых за один так, но из-за ограниченного параллелизма на уровне команд в унаследованных системах и того, что эти методы, как правила, отличаются сложностью и большим потреблением энергии, а также занимают реальный объем кремниевой поверхности, они менее важны при современных мультиядерных видах архитектуры. По факту, в некоторых новых видах архитектур, таких как Intel, Knights Corner, разработчики вернулись к простым ядрам с последовательным запуском операций команды (хотя в случае с Knights Corner дополненных мощными векторными командами, для того, чтобы уменьшить след кремния и потребляемую мощность каждого ядра).
Счетчик для измерения ограниченного параллелизма на уровне инструкций, добавленный в самые передовые ядра, является одновременно многопоточным, и возможно, более известен под брендом Intel Hyper-Threading. Это аппаратный метод, который способствует лучшему использованию аппаратных ресурсов, когда многозадачный конвейер может выбрать этот процесс из двух или более потоков. Преимущества заключаются в том, что для приложений с активно используемым параллелизмом на уровне команд производительность одного потока является высокой, в то время как для приложений с пониженным параллелизмом на уровне команд может быть использован параллелизм на уровне потока. Одновременная многопоточность имеет положительное свойство, являясь относительно дешевой с точки зрения площади (состояния для каждого потока и простого механизма выбора потока) и дополнительного расхода энергии.
