Pull to refresh

Критический взгляд со стороны на процессоры Мультиклет / Multiclet

High performance *
В последние пару недель на многих сайтах были заметки о начале производства (на азиатских заводах) отечественных процессоров Multiclet с «прорывной архитектурой и фантастической производительностью», в том числе и на Хабре: Первая опытно-промышленная партия отечественных мультиклеточных процессоров MCp. Все эти заметки в целом рассматривали разработку с позитивной стороны, основываясь на преимуществах в изложении разработчиков. Я всегда интересовался отечественными разработками, и попробую рассказать об этом процессоре чуть более критически, и описать в меру своих возможностей суть этой новой архитектуры.

Источники информации — ограниченная документация доступная на сайте разработчика, и ответы сотрудников компании на вопросы.

Архитектура


Если отбросить всю словесную шелуху (а её особенно много в данном случае), мультиклет — это в первом приближении любимый в России и СССР EPIC: архитектура с явным параллелизмом. В отличии от VLIW, где компилятор указывает какой блок что должен делать, тут указываются только зависимости инструкций, а по ядрам они растаскиваются уже в процессе выполнения (таких ядер в MCp0411100101 — 4 штуки).

За рубежем эта архитектура известна, и с 2006-года работает в кремнии (Explicit Data Graph Execution / TRIPS), но массового коммерческого успеха за прошедшие 6 лет не видно.

Преимуществ по сравнения с VLIW тут 2: гипотетическая возможность запускать код на процессоре c другим количеством «ядер» и возможность продолжить работу при выходе из строя одного из ядер. Оба преимущества, на мой взгляд, весьма сомнительны:

1) Запуск без перекомпиляции на процессоре бóльшего размера — для embedded применений обычно нет проблемы в перекомпиляции. Помимо этого, оптимальный код для 4 и 16 ядер разный — и запуск без перекомпиляции снижает эффективность (конечно если мы делаем что-то сложнее чем перемножение массивов).

2) Устойчивость к сбою любого ядра — эта «фишка» появилась недавно.
По последней информации, в выпущенной микросхеме устойчивости нет, она может появится в будущем при необходимых изменениях.
И нет никакой информации о том, как это работает, и в виду чрезвычайной сложности задачи продолжения работы при сбое ядра — я подозреваю, что это голый маркетинг и это не работает вообще, в том виде как это нам представляется. Разработчики объясняют отсутствие какой-либо информации об этой фиче тем, что она еще «не запатентована» (ну и нужно помнить, что сбой в разделяемых ресурсах — памяти, коммутаторе, регистрах — это гарантированный труп).

Теперь посмотрим на картинку из описания процессора (ПП — память программ, ПД — память данных, ПБ — процессорный блок):


Сразу бросается в глаза — общий регистровый файл и коммутатор, совместный доступ к памяти (когда все ядра могут читать и писать практически что угодно). Обычно такого рода архитектуры работают медленно (из-за чисто физических ограничений), и возможно это причина, почему Мультиклет работает всего на 100Мгц при изготовлении на зарубежной фабрике (т.е. вряд ли там техпроцесс толще 130-180нмна 180нм).

Именно из-за проблем со скоростью все остальные существующие (коммерчески успешные) многоядерные архитектуры не пытаются организовать доступ «все имеют доступ везде» — обычно ядра имеют маленькую локальную память с возможностью редкого медленного доступа в общую память.

Производительность


Казалось бы, 2.4GFLOP декларируемые производителем — весьма существенная производительность. Однако, в компании-разработчике процессора отказались пояснить, каким образом была получена такая производительность при тактовой частоте 100МГц, и не подтвердили, что madd (multiply+add) выполняется за 1 такт. Тем не менее, похоже, мне удалось понять откуда взялась такая цифра.

Мультиклет работает с числами одинарной точности — «single» (32-бит) и есть возможность упаковать комплексное число single-точности в 64 бит (т.е. действительная и мнимая часть по 32 бит). Тогда и получается, что если умножение двух комплексных чисел выполняется за 1 такт, то это дает 6 FLOP за такт: (a + bi)(c + di) = (aс + bd) + (ad + bc)i., и соответственно, 6*4*100Mhz = 2.4GLOP.

Таким образом, сравнивать эту производительность с настольными Pentium-ами всякими конечно нельзя (это любят делать в обсуждении: «вот, почти достали Intel»): в настольных процессорах принято производительность измерять на 64-х битных вещественных числах, а тут озвученные цифры производительности получаются только на 32-бит и только в специфических условиях.

На обычных операциях с неупакованными данными производительность составляет 400 млн. операций в секунду, и нужно иметь ввиду что набор инструкций тут существенно более простой чем в том же арме, т.е. скорость на обычных задачах будет ниже, чем у 400Mhz арма (или Комдива-64).

Т.е. по факту новая архитектура Мультиклета — получилась «тяжелой», и работает с такой маленькой тактовой частотой, что одноядерные процессоры классической архитектуры оказываются в итоге быстрее.

Энергопотребление


К сожалению, тут пока обсуждать нечего, его нужно внимательно тестировать на реальной нагрузке и реальном кристалле. Если есть видимое преимущество по энергопотреблению — то возможно для каких-то задач это будет критерием выбора.

Периферия и прочий фарш


Во первых, обращаем внимание на количество памяти — по 16кб памяти программ и данных.
Контроллера внешней памяти нет, соответственно все разговоры о портировании Linux — это дело далекого и туманного будущего, перед которым нужно еще сделать бакенд к GNUC для этого процессора.

Флеш-памяти для хранения программы нет, и загрузка производится с внешней флешки (в данный момент это Xilinx XCF04S). Естественно это вызвало подозрения, что процессор — перемаркированная FPGA, но на прямой мой вопрос об этом мне ответили:
Вместо Xilinx можно было бы поставить любую флэшку, а кристалл есть кристалл (внимательно посмотрите сайт), на FPGA мы сейчас ничего не делаем. Делали на этапе ОКР, для подтверждения расчётных параметров.
Кристалл сделан по 180нм.

Периферия — более-менее понятная для тех, кто работал с микроконтроллерами, за исключением Ethernet и USB — на кристалле нет «физической» части интерфейса, и их нужно ставить на плате отдельными микросхемами.

Софт для разработки — на данный момент только ассемблер. Компилятор С находится на стадии «пузырьковая сортировка работает» (Update: и факториалы). Подробное описание архитектуры, необходимое для разработчиков — не доступно на данный момент.

Резюме


Архитектура Мультиклета — да, действительно новая и действительно разработана в России на западе малоизвестна, но с 2006-го года работающая в кремнии (у буржуйского первого процессора производительность была 15.6 GFLOP). За бугром оно за 6 лет «не взлетело», и очевидно не спроста.

Достигнутая практическая производительность первого процессора в 400 млн операцией в секунду сравнима, а местами и меньше чем производительность серийных одноядерных процессоров классической архитектуры производимых в России (про зарубежные процессоры и DSP я конечно молчу) — за счет более высокой тактовой частоты и более «мясистого» набора инструкций последних.

Дальнейший рост производительности _на мой взгляд_ обещает быть сложным, т.к. чем больше ядер на кристалле мы размещаем, тем медленнее будет работать каждое ядро из-за того что накладные расходы на поддержание схемы «все ядра имеют доступ везде» быстро растут с ростом количества ядер.

Декларируемая «устойчивость» процессора к сбоям — вопрос туманного будущего, сейчас её нет. пока вызывает большие сомнения в силу сложности реализации в рамках этой архитектуры, и разработчики не предоставляют никакой информации о том как они её добились.

Исходя из всего этого, я не думаю что эта «принципиально новая (пост-неймановская) мультиклеточная архитектура» — прорыв в процессоростроении.
Работает — да. Лучше конкурентов (в том числе Российских) — едва ли.

Буду рад услышать ваши дополнения и корректировки — доступная информация по Мультиклету весьма ограничена, и я вполне могу где-то ошибаться.

Update: Обновлены данные по точности вещественных чисел, 24->32бит, 48бит убрано, переписал в свете этого резюме в более позитивном ключе.
Update: Более явно отделил свои домыслы от фактов.
Update: Благодаря beeruser обнаружили, что эта архитектура (Explicit Data Graph Execution / TRIPS) известна на западе достаточно давно, и назвать её новой нельзя. Т.к. у них она УЖЕ не взлетела, вероятность взлететь у нас — крайне мала.
Update: Получены дополнения от разработчиков — кристалл сделан на 180нм, отказоустойчивость — в текущем процессоре её нет, она может появится в будущем.
Tags:
Hubs:
Total votes 99: ↑87 and ↓12 +75
Views 27K
Comments Comments 65