- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Параллельное и распределенное программирование на С++ - Хьюз Камерон
Шрифт:
Интервал:
Закладка:
int main(int argc, char *argv[]) {
int Taskl[20]; int Task2[50]; int Task3[30]; //...
pvm_spawn («pvm_generic_combination», NULL, 1,
«hostl»,20,Taskl); pvm_spawn («generate_plans», argv, 0, "", 50, Task2) ; pvm_spawn(«agent_filters»,argv++,l, «host 3»,30,&Task3) ; //.. .
}
При выполнении кода, представленного в листинге 6.7, создается 100 задач. Первые 20 задач генерируют сочетания. Слелующие 50 по мере создания сочетаний генерируют планы на их основе. Последние 30 задач отфильтровывают самые удачные планы из набора планов, сгенерированного предыдущи м и 50 задачами. Уже только это краткое описание позволяет ощутить отличие модели MPMD от модели SPMD, в которой все программы, порожденные функцией pvm_spawn (), были одинаковы. Здесь же за работу, назначаемую PVM-задача м, «отвечают» програ мм ы pvm_generic_combination, generate_plans и agent_filters. Все эти задачи выполняются параллельно и работают с собственны м и набора м и данных, нес м отря на то что одни наборы являются результато м преобразования дру г их. Про г ра мм а pvm_generic_combination преобразует свой входной набор данных в набор, который зате м может использовать программа generate_plans. Программа generate_plans, в свою очередь, преобразует входной набор данных в набор, который может затем использовать программа agent_filters. Очевидно, что эти задачи должны обмениваться сообщениями. Эти сообщения представляют собой входную иуправляющую информацию, которая передается между процесса м и. Необходи м о также отметить, что в листинге 6.7 функция pvm_spawn () используется для размещения 20 задач pvm_generic_combination на компьютере с именем hostl. Задача generate_plans была размещена на 50 безымянных процессорах, но каждая из этих 50 задач получила при это м один и тот же аргу м ент ко м андной строки с по м ощью параметра argv. Задачи agent_filters также были направлены на конкретный ко м пьютер (с именем host 3), и каждая задача получила один и тот же аргумент командной строки посредством параметра argv. Этот пример — лишь еще одно подтверждение гибкости и мо щ и библиотеки PVM. Некоторые варианты реализации модели MPMD с использованием среды PVM показаны на рис. 6.5.
При желании мы можем воспользоваться преиму щ ествами конкрет н ых ресурсов конкретных компьютеров или же «положиться на судьбу» в виде «заказа» произвольных безымянных компьютеров. Мы можем также назначить рааличные виды работ различным задачам одновременно. На рис. 6.5 компьютер А представляет собой компьютер с массовым параллелизмом (МП-компьютер), а компьютер В осна щ ен некоторым количеством специализированных математических процессоров. Также отметьте, что PVM-среда в данном случае состоит из таких компьютеров, как PowerPCs, Spares, Crays и т.д. В одних случалх можно не беспокоиться о конкретных возможностях компьютеров в PVM-среде, а в дру г их требуется иной подход. Использование функции pvm_spawn () позволяет С++-программисту не указывать конкретный компьютер для решения задачи, когда это не важно. Но если вам известно, что компьютер осна щ ен специализированными средствами, то их можно эффективно использовать, определив соответствую щ ий параметр при вызове функции pvm_spawn ().
Рис. 6.5. Неко т орые вариан т ы модели MPMD дос т упны для реализации благодаря использованию среды PVM
§ 6.1. Обозначение сочетаний
Предположим, м ы хотели бы набрать команду програм м истов (в количестве восьми человек) из 24 кандидатов. Сколько различных ко м анд из восьми программистов можно было бы составить из этого числа кандидатов? Один из результатов, который следует из основного закона комбинаторики, говорит о том, что су щ ествуе т 735 471 различных команд, состоя щ их из восьми программистов, которые мот быть выбраны из 24 кандидатов. Обозначение C(n,r) читается как сочетание из n элементов по г(и означает количество ко м бинаций из n эле м ентов по r). Сочетание C(n,r) вычисляется по формуле:
6.3. Базовые меха н измы PVM 233
n
r(n-r)
Если у нас есть м н ожество, которое представляет сочетания, например {a,b,C}, то считается, что оно совпадает с множеством {b,a,c} или {c,b,a}. Другими словами, нас интересует не порядок членов в этом множестве, а сами члены. Многие параллельные програМхМЫ, а именно программы, использую щ ие алгоритмы поиска, эвристические методы и средства искусственного интеллекта, обрабатывают огромные множества сочетаний и их близких родственников перестановок.
Базовые механизмы PVM
Среда PVM состоит из двух компонентов: PVM-демона (pvmd) и библиотеки pvmd. Один PVM-демон pvmd выполняется на каждом компьютере в виртуальной машине. Этот демон служит в качестве маршрутизатора сооб щ ений и контроллера. Каждый демон pvmd управляет списком PVM-задач на своем компьютере. Демон управляет процессами, выполняет минимальную аутентификацию и отвечает за отказоустойчивость. Обычно первый демон запускается вручную. Затем он запускает другие демоны. Только исходный демон может запускать дополнительные демоны. И только исходный демон может безусловно остановить другой демон.
Библиотека pvmd состоит из функций, которые позволяют одной PVM-задаче взаимодействовать с другими. Эта библиотека также включает функции, которые позволяют PVM-задаче связываться со своим демоном pvmd. Базовал архитектура PVM-среды показана на рис. 6.6.
РУМтреда состоит из нескольких PVM-задач. Каждал задача должна содержать один или несколько буферов отправки сооб щ ений, но в каждый момент времени активным может быть только один буфер (он называется активным буфером отправки сообщений). Каждая задача имеет активный буфер приема сооб щ ений. Обратите внимание (см. рис. 6.6) на то, что взаимодействие между PVM-задачами реально выполняется с использованием ТСР-сокетов. Функции pvm_send () делают доступ к сокетам прозрачным. Протраммист не получает доступа к функциям ТСРчюкетов напрямую. На рис. 6.6 также показано взаимодействие PVM-задач со своими демонами pvmd с помо щ ью TCP-сокетов и взаимодействие между самими демонами с помо щ ью UDP-сокетов. И снова-таки, обра щ ения к сокетам выполняются посредством PVM-функций. Програ мм ист не должен заниматься программированием сокетов на низком уровне. PVM-функции, которые используются в этой книге, делятся на четыре следующие категории:
• управление процессами;
• упаковка сооб щ ений и их отправка;
• распаковка сооб щ ений и их получение;
• управление буфером сооб щ ений.
Несмотря на су щ ествование дру г их кате г орий РУМч^ункций (например, инфор м ационные и сервисные функции или функции групповой обработки), реко м енлуе м обратить внимание на функции обработки сооб щ ений и функции управления процессами. Дру г ие же функции булут расс м отрены в контексте програ мм, в которых они используются.
Рис. 6.6. Базовая архи т ек т ура PVM-среды
Функции управления процессами
Библиотека PVM содержит шесть часто используе м ых функций.
Функция pvm_spawn () используется для создания новых PVM-задач. При вызове этой функции м ожно указать количество создавае м ых задач, м есто их создания и аргу м енты, передавае м ые каждой задаче, напри м ер: