Необходимо написать программу для научных расчетов (несколько несложных формул дают результат 2 числа — x и y, т. е. строится график).
Для данной задачи, чем меньше шаг интегрирования, тем лучше, но тем дольше приходиться ждать результатов. Поэтому необходимо написать программу, которая могла бы часть расчетов проводить на других компьютерах, т. е. необходимо распараллелить программу.
Дополнительно:
— компьютеры будут разными (ОС, аппаратное обеспечение), кажется, это называется неоднородный кластер
— количество компьютеров будет динамически меняться (включили, выключили, завис, пришел пользователь и загрузил своими задачами так, что данный компьютер неэффективно использовать)
— чтобы не дублировать расчеты, готовые результаты надо будет читать из БД и вносить в БД , т.е. вывод идет не только на монитор, но и в БД, которую тоже надо где-то и как-то хранить
Какой язык подойдет наилучшим образом?
Заранее благодарен
Re: выбор языка для параллельного программирования
Здравствуйте, Tissot, Вы писали: T>Нынче очень моден Erlang
Только числа он медленно считает. В принципе, можно сами вычисления делать например, на C (ну или любом подходящем языке), а часть, связанную с распараллеливанием, сетевым взаимодействием и хранением данных — действительно на эрланге.
Re: выбор языка для параллельного программирования
"programmmista" <79929@users.rsdn.ru> wrote in message news:3287159@news.rsdn.ru... > Необходимо написать программу для научных расчетов (несколько несложных формул дают результат 2 числа — x и y, т. е. строится график). > Для данной задачи, чем меньше шаг интегрирования, тем лучше, но тем дольше приходиться ждать результатов. Поэтому необходимо написать программу, которая могла бы часть расчетов проводить на других компьютерах, т. е. необходимо распараллелить программу. > > Дополнительно: > — компьютеры будут разными (ОС, аппаратное обеспечение), кажется, это называется неоднородный кластер > — количество компьютеров будет динамически меняться (включили, выключили, завис, пришел пользователь и загрузил своими задачами так, что данный компьютер неэффективно использовать) > — чтобы не дублировать расчеты, готовые результаты надо будет читать из БД и вносить в БД , т.е. вывод идет не только на монитор, но и в БД, которую тоже надо где-то и как-то хранить > > Какой язык подойдет наилучшим образом? > > Заранее благодарен
Я б сначала посмотрел, какие готовые фреймвоки на эту тему есть, а потом бы уже про язык реализации думал.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: выбор языка для параллельного программирования
Здравствуйте, programmmista, Вы писали:
P>Про Erlang услышал впервые, в основном наталкиваюсь на следующее: CORBA, Java, C++, OpenMP, MPI. P>Что можете сказать по ним?
Это прошлый сезон.
Re[4]: выбор языка для параллельного программирования
Здравствуйте, programmmista, Вы писали:
P>Ok
Нет, не Ok. Лучше ознакомиться с возможностями параллельного программирования
для тех языков, которые уже знаешь. Так, для упомянутой задачи
хорошо подойдёт библиотека OpenMP, доступная в C, C++ и Fortran.
Но стоит ли изучать язык специально — надо думать.
Про модность Erlang и вчерашний день других языков... ну, у некоторых языков есть фанаты...
тут неподалёку я прочитал, что "фирма Microsoft перейдёт на язык Nemerle, как только узнает о его существовании",
причём это был не юмор. Erlang не особенно распространённый язык.
Re[6]: выбор языка для параллельного программирования
Здравствуйте, Partisan, Вы писали:
P>Здравствуйте, programmmista, Вы писали:
P>>Ok P>Нет, не Ok. Лучше ознакомиться с возможностями параллельного программирования P>для тех языков, которые уже знаешь. Так, для упомянутой задачи P>хорошо подойдёт библиотека OpenMP, доступная в C, C++ и Fortran.
Ещё поясняю насчёт OpenMP и MPI. OpenMP в основном применяется там, где у процессоров
общая память — то есть в основном на компьютере с многоядерным процессором. MPI в основном для распараллеливания
в кластере. Есть вариант одновременного применения — применять OpenMP в пределах компьютера и MPI — между компьютерами.
Re[7]: выбор языка для параллельного программирования
Здравствуйте, Partisan, Вы писали:
P>Ещё поясняю насчёт OpenMP и MPI. OpenMP в основном применяется там, где у процессоров P>общая память — то есть в основном на компьютере с многоядерным процессором. MPI в основном для распараллеливания P>в кластере. Есть вариант одновременного применения — применять OpenMP в пределах компьютера и MPI — между компьютерами.
Да, наиболее актуально использовать возможности и многоядерного процессора и кластера.
А что лучше выбрать, если в кластере есть одноядерные и многоядерные компьютеры?
Что означает "в основном", т.е. они взаимозаменяемы, но просто лучше использовать или что?
Я так понимаю про Java и GridGain лучше забыть — везде пишут, что требует много памяти и медленно работает?
Re: выбор языка для параллельного программирования
Здравствуйте, programmmista, Вы писали:
P> Необходимо написать программу для научных расчетов (несколько несложных формул дают результат 2 числа — x и y, т. е. строится график). P> Для данной задачи, чем меньше шаг интегрирования, тем лучше, но тем дольше приходиться ждать результатов. Поэтому необходимо написать программу, которая могла бы часть расчетов проводить на других компьютерах, т. е. необходимо распараллелить программу.
P> Дополнительно: P> — компьютеры будут разными (ОС, аппаратное обеспечение), кажется, это называется неоднородный кластер P> — количество компьютеров будет динамически меняться (включили, выключили, завис, пришел пользователь и загрузил своими задачами так, что данный компьютер неэффективно использовать) P> — чтобы не дублировать расчеты, готовые результаты надо будет читать из БД и вносить в БД , т.е. вывод идет не только на монитор, но и в БД, которую тоже надо где-то и как-то хранить
P> Какой язык подойдет наилучшим образом?
Возможно, стоит рассмотреть grid-системы. Можно почитать здесь: http://gridclub.ru/about/. Там же есть описание программных средств.
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>
Best regards, Буравчик
Re[8]: выбор языка для параллельного программирования
P>Да, наиболее актуально использовать возможности и многоядерного процессора и кластера. P>А что лучше выбрать, если в кластере есть одноядерные и многоядерные компьютеры? P>Что означает "в основном", т.е. они взаимозаменяемы, но просто лучше использовать или что? P>Я так понимаю про Java и GridGain лучше забыть — везде пишут, что требует много памяти и медленно работает?
Я вообще то не специалист, изучаю распараллеливание понемногу для умственного развития.
Утверждение, что OpenMP в основном для систем с общей памятью, означает, что память может быть не совсем общей —
компьютерные архитектуры довольно разнообразны. Так, в одной модели процессора могут быть кеши L1 и L2 для
каждого ядра по отдельности, а в другой кеш L2 отдельный для каждого ядра. Ещё — сложный случай — "архитектура cc-NUMA"
(я даже запомнил это название с испугу), когда содержимое одного кеша автоматически копируется в другой.
Из-за этого повышение быстродействия от распараллеливания с помощью OpenMP может оказаться
меньше ожидаемого. Но это не является препятствием к применению, просто надо учитывать возможные ловушки
(объясняется в литературе по OpenMP, есть по крайней мере 2 книжки на английском языке и статьи в интернете).
MPI сложнее для программирования, зато можно использовать в системах без общей памяти, то есть например в кластере.
Этим и объясняется идея использовать то и другое.
Да, под многоядерным процессором можно понимать и одноядерный с hyperthreading
(одновременное исполнение 2 и более потоков в одном ядре) — оно тоже даёт выигрыш от распараллеливания,
в том числе с OpenMP, хотя и меньшее, чем 2 настоящих ядра.
Java: фирма Sun полагается на автоматическое распараллеливание. Однако для данной вычислительной задачи
делить вычисления на части и потом объединять результаты придётся вручную, то есть ничего похожего на OpenMP нет,
и надо использовать обычные средства работы с потоками в Java. Зато на уровне кластера доступно автоматическое распараллеливание.
Насчёт быстродействия не знаю — я программирую на Java, но другие задачи, поэтому не испытывал.
Однако скептические высказывания о быстродействии Java не вызывают у меня доверия — авторы некоторых из них (в форумах)
демонстрировали плохое знание Java. Поэтому надо оценивать аргументацию, особенно личный опыт.
Вот, что знал, то написал. Erlang не знаю, только возразил против его модности.
Re[9]: выбор языка для параллельного программирования
Здравствуйте, Partisan, Вы писали: P>Вот, что знал, то написал. Erlang не знаю, только возразил против его модности.
Не знаю, как мой коллега, первым предложивший erlang, но говорил об erlang как о средстве для реализации вот этих требований:
— количество компьютеров будет динамически меняться (включили, выключили, завис, пришел пользователь и загрузил своими задачами так, что данный компьютер неэффективно использовать)
— чтобы не дублировать расчеты, готовые результаты надо будет читать из БД и вносить в БД , т.е. вывод идет не только на монитор, но и в БД, которую тоже надо где-то и как-то хранить
Т.е. erlang мог бы пригодиться для контроля за вычислениями в целом: появлением/исчезновением новых нод, занесением результатов в БД и т.п. Т.е. как альтернатива для MPI — ни в коем случае не для OpenMP.