Exo был разработан исследователями для написания быстрого программного обеспечения для аппаратных ускорителей.

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

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

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

Exo основан на идее «экзокомпиляции», в отличие от других языков программирования и компиляторов. По словам Юки Икараши, кандидата наук в области электротехники и компьютерных наук и члена CSAIL, «традиционно многие исследования были сосредоточены на автоматизации процесса оптимизации для конкретного оборудования». Икараши также является основным автором нового исследования Exo. «Это отлично подходит для большинства программистов, но для инженеров по производительности компилятор чаще создает проблемы, чем решения. Поскольку компилятор оптимизирует сам себя, если он допускает ошибку и обеспечивает эффективность 45 % вместо 90 %, нет действенного способа ее исправить.

Экзокомпиляция возвращает контроль инженеру по производительности. Инженер по производительности теперь может решать, какие оптимизации использовать, когда их использовать и в каком порядке, а не компилятор. Делая это, они могут не тратить время на борьбу с компилятором или выполнение всего вручную. Exo отвечает за то, чтобы все эти улучшения были точными одновременно. Из-за этого инженер по производительности может сосредоточиться на повышении производительности, а не на устранении неполадок в сложном оптимизированном коде.

По словам Адриана Сэмпсона, доцента факультета компьютерных наук Корнельского университета, «язык Exo — это компилятор, который параметризуется в соответствии с аппаратным обеспечением, на которое он нацелен; один и тот же компилятор может адаптироваться ко многим различным аппаратным ускорителям». Exo предоставляет единый абстрактный способ описания «формы» оборудования, на которое вы хотите ориентироваться, вместо того, чтобы требовать от вас написания тонны сложного кода на C++ для создания нового ускорителя. Затем, вместо создания совершенно нового компилятора с нуля, вы можете изменить текущий компилятор Exo, чтобы он соответствовал этому новому определению. Это нововведение может оказать огромное влияние, поскольку оно позволит разработчикам аппаратного обеспечения экспериментировать и выпускать больше концепций, не беспокоясь о затратах на создание новых компиляторов для каждой новой аппаратной концепции. Сектор может перестать полагаться на устаревшее оборудование, которое выгодно только из-за привязки к экосистеме и, следовательно, неэффективно.

Приложения для научных вычислений и машинного обучения основаны на «ключевых подпрограммах», ядрах или подпрограммах высокопроизводительных вычислений (HPC), которые ускоряются с помощью самых быстрых компьютерных чипов, доступных сегодня, таких как TPU от Google, Neural Engine от Apple или NVIDIA. Тензорные ядра.

Несмотря на неуклюжую терминологию, программы имеют решающее значение. Например, «библиотека» или набор таких подпрограмм, известных как подпрограммы базовой линейной алгебры (BLAS), позволяет осуществлять многочисленные действия машинного обучения, такие как нейронные сети, прогнозы погоды, облачные вычисления и поиск лекарств. Все эти задачи требуют вычислений линейной алгебры. (BLAS настолько важен, что Джек Донгарра получил за него премию Тьюринга в 2021 году.) Эти новые процессоры, в создании которых участвуют сотни инженеров, могут быть настолько же эффективны, как и эти программные библиотеки для высокопроизводительных вычислений.

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

Инженеры по производительности могут определить новые чипы, которые они хотят оптимизировать для использования Exocompilation, что устраняет необходимость изменения компилятора. В прошлом разработчики компиляторов отвечали за поддержание определения аппаратного интерфейса, но в большинстве этих новых чипов-ускорителей аппаратный интерфейс является проприетарным. Предприятия должны поддерживать свою собственную копию (или «форк») типичного компилятора, настроенного для поддержки их конкретного чипа. Для этого помимо инженеров по производительности должны быть наняты команды разработчиков компиляторов.

«В Exo мы выносим экзокомпилятор из определения аппаратно-зависимых бэкэндов. Это позволяет нам более четко различать Exo, проект с открытым исходным кодом, и проприетарный аппаратно-зависимый код. Мы продемонстрировали, что Exo позволяет быстро создавать код, столь же эффективный, как оптимизированная вручную библиотека Math Kernel от Intel». Гилберт Бернштейн, постдоктор Калифорнийского университета в Беркли, утверждает, что «мы активно сотрудничаем с инженерами и исследователями из различных компаний.

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