Архитектура 48-ядерного чипа, который исследователи назвали облачным компьютером на кристалле (Single Chip Cloud Computer, SCC), по утверждению Мэттсона, является произвольно масштабируемой: «Ядра можно добавлять совершенно свободно. В принципе мы можем создать процессор даже с 1000 ядрами».
Однако при таком количестве ядер диаметр ячеистой сети, соединяющей ядра друг с другом, вырастет настолько, что это начнет отрицательно сказываться на производительности.
В Intel твердо уверены, что дальнейшее развитие микропроцессоров пойдет по пути увеличения количества ядер на кристалле. Но с ростом числа ядер инженерам корпорации приходится преодолевать определенные конструктивные сложности.
Архитектура нынешних многоядерных процессоров Intel опирается на набор протоколов, которые обеспечивают когерентность кэша — идентичность копий данных из системной памяти, кэшируемых каждым ядром.
С увеличением количества ядер сохранять когерентность кэша становится все сложнее, отмечает Мэттсон: «Нагрузка из-за обработки протоколов когерентности с числом ядер возрастает, что со временем приводит к 'стене когерентности' — ситуации, когда преимущества от дальнейшего добавления ядер сводятся на нет».
По убеждению Мэттсона, разумнее было бы отказаться от механизма когерентности кэша и заменить его на систему обмена сообщениями между ядрами.
Инженерная группа, в состав которой входит Мэттсон, занимается разработкой механизма передачи сообщений, способного масштабироваться по мере увеличения количества ядер на кристалле.
Экспериментальный чип с 48 ядрами создан в рамках исследовательской программы Intel TeraScale. Как подчеркивает Мэттсон, этот процессор не планируется превращать в коммерческий продукт. Экземпляры чипа в ограниченном количестве распределили между исследователями и программистами, чтобы те могли создать для него инструменты разработки.
Первый образец процессора был изготовлен по технологии 45 нм около года тому назад. Он представляет собой матрицу из 6х4 «плиток», каждая из которых содержит два ядра. В процессоре более 1,3 млрд транзисторов, а его потребляемая мощность изменяется от 25 до 125 Вт.
Ради простоты за основу для ядер инженеры взяли готовую конструкцию процессора Pentium 1994 года. «Производительность этого чипа — не главное», — поясняет Мэттсон. В процессоре используется стандартный набор инструкций x86.
Новизна чипа в его «плиточной» (tile) архитектуре и инфраструктуре адресации. У каждого ядра имеется интерфейсный компонент для связи с ячеистой сетью, который упаковывает данные в пакеты и связывается с имеющимся на кристалле маршрутизатором. У каждой «плитки» также есть буфер для передачи сообщений — оперативная память емкостью 16 Кбайт.
Инженеры испробовали различные способы оптимизации обмена сообщениями между большим количеством ядер. Исследователи организовали передачу данных по протоколу TCP/IP и запустили на каждом из ядер отдельную копию операционной системы на основе Linux. На основе чипа в принципе можно было организовать 48-узловой Linux-кластер, но, по утверждению Мэттсона, «это было бы слишком скучно».
«Интересной задачу сделал вопрос о том, насколько различные модели программирования применимы к уникальным особенностям данного чипа», — отметил Мэттсон.
Инженеры также разработали небольшую библиотеку API для доступа к функциям обмена сообщениями между ядрами под названием RCCE (Мэттсон произнес это сокращение как «Рокки»).
Испытания показали, что обмен сообщениями посредством RCCE может происходить с такой же скоростью, как и в Linux-кластере по протоколу TCP/IP. Оба способа оказались одинаково хороши для организации связи между ядрами.
«Предварительные результаты показали, что процессор SCC и API для передачи сообщений представляют собой эффективную платформу разработки программного обеспечения, — говорится в докладе инженерной группы. — Ожидаемые трудности, связанные с отсутствием асинхронного режима передачи сообщений, на данный момент не проявились».
Мэттсон также рассказал о возможностях экономии электроэнергии, реализованных в SCC. Тактовая частота работы каждой плитки может варьироваться. Программистам обеспечен доступ к функциям, с помощью которых приложения могут менять тактовую частоту и даже напряжение питания ядер. Однако, как предупредил Мэттсон, эти функции могут создать дополнительные сложности для программистов: «Определить, какое программе потребуется напряжение питания ядра, довольно непростая задача».