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

Прочитано: 138 раз(а)


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

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

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

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

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

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

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

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

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

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

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

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

Икараши и Бернштейн написали статью вместе с Алексом Рейнкингом и Хасаном Генчем, докторами наук. студенты Калифорнийского университета в Беркли и доцент Массачусетского технологического института Джонатан Раган-Келли.

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



Новости партнеров