Камерон Хьюз - Параллельное и распределенное программирование на С++

Здесь есть возможность читать онлайн «Камерон Хьюз - Параллельное и распределенное программирование на С++» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: МоскваСанкт-ПетербургКиев, Год выпуска: 2004, ISBN: 2004, Издательство: Издательский дом «Вильямс», Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Параллельное и распределенное программирование на С++: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Параллельное и распределенное программирование на С++»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Здесь описаны простые методы программирования параллельных виртуальных машин и основы разработки кластерных приложений. Эта книга не только научит писать программные компоненты, предназначенные для совместной работы в сетевой среде, но и послужит надежным «путеводителем» по стандартам для программистов, которые занимаются многозадачными и многопоточными приложениями. Многолетний опыт работы привел авторов книги к использованию агентно-ориентированной архитектуры, а для минимизации затрат на обеспечение связей между объектами системы они предлагают применить методологию «классной доски».
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.

Параллельное и распределенное программирование на С++ — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Параллельное и распределенное программирование на С++», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// Листинг б.З. Создание сочетаний из заданных множеств

int main(int argc,char *argv[]) {

int RetCode,TaskId[4];

RetCode = pvm_spawn («pvm_generic_combination11, NULL, 0, "", 4,TaskId);

if(RetCode == 4) {

colorCombinations (TaskId[0] , 9) ; colorCombinations(TaskId[l] ,12) ; numericCombinations(TaskId[2],4); numericCombinations(TaskId[3],3); saveResult(TaskId[0]); saveResult(TaskId[l]); saveResult(TaskId[2]); saveResult(TaskId[3]); pvm_exit() ;

}

else{

cerr « «Ошибка при порождении сыновнего процесса.»

« endl; pvm_exit() ;

}

return(0);

}

В листинге 6.3 обратите внимание на порождение четырех PVM-задач: pvm_spawn(«pvm_generic_combination» ,NULL, 0, н » ,4,TaskId) ;

Каждая порожденнал задача должна выполнять програ м му сименем pvm _generic_combination.Аргу м ент NULLв вызове функции pvm_spawn()означает, что через параметр argv[]не передаются никакие опции. Значение 0в вызове функции pvm_spawn() свидетельствует, что нас не беспокоит, на каком ко м пьютере будет выполняться наша задача. Аргу м ент TaskIdпредставляет м ассив, предназначенный для хранения четырех целочисленных значений, который при условии успешного выполнения функции pvm_spawn() будет содержать идентификаторы каждой порожденной PVM-задачи. В листингеб.З обратите также вни м ание на вызов функций colorCombinations() и numericCombinations(). Они «дают работу» PVM-задачам. Определение функции colorCombinations() представлено в листинге 6.4.

// Листинг 6.4. Определение функции colorCombinations()

void colorCombinations(int TaskId,int Choices) {

int MessageId =1; char *Buffer; int Size; int N;

string Source(«blue purple green red yellow orange

silver gray "); Source.append(«pink black white brown light_green

aqua beige cyan "); Source.append(«olive azure magenta plum orchid violet

maroon lavender»); Source. append (" \n**) ;

Buffer = new char[(Source.size() + 100)]; strcpy(Buffer,Source.c_str()); N = pvm_initsend(PvmDataDefault); pvm_pkint(&Choices,1,1); pvm_send(TaskId,MessageId); N = pvm_initsend(PvmDataDefault); pvm_pkbyte(Buffer,strlen(Buffer),1); pvm_send(TaskId,MessageId); delete Buffer;

}

В листингеб.З от м етьте два обращения к функции colorCombinations().Каждое из них велит PVM-задаче перечислить различное количество сочетаний цветов: C(24,9) и C(24,12). Первал PVM-задача д олжна сгенерировать 1 307 504 цветовых сочетаний, а вторал — 2 704 156. Эту работу выполняет програм м а, заданнал в вызове функции pvm_spawn(). Каждый цвет представляется строкой. Следовательно, програ мм а pvm_generic_combination(с по м ощью функции colorCombinations())генерирует сочетания цветов, используя в качестве входных данных набор строк. Но когда она орулует «рука м и» функции numericCombinations(), показанной в листинге 6.5, в качестве входных данных используется набор чисел с плавающей точкой. Код листинга 6.3 также содержит два вызова функции numericCombinations(). Первый генерирует C(7,4) сочетаний, а второй — C(7,3).

// Листинг 6.5. Использование PVM-задач для генерирования // сочетаний чисел

void numericCombinations(int TaskId,int Choices) {

int MessageId = 2; int N;

double ImportantNumbers[7] =

{3.00e+8,6.67e-ll,1.99e+30,

6.2. Библио т ека PVM для языка С++ 229

1.67e-27,6.023e+23,6.63e-34,

3.14159265359}; N = pvm_initsend(PvmDataDefault); pvm_pkint(&Choices,1,1) ; pvm_send(TaskId,MessageId) ; N = pvm_initsend(PvmDataDefault); pvm_pkdouble (ImportantNumbers, 5,1) ; pvm_send(TaskId,MessageId) ;

}

В функции numericCombinations() из листинга 6.4 PVM-задача использует м ассив чисел с плаваю щ ей точкой, а не м ассив байтов, представл я ю щ их строки. Поэто м у функция colorCombinations()отправл я ет свои данные PVM-задача м с по м о щ ью вызовов таких функций:

pvrt_pkbyte(Buffer,strlen(Buffer) ,1) ; pvm_send(TaskId,MessageId) ;

А функция numericCombination() отправляет свои данные PVM-задача м таки м образом:

pvm_pkdouble (ImportantNumbers, 5,1) ; pvn_send(TaskId,MessageId) ;

Функция colorCombinations()в листинге6.4 создает строку названий цветов, азатем копирует ее в м ассив Bufferтипа char.Этот м ассив затем упаковывается и отправляется PVM-задаче с помо щ ью функций pvm_pkbyte() и pvm_send(). Функция numericCombinations()в листинге6.5 создает массив типа doubleи отсылает его PVM-задаче с помо щ ью функций pvm_pkdouble() и pvm_send(). Одна функция отправляет символьный массив, а другая — массив типа double.В обоих случалх PVM-задачи выполняют одну и туже программу pvm_generic_combination.Именно здесь нас выручает преиму щ ество использования С++-шаблонов. Одинаковые задачи благодаря этому могут работать не только с различными данными, но и с различными типами данных без изменения самого кода. Использование шаблонов в С++ позволяет сделать модель SPMD более гибкой и эффективной. Программе pvm_generic_combinationпрактически безразлично, с какими типами данных ей придется работать. Использование контейнерных С++-классов позволяет генерировать любые комбинации векторов (vector)объектов. Программа pvm_generic_combination«не знает», что она будет работать с двумя типами данных. В листин г е 6.6 представлен раздел кода из программы pvm_generic_combination.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Параллельное и распределенное программирование на С++»

Представляем Вашему вниманию похожие книги на «Параллельное и распределенное программирование на С++» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Параллельное и распределенное программирование на С++»

Обсуждение, отзывы о книге «Параллельное и распределенное программирование на С++» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x