Исследователи из Университета Райса в Хьюстоне получили в начале апреля от агентства DARPA 16 млн. долл. на разработку универсального компилятора, который сможет создавать код как для гетерогенной вычислительной среды (heterogeneous hardware), так и для многоядерных платформ, т. е. работающий везде — от суперкомпьютеров до встраиваемых систем. С его помощью планируется создавать ПО, которое лучше учитывает возможности “кремния”, на котором оно исполняется, и соответственно обладающее большей производительностью и уменьшающее энергопотребление.
Оптимизация кода под конкретное “железо”, или платформу, стоит дорого и требует больших трудозатрат, поэтому сейчас для этой цели каждый раз разрабатывается отдельный компилятор. На это уходит 3—5 лет, после чего компилятор используется с данным процессором.
Проект PACE (настраиваемая на платформу среда компиляции) предусматривает построение универсального компилятора в три этапа. На первом исследователи разработают набор программных средств, отображающий ограничения и возможности аппаратного обеспечения, на котором исполняется программа, будь то кластер или система на кристалле. Затем планируемый компилятор будет анализировать исходный текст приложения и пытаться автоматически разбить его на части, которые могли бы исполняться на многоядерном процессоре. Наконец, исследователи создадут инструментарий, который во время исполнения программы будет оценивать производительность приложения на данной системе и, если софт написан для процессоров типа x86, то будет даже изменять код “на лету”.
Команда, работающая над этим проектом, надеется завершить его за 4,5 года.
На мой взгляд, это несколько рутинная академическая задача и нельзя сказать, что в этом направлении ничего ранее не делалось. Здесь можно было бы двигаться и традиционным путём — совершенствуя компиляторы компиляторов. Такие инструменты традиционно строятся на описании грамматики языка программирования, под который генерируется компилятор. Если добавить в него описание архитектуры объектного процессора, т. е. автоматизировать не только создание парсера, но и сделать настраиваемый кодогенератор, тогда и получится то, что названо первым этапом. Научная сложность этой работы состоит в создании ориентированного на исполнение софта эффективного языка описания архитектуры целевой платформы. Хорошая тема для сильного аспиранта.