вторник, 10 июля 2007 г.

Небольшой обзор по параллелизму (в России)

[(disclaimer) | Данный обзор не является сколько-нибудь полным и отражает виденье автором ситуации на данный момент]

На Realcoding.ner в комментариях к моему переводу статьи Саттера появлился такой вопрос
Nuzhny: Насколько я понял, ты серьёзно этим занимаешься. Видел несколько твоих тематических переводов на rsdn'е. Интересно было бы узнать, насколько близки работы мировых разработчиков и разработчиков с того же parallel.ru.


И поскольку отвечая на него, я поднял интересные с моей точки зрения материалы, с которыми я сталкивался, но о которых не писал здесь, то решил, восполнить этот пробел:


Nuzhny: Насколько я понял, ты серьёзно этим занимаешься. Видел несколько твоих тематических переводов на rsdn'е. Интересно было бы узнать, насколько близки работы мировых разработчиков и разработчиков с того же parallel.ru.

За весь Parallel.ru я не скажу, а как пример близости технологий, разработанных у нас и на западе, могу привести язык MC# (проект в котором сейчас работаю).
Язык базируется на C#. В основе модели MC# положено Join-исчисление (которое на западе было реализовано в JoCaml, MS Research Polyphonic C#(который стал частью MS C_omega), и в Nemerle на макросах).
Run-time языка MC# основан на .NET FW(\Mono). В определенном смысле MC# - развитие майкрософтовского Polyphonic C# на случай как локальных, так и распределенных вычислений. Так что в этом смысле работа находится в русле (в мейнстриме :)).
К тем категориям, которые выделили Callahan\Sutter можно добавить ещё рад столпов, которые лежат в другой, ортогональной столпам Каллахана плоскости. Это:

  1. Встроенные системы (нпр., DSP\ПЛИС\FPGA)
  2. Многоядерные ПК\Суперкомпьютеры (точка соприкосновения с Callahan\Sutter и Воеводиным)
  3. Кластера\GRID-системы

Очевидно, что эти столпы также являются категориями параллелизма, как и столпы Каллахана.

В области встроенных систем у нас есть успехи, например - НТЦ Модуль _ разработал собственный DSP процессор и совместно с Samsung-ом запустил его производство. Процессор может быть использован и для параллельных вычислений, только параллелизм там основан нейронных сетях. (по крайней мере, такие заявления делались при анонсировании НТЦ Модуль технологии NeuroMatrix)
Или даже вот этот пример ("народная" разработка Форт(Forth) процессора на ПЛИС) показателен.

Нельзя не сказать также о GPGPU технологиях,..., хотя видимо можно и не сказать, поскольку в России насколько я знаю, нет проектов подобных MS Research Accelerator GPGPU (исполнение managed-программ на процессорах графической карточки). Недавно (месяца 4 назад) мой науч.руководитель был на конференции в Москве (к сожалению, название забыл, возможно, DSPA 2007), рассказывал, что там ребята из МГУ делали презентацию нейросети на базе GPGPU, так что скорей всего российские GPGPU проекты есть, просто они не известны мне. (Вспомнилось, кстати, что Тони Хоар заканчивал МГУ, так что у нас в России база для параллелизма оч.хорошая :)

Вообще сейчас все труднее и труднее делить разработки на наши и "ихние", вот например, такие продукты Intel VTune\ThreadAssistant\ и п.р., которые, безусловно, имеют прямое отношение к параллелизму (многопоточности), разрабатываются в центре Intel в Нижнем Новгороде нашими программистами. Есть, разумеется, и сугубо наши, российские разработки - например, алгоритмы параллельных подстановок(это из области мелкозернистый параллелизм(Fine-grained parallelism), нечто близкое к клеточным автоматам), над проблемами которых в частности работает О.И.Бандман в Новосибирском научном городке.

На западе понятно дело куча(кучища!) проектов, посвященных параллелизму, меня заинтересовал проект Ptolemy (университет Беркли, один из авторов - Эдвард Ли) - среда моделирования разнообразных моделей параллельных вычислений. У нас, к сожалению, насколько я знаю таких проектов нет, а ведь именно моделирование и рассмотрение применимости разнообразных моделей вычислений, позволило бы создавать как удачные языки параллельного программирования, базирующиеся на той или иной модели, так и технологии вообщем. Сейчас же отсутствует даже классификация моделей параллельного программирования, что показывает незрелость ещё пока, не системность данной области, имхо.