Если, скажем, вы хотите изучить, как трещина образуется в крыле самолета, вам нужна очень точная физическая модель в непосредственной близости от трещины. Но если вы хотите смоделировать изгиб крыла самолета в различных условиях полета, более практично использовать более простое и высокоуровневое описание крыла.
Если, однако, вы хотите смоделировать влияние сгибания крыла на распространение трещины или наоборот, вам необходимо переключаться между этими двумя уровнями описания, что сложно не только для компьютерных программистов, но и для компьютеров.Команда исследователей из Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института, Adobe, Калифорнийского университета в Беркли, Университета Торонто, штат Техас, США, и Техасского университета разработала новый язык программирования, который автоматически выполняет это переключение.
В экспериментах моделирование, написанное на этом языке, было в десятки или даже сотни раз быстрее, чем модели, написанные на существующих языках моделирования. Но для них требовалась лишь одна десятая часть кода, чем для тщательно оптимизированных вручную симуляций, которые могли достичь аналогичной скорости выполнения.«История этой статьи состоит в том, что компромисс между кратким кодом и хорошей производительностью — ложь, — говорит Фредрик Кьолстад, аспирант Массачусетского технологического института в области электротехники и информатики и первый автор новой статьи, описывающей язык. «В этом нет необходимости, по крайней мере, для тех проблем, к которым это относится.
Но это применимо к большому классу проблем».Действительно, говорит Кьолстад, язык исследователей имеет приложения помимо физического моделирования, в том числе в машинном обучении, анализе данных, оптимизации и робототехнике.
Кьолстад и его коллеги уже использовали этот язык для реализации версии оригинального алгоритма Google PageRank для упорядочивания результатов поиска, и в настоящее время они сотрудничают с исследователями из Департамента физики Массачусетского технологического института над приложением в квантовой хромодинамике, теорией «сильного взаимодействия». "который скрепляет атомные ядра.«Я думаю, что это язык, который предназначен не только для физического моделирования для графических людей», — говорит Саман Амарасингхе, советник Кьолстада и профессор электротехники и информатики (EECS). «Я думаю, что он может делать много других вещей. Так что мы очень оптимистично смотрим на то, к чему это приведет».Кьолстад представил доклад в июле на конференции Siggraph Ассоциации вычислительной техники, крупнейшей конференции по компьютерной графике.
Его соавторы включают Амарасингхе; Войцех Матусик, доцент EECS; и Гуртей Канвар, который учился в Массачусетском технологическом институте, когда работа была сделана, но сейчас является аспирантом Массачусетского технологического института по физике.Графики против матриц
Как объясняет Кьолстад, различие между низкоуровневыми и высокоуровневыми описаниями физических систем более правильно описать как различие между описаниями, использующими графы, и описаниями, использующими линейную алгебру.В этом контексте граф — это математическая структура, состоящая из узлов, обычно представленных кругами, и ребер, обычно представленных в виде отрезков линий, соединяющих узлы. С ребрами и узлами могут быть связаны данные. В физическом моделировании эти данные могут описывать крошечные треугольники или тетраэдры, которые сшиты вместе, чтобы приблизиться к кривизне гладкой поверхности.
Низкоуровневое моделирование может потребовать расчета индивидуальных сил, действующих, скажем, на каждое ребро и грань каждого тетраэдра.Вместо этого линейная алгебра представляет физическую систему как набор точек, которые действуют друг на друга.
Эти силы описываются большой числовой сеткой, известной как матрица. Моделирование эволюции системы во времени включает умножение матрицы на другие матрицы или на векторы, которые представляют собой отдельные строки или столбцы чисел.
Матричные манипуляции — вторая натура для многих ученых и инженеров, и популярное программное обеспечение для моделирования, такое как MatLab, предоставляет словарь для их описания. Но использование MatLab для создания графических моделей требует специального кода, который переводит силы, действующие, скажем, на отдельные тетраэдры, в матрицу, описывающую взаимодействия между точками.
Для каждого кадра моделирования этот код должен преобразовывать тетраэдры в точки, выполнять манипуляции с матрицами, а затем отображать результаты обратно на тетраэдры. Это резко замедляет симуляцию.Поэтому программисты, которым необходимо учитывать графическое описание физических систем, часто пишут свой собственный код с нуля.
Но манипулирование данными, хранящимися в графах, может быть сложным, и для отслеживания этих манипуляций требуется гораздо больше кода, чем при манипуляциях с матрицами. «Дело не только в большом количестве кода, — говорит Кьолстад. «Это еще и сложный код».Автоматический переводЯзык Кьолстада и его коллег, который называется Simit, требует от программиста описания перевода между графическим описанием системы и описанием матрицы.
Но после этого программист может использовать язык линейной алгебры для программирования моделирования.Однако во время моделирования Simit не нужно переводить графики в матрицы и наоборот.
Вместо этого он может переводить инструкции, выпущенные на языке линейной алгебры, на язык графов, сохраняя эффективность времени выполнения ручного моделирования.Однако, в отличие от моделирования, написанного вручную, программы, написанные в Simit, могут работать либо на обычных микропроцессорах, либо на графических процессорах (ГП), без изменения основного кода.
В экспериментах исследователей код Simit, выполняемый на графическом процессоре, был в 4-20 раз быстрее, чем на стандартном чипе.
