MPI 2.0: Динамическое управление процессами
В MPI 1.1 как такового управления процессами нет: параллельная программа состоит из заранее определенного числа процессов, причем число процессов не может меняться в процессе работы программы и новые процессы не могут подключаться к уже существующим. Этого не всегда бывает достаточно. Поэтому, в MPI 2.0 появились средства, позволяющие следующее: Динамическое порождение новых процессов Установка соединения между уже исполняющимися процессами Динамическое порождение новых процессов int MPI_Comm_spawn(char *command, char *argv[], int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) command — имя исполняемого файла (значим только в процессе с рангом root) argv — массив аргументов (последний должен быть NULL) maxprocs — максимальное число порождаемых процессов (число фактически порожденных процессов может быть меньше ) info — Множество пар «ключ-значение», определяющее, каким образом запускать новые процессы root — ранг корневого процесса. comm — исходный коммуникатор intercomm — адрес, по которому создается интеркоммуникатор между исходными и вновь порожденными процессами. array_of_errcodes — массив кодов ошибок вновь создаваемых процессов. Для порождения процессов запуском разных исполняемых файлов либо запуском одного и того же файла с разными аргументами используется функция MPI_Comm_spawn_multiple int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[], int array_of_maxprocs[], MPI_Info array_of_info[], int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) count — размер массива array_of_commands. array_of_commands — массив имен исполняемых файлов array_of_argv — массив наборов аргументов командной строки для каждого исполняемого файла array_of_maxprocs — массив максимальных количеств порожденных процессов для каждого элемента array_of_commands root — ранг процесса, порождающего новые процессы comm — исходный коммуникатор intercomm — адрес интеркоммуникатора между группами исходных и вновь порожденных процессов array_of_errcodes — массив кодов ошибок вновь создаваемых процессов.
В каждом из порожденных процессов создается коммуникатор MPI_COMM_WORLD, который объединяет только вновь порожденные процессы.Для того, чтобы вновь созданные процессы имели возможность общаться с уже существующими, используется следующая функция: int MPI_Comm_get_parent(MPI_Comm *parent) parent — адрес, по которому записывается интеркоммуникатор между группами новых и ранее существовавших процессов. В случае ошибки по этому адресу записывается MPI_COMM_NULL Пример 1
Есть два исполняемых файла manager и worker. manager при запуске порождает 5 процессов worker Ниже следуют исходные коды manager.c #include <mpi.h> int main(int argc, char** argv) { int world_size, universe_size, *universe_sizep, flag; MPI_Comm everyone; /* intercommunicator */ char worker_program[100]="./worker";
MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &world_size); universe_size=6; MPI_Comm_spawn(worker_program, MPI_ARGV_NULL, universe_size-1, MPI_INFO_NULL, 0, MPI_COMM_SELF, &everyone, MPI_ERRCODES_IGNORE); MPI_Finalize(); return 0; }
worker.c #include <mpi.h> #include <stdio.h> int main(int argc, char *argv[]) { int parentsize,rank,size; MPI_Comm parent; MPI_Init(&argc, &argv); MPI_Comm_get_parent(&parent); MPI_Comm_remote_size(parent, &parentsize); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); printf("Hello, world! I am worker %d of %d \n",rank,size); MPI_Finalize(); return 0; } mpicc manager.c -o manager mpicc worker.c -o worker mpiexec -n 1 ./manager
Hello, world! I am worker 3 of 5 Hello, world! I am worker 0 of 5 Hello, world! I am worker 2 of 5 Hello, world! I am worker 1 of 5 Hello, world! I am worker 4 of 5
Задание 9 Написать программу, которая принимает на вход число процессов, запускает одну из лабораторных работ (1,2,3,6,7), получает от нее результат и выводит.
Задание 10
Написать программу расчета площади круга методом Монте-Карло. Задание 11
Выполнить экспериментальную оценку ускорения системы и вычислить часть параллельных инструкций по закону Амдала. ОСНОВНАЯ РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА 1. А.П.Ершов. Вычислимость в произвольных областях и базисах. Семиотика и информатика, вып.19, стр.3-58, 1982. 2. А.И.Мальцев. Алгоритмы и рекурсивные функции, Наука, 1986. 3. Х.Роджерс. Теория рекурсивных функций и эффективная вычислимость. Мир, Москва, 1972. (Hartley Rogers. Jr, Theory of Recursive Functions and Effective Computability, Mc Graw -Hill, 1967). 4. В.А.Успенский, А.Л.Семенов. Теория алгоритмов: основные открытия и приложения, Наука, 1987, 288 стр. 5. В.А.Вальковский, В.Э.Малышкин. Синтез параллельных программ и систем на вычислительных моделях. - Наука, Сибирское отделение, 1988, 128 стр. 6. В.Котов. Сети Петри. Наука, 1990. 7. С.М.Ачасова, О.Л.Бандман. Корректность параллельных вычислительных процессов. Наука, 1990. 8. Дж. Питерсон. Теория сетей Петри и моделирование систем. Мир, 1984 (J.Peterson. Petri Net Theory and the Modeling of Systems. Prentice-Hall, inc. 1981). 9. Ч.Хоар. Взаимодействующие последовательные процессы, Мир, 1989, 264 стр. 10.В.Анисимов. Программирование распределенных вычислительных систем. Под редакцией В.Е.Котова. Системная информатика, выпуск 3, Наука, 1993, стр. 210-247. 11.В.Н.Сачков. Комбинаторные методы дискретной математики, Наука, 1977, 317 стр. 12.Х.Пападимитриу, К.Стайглиц. Комбинаторная оптимизация. Алгоритмы и сложность. Москва, Мир, 1985 13.М.Гэри, Д.Джонсон. Вычислительные машины и труднорешаемые задачи. – М., Мир, 1982, - 416 с. 14.Ю.А.Березин, В.А.Вшивков. Метод частиц в разреженной плазме. Наука, Новосибирск. 1980. 15.Корнеев В.В, Киселев А. Современные микропроцессоры, 3-е издание. Санк-Петербург, БХВ-Петербург. 2003.- 440 c. 423 16. Таненбаум Э. Архитектура компьютеров. СПб.:Питер, 2002. -704с. 17. Корнеев В.В. Параллельные вычислительные системы. М.: Москва, 1999.- 312 c. 18. Цилькер Б. Я., Орлов С.А. Организация ЭВМ и сетей. СПб.: Питер, 2004. 668 с. 19. Пятьсот самых мощных компьютеров мира [http://www.top500.org]. 20.В.Д.Корнеев. Параллельное программирование в MPI. – Новосибирск, ИВМ и МГ СО РАН, 2002г., 215 стр.. 21.www.openmp.org 22. В.В.Воеводин, Вл.В. Воеводин. Параллельные вычисления. БХВ – Петербург2002. – 609с. 23. Г.Р.Эндрюс. Основы многопоточного параллельного и распределенного программирования. –М.: Изд. Дом Вильямс, Учебное издание
Константин Валентинович Нефедев
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (990)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |