Параллельность в Fortress

2007-12-01 at 05:12 | Posted in devel, review, think | Leave a comment
Tags: , , ,

За последние пару месяцев дважды услышал о языке Fortress: один раз из интервью с Guy Steele на SE Radio и ещё раз из презентации человека из питерского Sun Microsystems. Это подтолкнуло меня почитать интересные моменты беты его спецификации. Об этих интересных моментах я коротко и расскажу.

Прежде всего, Fortress — язык программирования общего назначения, созданный в лабораториях Sun. Он объединяет в себе ряд свойтв функциональных и ОО-языков. По духу он близок к Haskell, Scala и т. п. Что отличает его от этих языков:

  • Синтаксис, который нравится математикам (даже Haskell оставлен позади)
  • Встроенная в язык модель распараллеливания

Параллелизм здесь имеется в виду нефункциональный, т. е. нужный исключительно для оптимизации. Используется общая память, а не передача сообщений (в духе OpenMP, а не MPI). Соответственно, программы предназначены для многоядерных и многопроцессорных систем, а не для кластеров и гридов.

Особенности же Fortress следующие: ко всем объектам привязана метаинформация о характеристиках их локальности по отношению друг к другу. На основе этой информации, а также структур данных из библиотек (типа векторов, различных матриц и т. д.), использующих её для распределения, и конструкций языка типа циклов и кортежей среда исполнения распараллеливает программу. Происходит это прозрачно для прикладного программиста, с учётом в run-time имеющихся ресурсов типа ядер, процессоров, характеристик локальности памяти. Вся нагрузка по распараллеливанию уходит с прикладного программиста (скажем «нет» прагмам OpenMP) на разработчика библиотек, а именно, структур данных, «умеющих» учесть метаинформацию для распределения данных по локальным фрагментам с целью их параллельной обработки.

Это был короткий рассказ о Fortress. Под конец несколько скептических слов. Сам проект не вышел за рамки исследования (причём выбыл из программы DARPA HPCS), язык и инструментарий разработчика являются сильно недобитыми. Хотя это язык общего назначения, особенности его таковы, что он пригодится только для узкого класса задач: математические вычисления на сильно-связанных параллельных системах. Его пытаются позиционировать как язык будущего для эффективного программирования n-ядерных процессоров в связи с тем, что n для большинства компьютеров будет расти. Однако большинству программ характерен параллелизм не данных, а задач, который лучше программировать явно (иногда и неявно для чистых функций). Есть мнение, что для этого лучше подходят модели типа Actors (вид Message Passing) и языки вроде Erlang и Scala.

Leave a Comment »

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: