Параллельное программирование. MPI?

pogreb38

Нужна помощь девушке-блондинке! :o
Умные мальчики, помогите, пожалуйста :)
Нужно запустить программку (уже написанную которая считает что-то, а потом выплевывет файлик с результатом, на многопроцессорной машине.
Программу нужно размножить на много процессов, то есть саму прогу распараллеливать не нужно, нужно только много-много (порядка 1000 раз) ее запустить.
Как написать такую программу? видимо, нужно использовать MPI?

pitrik2

то есть саму прогу распараллеливать не нужно, нужно только много-много (порядка 1000 раз) ее запустить.
тоесть все эти 1000 запусков дадут один и тот же результат?
или входные данные будут разные?

katrin2201

Программу нужно размножить на много процессов, то есть саму прогу распараллеливать не нужно, нужно только много-много (порядка 1000 раз) ее запустить.
Если эта тысяча процессов не будет взаимодействовать друг с другом, то "распараллелить" очень просто - пишешь bat файл, который в цикле запустит твою программу столько раз, сколько надо.
Если процессы будут взаимодействовать между собой, то тут уже может пригодиться MPI - суть программный интерфейс для взаимодействия процессов на разных машинах.

Papazyan

Помогу.
Такса: 1000р.

pogreb38

тоесть все эти 1000 запусков дадут один и тот же результат?
или входные данные будут разные?
Неа, там стохастический процесс, так что результаты буду разные, мне нужно 1000 результатов, чтобы потом их усреднить.

pogreb38

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

geja_03

многопроцессорная большая крутая машина
Таки smp или кластер?

pogreb38

Хм...таких умных слов я не знаю. Сформулируйте мне, плиз, вопрос, я задам научнику, он мне ответит :)

Sergvit

Я правильно понимаю, что с исходной прогой ничего делать не надо, нужно просто запустить ее 1000 раз и получить 1000 файлов результатов file0001,..., file1000?
На "большой крутой машине" какая ОС?

geja_03

В общих чертах - smp это когда одна машина и на ней много процессоров, а кластер - это когда много машин на которых много процессоров.

pogreb38

Да, именно, все правильно понял :)
Так, записываю вопросы для научника:
1) Какая на машине операционка.
Что еще спросить? :)

pogreb38

В общих чертах - smp это когда одна машина и на ней много процессоров, а кластер - это когда много машин на которых много процессоров.
Ой, да, что-то было такое курсе на 3ем... :grin:
спрошу :)

geja_03

Программе можно как-то задавать имя выходного файла?

pogreb38

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

katrin2201

В моем распоряжении будет многопроцессорная большая крутая машина в умном исследовательском центре, если будет bat файл, который в цикле запускает, операционка самостоятельно раскидает процессы по процессорам и поставит их в длинную очередь?
В очередь к сожалению не поставит, будет пытаться их все одновременно выполнять.
Это конечно не оптимально, и в идеале тебе надо узнать
а) количество процессоров/ядер на машине
б) написать скрипт который будет последовательно запускать твою программу
в) запустить столько инстансов скрипта сколько процессоров/ядер насчитали в пункте а
Если в ВЦ еще и кластер, то все несколько усложняется.
Вообще, учитывая что у тебя есть научник, лучше тебе к нему с этим вопросом. Он наверняка сможет помочь или найти того, кто поможет.
Вопрос непринципиальный и специфичный, так что смущаться его задавать не надо.

Realist

MPI тебе не нужно. SMP там или не SMP тоже значения не имеет.
Обычно вместе с доступом к кластеру рассказывают, где лежит руководство пользователя, инструкция или что-то такое, где указано, как именно на этом кластере принято запускать программы. Просто надо понимать принципиальную разницу между настольным компом и кластером.
На настольном компе ты программу запустила и она выполняется. На кластере (на котором много пользователей, много программ на долгое время) установлена та или иная система очередей. Ты добавляешь свою программу в очередь, дав специальную команду. Хочу, мол, выполнить такую программу с такими-то параметрами на стольки-та процессорах (в твоем случае на 1 выполняться она будет не больше стольки-то часов, по завершению пришлите мне письмо на такой-то адрес. Пример А уже система очередей сама в подходящий момент запустит твою программу.
Значит, тебе надо, чтобы результаты запуска программы сохранялись в свой файл. Понятно, что когда имя файла забито в код программы, это есть проблема. Самый простой путь такой: пусть программа распечатывает результат прямо на экран. А при постановке программы в очередь ты укажешь, в какой файл сохранять то, что программа пыталась вывести на экран. Для каждого запуска — свой файл.
Теперь тебе надо 1000 раз дать команду на постановку в очередь твоей программы. Проще всего это сделать, написав командный файл. Давай так. Ты разберешься, как запустить программу один раз, напишешь, какую для этого команду надо дать, а дальше мы посмотрим, как сделать это 1000 раз.
Надеюсь, что поток сознания получился читаемым. Успехов.

pogreb38

Вай, спасибо огромное! :) буду разбираться, потом напишу! :)

milanadiana

на чем программа? уже скомпилена или нет? если да, под что скомпилена?

milanadiana

И еще вопрос, девочка блондинка, ты озаботилась инициализацией генератора случайных чисел от времени? Иначе даже в твоей суперстохастической программе все результаты будут одинаковы...

serega1604

девочка-блондинка вроде не утверждала, что она писала эту программу.

milanadiana

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

Andbar

По-моему, это означает, что она ее писала. Нет?
нет, ей могли дать готовый текст и объяснить, куда что прописывать.

milanadiana

Это значит, что у нее либо экзешник виндовый и надо пересобирать, либо у нее матлаб какой-нить. Это надо знать, чтоб советовать.

Andbar

Не обязательно. Или ты напрочь отрицаешь тот вариант, что у неё *.f90-файлик, на компе стоит Intel Fortran Compiler и её объяснили, что перед запуском после модификации текста необходимо запустить ifl имя-файла.f90 ?

pogreb38

Мальчики, объясняю: :grin:
1) Программу писала я, программа на C++, писала в 2003ей студии, если это принципиально, то есть под Винду. Пересобрать экзешник могу, обладаю некоторыми минимальными знаниями программирования ;)
2) На счет "инициализации генератора случайных чисел от времени" : случайные числа генерю при помощи функции rand при запуске программы выполняется srandunsigned) time(NULL;
Я искренне думала, что это и есть "инициализация генератора случайных чисел от времени", если не права - расскажите, плиз, как сделать правильно.

mkrec

> случайные числа генерю при помощи функции rand
это не всегда хороший вариант

klyv

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

mkrec

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

oliver11

при запуске программы выполняется srandunsigned) time(NULL;
Не самый лучший вариант. На кластере, скорее всего, большое количество экзепляров твоей программы будут запускаться параллельно в один и тот же момент времени. И если часы на вычислительных узлах синхронизированы с точностью до секунды...
Теперь по теме. Мои скудные познания про кластеры говорят, что обычно у всех узлов есть общая файловая система или часть файловой системы, примонтированная по сети (например, с помощью NFS). И обычно на кластерах установлена какая-нибудь реализация MPI (самая распространённая - MPICH, есть другие свободные/бесплатные реализации, может быть реализация MPI, выпущенная и оптимизированная специально под данный кластер).
Если оба предположения верны, то могу предложить следующий способ параллельного запуска многих экземпляров программы с помощью MPI.
Входные файлы кладутся в директорию, доступную всем вычислительным узлам. Допустим, именуются 1.in, 2.in, и т.д. С помощью mpirun на каждом узле запускается твоя программа, немножко модифицированная для использования MPI. Твоя программа определяет общее количество узлов с помощью MPI_Comm_size и номер своего узла MPI_Comm_rank. После этого обрабатывает nfiles/size файлов, записывает результаты в соответствующие файлики в другой директории, доступной всем вычислительным узлам, и завершает работу.
То есть каждый экземпляр твоей программы обработает свою часть входных данных (которую определяет по rank). Кстати, в таком случае инициализировать счётчик случайных чисел можно тоже с использованием rank-а.
Подробнее про MPI можно почитать тут: http://computing.llnl.gov/tutorials/mpi/

milanadiana

Да, это и есть инициализация от времени. Попробуй rand48 еще. На многопроцессорной машине, скорее всего, будет *NIX-подобная система, поэтому выкидывай студию, ставь icc (качать с сайта интела) и добивайся компиляции кода на нем. Такой код будет компилиться на всех POSIX-овых компиляторах, то есть на gcc, icc и проч. А то, что скомпилилось в студии - не факт. Удачи.

klyv

ступил, пардон

Andbar

поэтому выкидывай студию
студию выкидывать не надо, icc встраивается в неё, но по поводу совместимости - это да

volkov55

pthreads

Realist

Млин, увидел знакомое слово MPI и написал, все что про него знаешь?
Уже ж написано, что не нужен тут MPI ни разу.

oliver11

Уже ж написано, что не нужен тут MPI ни разу.
Да, слажал, невнимательно прочитал тред.
mpisubmit или ompsubmit осилят запустить программу, не использующую mpi/openmp?

geja_03

mpirun, вроде мпичевский, вполне нормально запускает омпшные\непараллельные программы на нодах. Думаю у других реализаций таких проблем тоже не возникает
Оставить комментарий
Имя или ник:
Комментарий: