среда, августа 24, 2011

Параллелим на многоядерный кластер. C/C++ или Java.

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

Любой кто начнет искать "как бы написать что-нибудь для кластера" наткнётся на аббревиатуру MPI. И наверняка наткнется на аббревиатуру OpenMP когда речь зайдёт о программировании для многоядерных систем.

Когда заходит речь о таких сложных системах желание снизить влияние программистких ошибок на систему(ну или снизить порог уровня годных для этой задачи программистов) вполне имеет право на жизнь. Понятно что если вы сражаетесь за каждый такт процессора на каждом ядре - то у вас нет альтернативы C/C++ библиотекам MPI/OpenMP и команде сильных программистов с крепкой нервной системой. Если же копейки процессорного времени вас не очень волнуют и сильной команды C/C++ спецов нет, то можете взглянуть на Java с её библиотеками-аналогами (MPJ Express и какой-то субъективно сомнительный на вид JOMP). Но будьте готовы что для совсем простых задач "копейки" выльются в двукратное отставание как например тут.

Что лучше "в среднем по больнице" сложно сказать. Явовские либы определённо имеют некоторые баги со стабильностью на некоторых системах (можете погуглить - вроде на солярке точно были проблемы у mpj), но в целом есть примеры работающие в продакшне, так что ничего критичного нет. На плюсах же наверняка у малоопытных несильных программистов будут большие проблемы одной из которой будет нахождение собственно проблемного кода. Но это мое субъективное мнение.

Да, если у вас нету кластера, но есть относительно мощный компьютер вы можете запустить пару виртуалок и сделать кластер из них. Например если соберетесь под виндой запустить пару(ну или больше если система и здравый смысл позволяют) линуксов, то вот это поможет вам настроить сеть между двумя виртуалками: много букоф на английском. Лично у меня этот вариант с парой убунту серверов и небольшой MPI программой на C++ сработал на ура.

P.S. На всякий случай: если вы пишете что-то распределённое это вовсе не значит что вам необходим MPI. Но если у вас получается велосипед который повторяет функционал MPI - это повод задуматься.