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

Тут можно читать онлайн Камерон Хьюз - Параллельное и распределенное программирование на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом «Вильямс», год 2004. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Параллельное и распределенное программирование на С++
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом «Вильямс»
  • Год:
    2004
  • Город:
    МоскваСанкт-ПетербургКиев
  • ISBN:
    ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

Параллельное и распределенное программирование на С++ - читать книгу онлайн бесплатно, автор Камерон Хьюз
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// Листинг 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.

// Листинг 6.6. Использование тега MessageId для // распознания типов данных

pvm_bufinfo (N, &NumBytes, &MessageId, &Ptid) ; if(MessageId == 1){

vector Source;

Buf = new char[NumBytes];

pvm_upkbyte(Buf, NumBytes,1);

strstream Buffer;

Buffer « Buf « ends,-

while(Buffer.good())

{

Buffer » Color;

if(!Buffer.eof()){

Source.push_back(Color);

}

}

generateCombinations(Source, Ptid,Value); delete Buf;

}

if(MessageId == 2){

vector Source; double *ImportantNumber; NumBytes = NumBytes / sizeof(double); ImportantNumber = new double[NumBytes]; pvm_upkdouble(ImportantNumber, NumBytes,1); copy(ImportantNumber,ImportantNumber +(NumBytes + 1), inserter(Source, Source.begin())); generateCombinations(Source, Ptid,Value); delete ImportantNumber;

}

Здесь используется тег MessageId,позволяю щ ий распознать, с каким типом данных м ы работае м. Но в С++ воз м ожно более удачное решение. Если тег MessageIdсодержит число 1,значит, м ы работае м со строка м и. Следовательно, м ожно сделать сле-лую щ ее объявление: vector Source;

Если тег MessageIdсодержит число 2,то м ы знае м, что должны работать с числа м и с плаваю щ ей точкой, и поэто м уделае м такое объявление: vector Source;

Объявив, какого типа данные будет содержать вектор Source,остальную часть функции в програ мм е pvm_generic_combinationможно легко обоб щ ить. В листин- r e 6.6 обратите вни м ание на то, что каждая инструкция if()вызывает функцию generateCombinations(), которая является шаблонной. Эта шаблоннал архитектура позво л яет достичь такой степени универсальности, которая распростра н яет сце н арии SPMD и MPMD на наши PVM-програ мм ы. Мы вер н е м ся к обсуждению нашей програм м ы pvm_generic_combinationпосле расс м отрения базовых механизмов PVM-среды. Важно отметить, что контейнерные С++-классы, потоковые классы и шаблонные алгорит м ы значительно усиливают гибкость PVM-програ мм ирования, которую невозможно было бы так просто реализовать в других PVM-средах. Именно такая гибкость создает воз м ожности д л я построения высокоорганизованных и элегантных парал л е л ьных архитектур.

Реализация модели MPMD (MIMD) с помощью PVM-и С++-средств

В то время как м оде л ь SPMD испо л ьзует функцию pvm_spawn() д л я создания некоторого чис л а задач, выпо л няю щ их одну и ту же програ мм у, но на потенциально раз л ичных наборах данных и л и ресурсов, м оде л ь MPMD испо л ьзует функцию pvm_spawn() д л я создания задач, которые выпо л няют раз л ичные програм м ы на раз л ичных наборах данных. Как с помо щ ью одной С++-программы реализовать модель MPMD (на основе PVM-функций), показано в л истинге 6.7.

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

// Листинг 6.7. Использование PVM для реализации // MPMD-модели вычисления

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

int Taskl[20]; int Task2[50]; int Task3[30]; //...

pvm_spawn («pvm_generic_combination», NULL, 1,

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

Интервал:

Закладка:

Сделать


Камерон Хьюз читать все книги автора по порядку

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




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


Отзывы читателей о книге Параллельное и распределенное программирование на С++, автор: Камерон Хьюз. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x