-->

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

На нашем литературном портале можно бесплатно читать книгу Параллельное и распределенное программирование на С++, Хьюз Камерон-- . Жанр: Программирование / Программное обеспечение / Прочая компьютерная литература. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Параллельное и распределенное программирование на С++
Название: Параллельное и распределенное программирование на С++
Дата добавления: 16 январь 2020
Количество просмотров: 420
Читать онлайн

Параллельное и распределенное программирование на С++ читать книгу онлайн

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

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

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 55 56 57 58 59 60 61 62 63 ... 181 ВПЕРЕД
Перейти на страницу:

Для описания синхронизации данных используются некоторые типы алгоритмов модели PRAM. Стратегию доступа EREW (исключающее чтение и исключающая запись) можно реализовать с помощью мьютексного семафора. Мьютексный семафор защищает критический раздел, обеспечивал последовательный вход в него. Эта стратегия разрешает либо доступ для чтения, либо доступ для записи. Стандарт POSIX определяет мьютексный семафор типа pthread_mutex_t , который можно использовать для реализации стратегии доступа EREW. Чтобы реализовать стратегию доступа CREW (параллельное чтение и исключающая запись), можно использовать блокировки чтения-записи. Стратегия доступа CREW описывает возможность удовлетворения множества запросов на чтение, но при монопольной записи данных. Стандарт POSIX определяет объект блокировки для обеспечения чтения-записи типа pthread_rwlock_t , а объектно-ориентированный подход к синхронизации данных позволяет встроить механизм синхронизации в объект данных.

Объединение возможностей параллельного программирования и C++ средств на основе PVM

Мы разделили нашу проблему на две части: сгенерированную программу и процесс обучения. Эти две части остаются тесно связанными. Нельзя ожидать, что сгенерированная машина окажется удачной с первой же попытки. Необходимо поэкспериментировать с обучением одной такой машины и посмотреть, как пойдет этот процесс обучения... Алан Тьюринг (Alan Turing), Может ли машина думать?

Система програм м ного обеспечения PVM (Parallel Virtual Machine — параллельная виртуальная м ашина) предоставляет разработчику ПО средства для написания и выполнения программ, использующих параллелизм. Система PVM позволяет разработчику представить коллекцию сетевых компьютеров в виде единой логической машины с возможностями параллелизма. Компьютеры этой коллекции могут иметь одинаковые или различные архитектуры. В PVM-систему связываются даже компьютеры, которые попадают в категорию MPP (Massively Parallel Processor — процессор с массовым параллелизмом). Несмотря на то что PVM-программы могут разрабатываться для одного компьютера, реальные преимущества этой системы проявляются при связывании двух и более компьютеров.

6.1. Классические модели параллелизма, поддерживаемые системой PVM

Система PVM в качестве средства связи между параллельно выполняющимися задачами поддерживает модель передачи сообщений. Приложение взаимодействует с PVM посредством библиотеки, которая состоит из API-интерфейсов, предназначенных для управления процессами, отправки и получения сообщений, сигнализации процессов и т.д. С++-программа взаимодействует с PVM-библиотекой точно так же, как с любыми другими библиотеками функций. С++-программе для получения доступа к функциям РVM-библиотеки не нужно создавать специальную форму или архитектуру,в то врем я как программам, написанным на других я зыках, необходимо вызывать определенные функции для инициализации среды. Это означает, что С++-программист может сочетать PVM-возможности с другими стилями С++-программирования (например, объектно-ориентированным, параметризованным, агентно-ориентированным и структурированным программированием). Благодаря использованию таких библиотек, как PVM, MPI или Linda, С++-разработчик может реализовать различные модели параллелизма, тогда как другие языки ограничены примитивами параллелизма, которые встроены в сами языки. Библиотека PVM предлагает, пожалуй, самый простой способ расширения средств языка С++ за счет возможностей параллельного программирования.

Классические модели параллелизма, поддерживаемые системой PVM

Система PVM поддерживает модели MIMD (Multiple-Instruction, Multiple-Data— множество потоков команд, множество потоков данных) и SPMD (Single-Program, Multiple-Data — одна программа, множество потоков данных) параллелизма. В действительности SPMD — это вариант модели SIMD (Single-Instruction, Multiple-Data — один поток команд, множество потоков данных). Эти модели разбивают программы на потоки команд и данных. В модели MIMD программа состоит из нескольких параллельно выполняющихся потоков команд, причем каждому из них соответствует собственный локальный поток данных. По сути, каждый процессор здесь имеет собственную память. В PVM-среде модель MIMD считается моделью с распределенной памятью (в отличие от модели с общей памятью). В моделях с общей памятью все процессоры «видят» одни и те же ячейки памяти. В модели с распределенной памятью связь между хранимыми в ней значениями обеспечивается посредством механизма передачи сообщений. Однако модель SPMD подразумевает наличие одной программы (одного набора команд), которая параллельно выполняется на нескольких компьютерах, причем эти одинаковые на всех машинах программы обрабатывают различные потоки данных. PVM-среда поддерживает как MIMD-, так и SIMD-модели или их сочетание. Четыре классические модели параллелизма показаны на рис. 6.1.

Обратите внимание на то, что модели SISD и MISD (см. рис.6.1) неприменимы к системе PVM. Модель SISD описывает однопроцессорную машину, а для модели MISD вооб щ е трудно найти практическое применение. Две остальные модели, которые можно использовать с системой PVM, определяют, как С++-программа взаимодействует с компьютерами. Разработчик ПО представляет один логический виртуальный компьютер как среду для выполнения нескольких различных параллельных задач, каждая из которых получает доступ к собственным данным, либо одной задачи, выполняющейся в виде набора параллельных клонов, получаю щ их доступ к различным областям данных. Таким образом, с PVM-задачами мы будет связывать только модели, предполагаю щ ие наличие множества потоков команд и одной програм м ы.

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

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

• Управление процессами.

• Упаковка сооб щ ений и их отправка.

• Распаковка сооб щ ений и их прием.

• Обмен задач сигналами.

• Управление буферо м сооб щ ений.

• Функции обработки инфор м ации и служебные процедуры.

• Групповые операции.

Эти библиотечные функции легко интегрировать в С++ среду. Префикс pvm_ в имени каждой функции позволяет не забыть о ее принадлежности соответствующему пространству имен. Для использования PVM-функций необходимо включить в программу заголовочный файл pvm3 . h и скомпоновать ее с библиотекой libpvm. В программах 6.1 и 6.2 демонстрируется, как работает простая PVM-программа. Инструкции по компиляции и выполнению программы 6.1 приведены в разделе «Профиль програ мм ы 6.1».

// Программа 6.1

#include «pvm3.h» #include <iostream> #include <string.h>

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

int RetCode,MessageId;

int PTid, Tid;

char Message[100j;

float Result[l];

PTid = pvm_mytid();

RetCode = pvm_spawn(«program6-2»,NULL,0,''",l,&Tid);

if(RetCode == 1){

MessageId = 1;

strcpy(Message,«22»);

pvm_initsend(PvmDataDefault);

pvm_pkstr(Message);

pvm_send(Tid,MessageId);

pvm_recv(Tid,MessageId);

pvm_upkfloat(Result,1,1);

cout « Result[0] « endl;

pvm_exit();

return(0) ;

}

else{

cerr << «Задачу породить невозможно. " « endl;

pvm_exit();

return(1) ;

1 ... 55 56 57 58 59 60 61 62 63 ... 181 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название