Efficient Computer — стартап из Питтсбурга, основанный в 2022 году командой исследователей из Университета Карнеги-Меллона. Между прочим, именно Университет Карнеги-Меллона является основным поставщиком кадров в MicrosoftResearch.

Efficient Computer разрабатывает принципиально новую не Фон-Неймановскую архитектуру процессоров и программную экосистему.

Их флагманская технология, известная как архитектура Fabric, представляет собой перенастраиваемый процессор с потоковой обработкой данных, минимизирующий внутренние перемещения данных и управляющие издержки — основные источники энергопотерь в классических решениях. Fabric размещает инструкции пространственно на чипе. Это позволяет данным перемещаться по заранее определённому маршруту между вычислительными узлами — так называемыми Tiles. Поскольку tile переводится как плитка, я бы и название архитектуры перевел как Кафель. Каждая плитка — это упрощённый вычислительный блок, лишённый избыточных механизмов, таких как предсказание ветвлений или выборка инструкций, что значительно снижает энергопотребление.

Недавно вышедший процессор Electron E1, реализующий архитектуру Fabric, обеспечивает до 100-кратного повышения энергоэффективности по сравнению с традиционными CPU. Он поддерживает параллелизм, а также способен обрабатывать произвольные управляющие конструкции, включая циклы и ветвления, благодаря специальным инструкциям и маршрутам обратной связи. Встроенная память и энергонезависимая память интегрированы в вычислительный конвейер, обеспечивая низкую задержку при выполнении задач ИИ и обработки сигналов. Fabric подходит для встраиваемых систем, носимых устройств, IoT и даже космических приложений, где критичны параметры SWaPC (размер, вес, мощность, стоимость). Благодаря своей гибкости и энергоэффективности, Efficient Computer открывает новые горизонты для вычислений на периферии (edge computing).

Другой ключевой компонент экосистемы — Компилятор effcc, предназначенный для преобразования обычного кода (на C, C++, TensorFlow и других языках) в оптимизированное представление для архитектуры Fabric. Вместо традиционного пошагового выполнения, effcc трансформирует код в граф потоков данных, определяя наиболее эффективное пространственное размещение операций на чипе. Это позволяет значительно сократить энергопотребление, устраняя избыточные перемещения данных и управляющие инструкции. Компилятор автоматически анализирует и оптимизирует код, обеспечивая максимальную производительность и длительное время работы от батареи.

Efficient Computer также предлагает Compiler Playground — веб-инструмент, визуализирующий выполнение программы на Fabric, позволяя разработчикам увидеть, как операции распределяются по архитектуре.

Мне посчасливилось поиграть в песочнице Efficient Computer и проверить, насколько хорош компилятор в автоматическом режиме.

Я попробовал три программки, каждая из которых имеет одинарный цикл одной и той же длины, но демонстрирует разные варианты параллелизма: чрезвычайную параллельность, примитив Reduce, и примитив Scan.

Первая задачка – векторная операция AXPY.

Для компиляции функции в код для Кафеля, необходимо указать атрибут __effcc_rip:

Запускаем программу и наблюдаем за ее выполнением в визуализаторе.

Действительно похоже на кафельный пол:

Программа выполняется за 27 тактов. Запомним эту цифру для сравнения.

Вторая программа – сумма всех элементов массива.

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

Интересно взглянуть на прогноз энергоэффективности:

Время работы процессора E1 от батарейки при выполнении данной программы выводится в годах(!), а время работы сопоставимых маломощных процессоров – в днях.

Наконец, программа накопительной суммы элементов массива.

Кафель набит плотненько, но тем не менее время выполнения программы целых 117 тактов. Видимо, компилятор не сумел распознать параллелизм накопительной суммы. Это действительно непростая задача и область активных исследований в теории компиляторов.

Как бы ни был хорош компилятор, в процессе всегда найдется место для программиста в машинном (или кафельном) коде.

Сейчас замечательное время, когда как грибы появляются новые вычислительные архитектуры, отвечающие на новые запросы к вычислительной мощности и энергопотреблению в задачах искусственного интеллекта. И отрадно видеть нестандартные подходы к проблеме, например, Efficient Computer.

Комментарии (22)


  1. checkpoint
    28.07.2025 00:13

    Недавно посмотрел видео про этот Electron E1, из чего сделал вывод, что парни из Питтсбурга пытаются выкопать стюардессу возродить VLIW на новой базе - реконфигурируемый конвейер из огромного числа блоков обработки (ALU, LOAD/STORE и прочее). Как и во VLIW, у них за всё отвечает компилятор, в том числе за оптимальную конфигурацию конвейера на стадии компиляции. Видимо опыт предыдущих поколений их ни чему не научил. Либо я прослушал как они собиратся решать типовые проблемы VLIW (в частности, где брать оптимизирующий компилятор).


    1. Zhuikoff
      28.07.2025 00:13

      VLIW сам по себе как технология крут, но он совсем другой. Чтобы писать под него, нужно мыслить иначе, а у человека память держит от 3х до 7 объектов одновременно, мы слишком слабые и ленивые, нам вайб кодинг подавай и желательно с голосовым вводом. Поэтому страх и отторжение. И это глубокий-глубокий минус.


      1. ruomserg
        28.07.2025 00:13

        VLIW упирается в предсказание свойств произвольной программы, которое упирается в проблему остановки, которая упирается в P?=NP, и все это кажется упирается в то, что любая достаточно сложная логическая система либо неполна, либо противоречива.

        Обратите внимание, что суперскалярные архитектуры (а равно JIT) ориентируются на прошлые события, чтобы оптимизировать свою работу в относительно недалеком будущем (десятки-сотни-тысячи тактов).

        А гипотетический компилятор WLIV должен "прямщас" вам оптимизировать весь путь исполнения программы с неизвестными входными данными глядя только на листинг исходного кода. В природе такого не бывает, а напоминает это сказку о мышах, которые нашли идеальное решение своей проблемы: "если бы кошке подвесили колокольчик..." (C). Как бы и да - но как бы сначала подвесьте!..


        1. rPman
          28.07.2025 00:13

          ну и сейчас классические компиляторы умеют собирать статистику Profile-guided optimization, ее можно собирать, прогнав специально собранное приложение (с помощью gcc/llvm) на типовом наборе данных, а затем пересобрать с использованием собранных данных.


          1. ruomserg
            28.07.2025 00:13

            Ну, технически, конечно можно предположить двух- (и более!) стадийную компиляцию в кафель. Сначала компилируем как-то (не в сторону быстродействия, а в сторону более представительной статистики), потом гоняем на нагрузке, потом грузим статистику и переделываем кафель. Насколько это имеет смысл, и насколько удастся эту статистику собирать не вызывая погрешности в ходе исполнения - вопросы... Я помню уже несколько попыток создания таких систем. Было такое слово "транспьютеры" - и умерло. Я в своей магистерской лет 20 назал считал надежность нейроноподобных вычислительных комплексов - и тоже "в железе" так ни один и не увидел! Похоже, распределенные вычисления - это что-то вроде термоядерного синтеза: да, теоретически возможно - но нет, в ближайшие 20 лет не заработает (и каждый год так!)...


    1. old_bear
      28.07.2025 00:13

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

      Может нейросеть натренируют чтобы она магию делала.


  1. old_bear
    28.07.2025 00:13

    На Transport triggered architecture похоже.
    Как уже заметили комрады выше, всё отлично за вычетом необходимости написать мега-компилятор. Который вероятнее всего будет выполняться на Фон-Неймановской архитектуре. :)


  1. Panzerschrek
    28.07.2025 00:13

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


    1. iShrimp
      28.07.2025 00:13

      Здесь подход примерно как для ПЛИС. Для низкоуровневого программирования нужен какой-нибудь HDL язык типа SystemC. В качестве ЯВУ может выступать любой язык. Но каким бы умным ни был компилятор, всегда найдётся код, который будет ему не по зубам.


  1. ValeriyPus
    28.07.2025 00:13

    Компилятор - не очень сложно.

    Топологическая сортировка потоков данных (от команды к команде).

    И Linear/Integer programming. С эвристиками и без.

    Циклы - то же самое, пишем

    (Код до цикла)

    (Итерация 1)

    (Итерация 2)

    ...

    И запускаем топологическую сортировку.

    Есть кучи публикаций


  1. unreal_undead2
    28.07.2025 00:13

    Выглядит очень похоже на интеловский CSA (который, правда, не пошёл в массовое производство). Интересно, покупали права на патент или обошли.


    1. ValeriyPus
      28.07.2025 00:13

      Вы не можете запатентовать такое.

      Это https://en.wikipedia.org/wiki/Transport_triggered_architecture

      Это тот же RISC, только графы испольнения посложнее и побольше.

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

      Ну и таких разработок любой, знакомый с абстракцией индукцией и дедукцией выдает по 100 штук.

      Карнеги-меллон - не MiT и не KAIST.

      И публикаций о подобных процессорах - очень много.

      https://github.com/ValeriyAndreevichPushkarev/STA_ring_buffer

      Найди 3 отлиция в прорыв процессор великий гений Microsoft империя!

      Технология!

      Кэш из ячейка фабрика вынесен!

      НЕ DPA!

      Не СИМИДИ НЕ СИМИДИ!

      А представляют процессор как-то вот так:

      https://coub.com/view/3eui7i


      1. unreal_undead2
        28.07.2025 00:13

        Патент по ссылке читали?


        1. ValeriyPus
          28.07.2025 00:13

          Википедию читали?


          1. unreal_undead2
            28.07.2025 00:13

            Да, глянул - общие идеи близкие (и они явно публичные), но есть всё таки много конкретики при реализации в железе, и на мой взгляд интеловский патент сильно коррелирует с железякой из статьи.


            1. ValeriyPus
              28.07.2025 00:13

              Вкраце - уже 3 подобных процессора выпустили в кремнии (один в один, переферия другая конечно). Еще в 2000-х.

              А в общем - функциональные блоки и связи между ними.

              Есть даже OpenSource реализация архитектуры.

              В те времена с эвристиками и компиляторами были проблемы (нет нейросетей и эвристик, дай бог 500 MOPS а не 100 TOPS при компилировании нельзя проверить нормальное количество вариантов).

              Теперь это преподают как прорыв (но, увы, уже плохо с компилятором).


  1. domix32
    28.07.2025 00:13

    Хоть бы ссылку на демо дали. Вообще интересно сколько оно там условных флопсов выдаёт в такой архитектуре.


  1. leshabirukov
    28.07.2025 00:13

    А нельзя ли программу на этом языке в прошивку FPGA откомпилировать?


  1. rPman
    28.07.2025 00:13

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

    Кстати FPGA уже готовая параллельная энергоэффективная платформа, и компиляторы есть, и сообщество, и опыт многолетний... только железа массового не завезли.


    1. unreal_undead2
      28.07.2025 00:13

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

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


      1. leshabirukov
        28.07.2025 00:13

        "Любую схему"... я тоже так думал, пока свой проект с насыщенной не 2d структурой (вот этот, - Не-фон неймановский компьютер на базе комбинаторной логики / Хабр ) не запустил на сборку в Quartus-е. Компиляция прошла на ура а вот фиттер (который нетлист на структуру FPGA проецирует) показал шиш. FPGA как раз больше всего любит именно плоскую структуру, чип-то плоский!

        А тут работу фиттера можно сказать кожаный мешок делает, в идеале минуя verilog и нетлист.


  1. Yami-no-Ryuu
    28.07.2025 00:13

    Люди всё переизобретают транспьютеры в разных вариантах. Видимо, к чему-то такому придёт, да. Скорее из-за проблемы локального тепла.

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