Computerworld, США

Cray, IBM и Sun разрабатывают новые языки, предназначенные для эффективного параллельного программирования многоядерных, многопроцессорных, распределенных вычислительных систем

Долгие годы главной характеристикой суперкомпьютеров была скорость, и разработчики программного и аппаратного обеспечения всеми силами стремились увеличить число операций, выполняемых за одну секунду (FLOPS). Компьютеры с производительностью несколько миллиардов плавающих операций в секунду (GFLOPS) стали прологом к появлению машин, чья скорость измеряется триллионами операций в секунду (TFLOPS), а теперь речь идет о создании вычислительных систем, которые будут способны выполнять один квадрильон плавающих операций в секунду (PFLOPS).

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

Вот почему DARPA, Агентство перспективных оборонных исследований Министерства обороны США, в 2002 году изменило название своей программы High Performance Computing Systems на High Productivity Computing Systems. Теперь в DARPA ожидают от своих подрядчиков, в том числе от компаний Cray, IBM и Sun Microsystems, что они предложат языки программирования и инструментальные средства нового поколения, которые позволят в десятки раз увеличить производительность разработки ПО.

Недавно в Sun не смогли получить контракт на следующий этап проекта DARPA, но это не заставило компанию отказаться от дальнейшей разработки языка программирования суперкомпьютерных приложений, получившего название Fortress. В январе Sun выпустила предварительную версию транслятора Fortress. Точно так же Cray и IBM представили первые, предварительные реализации собственных новых языков — Chapel и X10 соответственно.

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

  • Они предназначены для того, чтобы увеличить производительность работы программиста в десять или более раз при эффективности программ, по крайней мере не меньшей, чем у ныне существующих языков, таких как Фортран и Си.
  • Они рассчитаны на широкий спектр многопроцессорных компьютеров и кластерных систем — от суперкомпьютеров «петамасштаба», установленных в крупнейших исследовательских лабораториях, до многоядерных процессоров, которыми сейчас начинают оснащать настольные ПК. Также они предназначены для использования по крайней мере с некоторыми основными, ориентированными на бизнес приложениями, а не только для научных и инженерных целей.
  • Они упрощают реализацию различных уровней параллелизма в многоядерных, многопроцессорных и распределенных кластерных архитектурах.
  • В них реализованы функции, облегчающие работу программистов и позволяющие им избежать потенциальных ошибок в коде.

Джон Меллор-Краммей, профессор Университета Райса, считает, что очень непросто развивать языки программирования, которые сейчас работают в единой системе с разделяемой памятью, так, чтобы они смогли эффективно работать на масштабных, параллельных системах с распределенной памятью.

«А до этого времени подобные языки мало кого будут интересовать», — заметил Меллор-Краммей.

Эрик Ален, соруководитель проекта Fortress в Sun Labs, считает, что этот язык идеально подходит для относительно статичных сред. Однако приложения, которые требуют динамичной загрузки кода или поддерживают доступ в Web, лучше писать на Java. Он отметил, что будет создан полнофункциональный компилятор Fortress, и он будет поддерживать столь широкие возможности оптимизации, которых никогда еще не было ни в одном языке.

Как и Fortress, язык Chapel, создаваемый в Cray, — совершенно новый. Первые пользователи уже начали работать с альфа-версией компилятора Chapel для последовательного кода, но стабильная версия компилятора для параллельного кода будет создана только через несколько лет. Директор Cray по технологиям Стив Скотт отметил, что компания разрабатывает средства отладки и анализа производительности, которые будут масштабироваться до систем, содержащих 1 млн. процессоров.

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

Решение IBM, получившее кодовое название X10, представляет собой параллельный, распределенный объектно-ориентированный язык программирования, разработанный как расширение Java. Он предназначен для систем с многоядерными процессорами, поддерживающими симметричную многопроцессорную обработку, объединенными в масштабируемые кластерные конфигурации.

По словам научного сотрудника IBM Виджаи Сарасвата, X10 использует объектно-ориентированные возможности Java для последовательного кода и добавляет языковые конструкции для параллельной и распределенной обработки. Первая версия X10 просто преобразует код, написанный на этом языке, в код на Java, но полнофункциональный, оптимизирующий компилятор будет создан к 2010 году, то есть к сроку, установленному DARPA.

В DARPA, как утверждается, не намерены «выбирать победителя» среди языков нового поколения, но надеются, что по крайней мере один из них добьется коммерческого успеха.


Могучий Fortress

В Sun надеются, что ее новый язык программирования для суперкомпьютерных приложений понравится ученым и инженерам прежде всего тем, что он предоставляет возможность использования математических выражений и формул в традиционной записи прямо внутри кода. Но это далеко не все возможности Fortress

  • В отличие от других языков, в Fortress многие функции, в частности циклы, по умолчанию исполняются в параллельном режиме. Как отмечают в Sun, на Fortress сложно написать программу, не являющуюся параллельной.
  • В Fotress реализована особенность под названием «кража рабочей нагрузки»: если какая-либо нить программы переходит в режим ожидания, она может взять на себя исполнение рабочей нагрузки другой нити, обеспечивая балансировку.
  • Язык позволяет программисту указывать единицы измерения для переменных. Благодаря этому автоматически будет регистрироваться ошибка, например, при попытке вычесть 6 метров из 10 килограммов.
  • Fortress выполняет оптимизацию местонахождения, благодаря чему связанные друг с другом наборы данных располагаются в памяти поблизости друг от друга, что позволяет ускорить работу с ними.