Коммуникационные фабрики и с чем их едят – трудности проектирования

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

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

Коммуникационные фабрики (communication fabrics) – это современный подход к построению системы внутренних соединений функциональных блоков (ядра, контроллеры разнообразных шин, интерфейсов и памяти, видеоускорители и т.п.) процессорного кристалла. Его назначение – обеспечить требуемые пропускную способность и масштабируемость архитектуры (в рамках одного семейства процессоров такие вещи, как количество ядер, наличие/отсутствие каких-то узлов и функций могут варьироваться), преодолев ограничения, свойственные другим решениям. Если одно устройство использует общую шину для передачи данных, то все остальные блоки ожидают, когда шина освободится, чтобы занять её для своих нужд. Внутри же коммуникационной фабрики одновременно может протекать множество транзакций, проводимых разными устройствами и находящихся на разных стадиях исполнения.


Система соединений Intel Atom CE4100 и подключенные к ней блоки
Система соединений Intel Atom CE4100 и подключенные к ней блоки


Кольцевая шина SandyBridge-EX и подключенные к ней блоки
Кольцевая шина SandyBridge-EX и подключенные к ней блоки


Однако, с проектированием коммуникационных фабрик связано множество трудностей, которые я попробую вкратце обрисовать.
Сейчас коммуникационные фабрики используются в процессорах для практически всех сегментов компьютерного рынка: от высокопроизводительных серверных и графических решений, до настольных и встраиваемых систем. Архитектура фабрик для hi-end систем обычно представлена регулярными кольцами (rings) и решетками (meshes) и существенно отличается от используемой во встраиваемых системах. В составе систем на кристалле коммуникационные фабрики нередко решают задачи ввода/вывода и выполнения протокола целостности кэша. Поэтому дизайн коммуникационных фабрик предъявляет повышенные требования к качеству (корректность, производительность, энергопотребление, надежность) и скорости интеграции в современные и будущие продукты.

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

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

Если рассматривать проблему проверки характеристик фабрики, то оказывается, что текущие средства формальной верификации не способны анализировать системы такой сложности. Как правило, проводимый анализ производительности и корректности основывается на имитационном моделировании. При этом высока вероятность упустить существенные граничные случаи, что не позволяет получить надежных гарантий производительности. А убедиться в отсутствии тупиковых состояний (так называемых deadlocks и livelocks) при таком подходе просто невозможно. Кроме того, ряд тупиковых сценариев в принципе невозможно обнаружить, анализируя части системы по отдельности – необходимо рассматривать коммуникационную фабрику в конкретной конфигурации, вместе с подключенными к ней агентами.

Вот такие непростые задачи стоят перед Intel'овскими (и не только) дизайнерами :). В следующих частях, если таковые появятся, я попробую рассказать о том, как решаются проблемы формальной верификации и анализа производительности для коммуникационных фабрик.
Pour de plus amples informations sur les optimisations de compilation, consultez notre Avertissement concernant les optimisations.