Новая электроника 2012. Мультиклет

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

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

Итак, есть ли революционная архитектура и великое будущее? Если коротко, то поживем-увидим. Идеи, достижения, недоделки — всего хватает.

Дебютная идея такова.

Мультиклет оперирует понятием “параграф”, то есть последовательность команд без команд перехода. Точнее, ровно с одним переходом, возможно условным, который как раз и метит конец исполнения этого параграфа. Обошлись без стека, не особо расспрашивал как. В рамках параграфа команды раскидываются по клеткам, и исполняются, как только для них готовы входные данные. Примерно так:

sum A,B
sum %1,C
sum D,E
sum %1,F
sum %2,E
jump somewhere
%1 — относительное смещение наверх, “команда назад”, %2 — “две команды тому назад” итд. Большие буквы — внешние переменные.

Допустим, у нас четыре клетки. Как это будет обработано: первые четыре команды зачитываются каждая в свою клетку, первая и третья исполняются, поскольку готовы, вторая и четвертая ждут. Затем зачитывается пятая команда в освободившуюся клетку, и исполняются все три команды, поскольку данные для них уже готовы.

Конец дебютной идеи.

Красиво, я такого раньше не видел, правда прямо скажем, мой кругозор в процессорных архитектурах крайне ограничен.

Но потом начинаются вопросы, тысячи их. Остановлюсь на некоторых и позволю себе поругаться. Конечно, ни о какой серебряной пуле в области решения параллельных задач речи не идет. Простой пример, когда мы запускаем десяток функций, каждая из которых может быть исполнена независимо, не будет распознан как кандидат на параллелизацию. Без дополнительных оптимизаций простои клеток будут велики, поскольку статично выделены на параграф, а насколько он упорядочен неизвестно (4 клетки, а параграфы сплошь длины 3. 25% мощности псу под хвост.). Можно, конечно, динамически перекидывать клетки туда-сюда, но это достаточно дорогая операция, усложняющая логику. Если у нас программа статично написана раз и навсегда и все эти %1 известны, вообще непонятно, зачем нужно аппаратное распараллеливание. Его можно сделать на этапе компиляции. Про динамическое создание относительных сдвигов мы не разговаривали, возможно они реализованы, но не предъявляются, как критическая инновация. В данной схеме всегда предполагается, что любая команда одинаковое количество тактов исполняется. Я слаб в risc архитектурах, может это и возможно, но как-то удивительно, что сложение двух целых и сложение целого с вещественным одинаковы по скорости (уж не говоря об умножении, или мы его раскрутим в операции сложения?). Как достигается энергоэффективность я не понял, видимо, потому что не спросил :) .

Куда больше этих технических деталей испугала технология изобретения велосипеда. С одной стороны, Мультиклет молодцы, и (по слухам) для разработки физического дизайна привлекли сильную команду из Питера. Почему так же не сделать с разработкой компилятора и ОС? В России есть по сути одна команда компиляторщиков не связанная с Интелом, МЦСТ. Но с ними разговора считай не было. ОС — кроме МЦСТ есть еще несколько сильных команд, которые утомились секретный софт для военных делать. Но нет. Мы будем делать компилятор С (не доделан пока) и свой Линукс (тоже еле дышит). Дык при всем уважении Екатеринбург не является центром экспертизы во всех областях разработки процессоров и сопутствующего софта, тем более одна команда. Несколько испугал невысокий уровень понимания того, как решаются вопросы параллелизации в x86, nvidia.

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

Вот. Ну а теперь, поругавшись вволю, перейдем к позитивной части. Действительно, не так много у нас в стране мирных чипстартов, чтобы выбрасывать их по причине неидеального решения всего необъятного спектра задач.
Можно пофантазировать об областях, где уже сейчас Мультиклет может быть интересен Задачи с простой логикой ветвлений, но длинными параграфами, в агрессивной среде. Мне в голову приходит “промышленный контроллер”. Есть еще идеи?

И конечно, нужно сообщество. Чтобы игрались, экспериментировали, генерили идеи. В этом смысле отладочная плата под 40К рублей мне кажется нестратегичным решением. Лучше собрать кластер и открыть к нему доступ в интернете. Пусть студенты и прочие неуемные пишут компиляторы, операционки, играются, защищают курсовики и дипломы. Таким манером и привыкнут, и идей подкинут. Отмечу, что не понимаю, почему так не делают наши другие разработчики архитектур. Ну ладно МЦСТ, у них машинные коды с какого-то перепугу засекречены. Но КМ211? Элвис? НИИСИ РАН?

Резюме. “Эксперты всегда предрекают провал и в 75% случаев они правы”. Мультиклет, прежде чем станет активно и эффективно используемой архитектурой, несколько раз изменится до неузнаваемости. Это естественно, это правильно. Будем надеяться, что команда выдюжит, создаст вокруг себя сообщество единомышленников. И даже если в конце концов все уйдет в архив, набитые шишки даром не пропадут.

Upd. http://habrahabr.ru/post/146964/ — еще один анализ архитектуры.

Новая электроника 2012. Мультиклет: 7 комментариев

  1. Мы, кажется, чем-то подобным занимались в НИЦЭВТе в конце 90-х. И питерские там были (Торгшев, Царев), и динамические ячейки, и собственная ОС. Замах очень похож.

  2. У КМ211 есть выложенный симулятор и линукс:
    http://km211.ru/ru/downloads
    Еще узнал что в Москве существует хакспейс (http://ru.wikipedia.org/wiki/Hackerspace), где программисты, электронщики и радиолюбители могут обмениваться опытом, участовать в семинарах и пр.
    http://neuronspace.ru/
    http://openbts.chemeris.ru/2010/12/xakspejs-hackerspace-v-moskve/

  3. Я в свое время распечатал материалы проекта Мультиклет, но так и не понял, есть ли у них инструментальный софтвер, который бы позволил это удобно программировать.

    Потом я спросил у Сергея Вакуленко, которому попало это в руки еще в Москве, и он подтвердил, что по его заключению, данная команда вообще не решила вопрос инструментария.

    Я бегло пробежал глазами по документу MCP_concept_eng.doc с их вебсайта. Зацепил глазами странные для меня утверждения.

    Например они утверждают, что могут обеспечить высокую паралельность, просто загружая все команды («триады») линейного участка (между переходами) и затем исполняя те, для которых аргументы готовы. По их мнению, это лучше, чем современные суперскалярные процессоры, потому что проще. Допустим. Но при этом они против предсказателя переходов (все должно быть закончено перед условным переходом ), что сразу вызывает вопросы. Ведь условные переходы в типичных софтверных приложениях происходят часто, и branch prediction + speculative execution дают ощутимый выигрыш в скорости. Если ждать, чтобы закончились все операции линейного участка «триад», то бОльшая часть их сильно параллельного хардвера будет простаивать.

    Хотя с другой стороны, при чем тут вообще суперскалярные процессоры и обычные приложения если они утверждают, что конкурируют не с ними, а с DSP TMS320?

    С третьей стороны на вебсайте у них говорится, что на этом устройстве собирается работать Линукс, что лично меня еще больше сбивает с толку —

    http://www.multiclet.com/index.php?option=com_content&view=article&id=96%3Amcp0411100101&catid=39%3Amulticellular-processors&Itemid=62&lang=en

    Это Линукс работающий на данном устройстве, или данное устройство работает как сопроцессор к процессору общего назначения, на котором крутится Линукс?

    ———————-

    Потом в их документе есть слова, что «система команд» каждой клетки – это триады после синтаксического анализа и что у них нет ассемблера:

    The cell instruction set is based upon some intermediate presentation of a compiled program after the syntax analysis (triads) and actually it is a sort of hardware realization of input programming language. It minimizes the labour costs to create compilers due to the fact that blocks of machine-oriented optimization and paralleling disappear as well as command generating block dramatically decreases. The notion «assembler programming» disappears as the processor language is not visible and thus it is “not programmable”. The software becomes really hardware-independent

    Это что-же, у них также нет локальных и глобальных оптимизаций во время компиляции? Subexpression elimination, constant propagation, data flow graph? Они собираются компенсировать отсутствие всех этих оптимизаций параллельностью?

    ———————

    Также меня смутило как они собираются сражаться с хакерами и вирусами:

    If necessary, the disordered triads ensure an individual object code for every processor after every compilation. This fact as well as the closure of the triad subsets make it dramatically impossible to unauthorizedly, secretly and from without interfere into the system software. … The system code is individual and unprivileged users use only the high-level language for programming which permits to create a new and effective toolkit against viruses.

    Опять же, я не смотрел глубоко — это так, свободные ассоциации по поводу.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>