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

Тут можно читать онлайн Камерон Хьюз - Параллельное и распределенное программирование на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: 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
В книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Здесь описаны простые методы программирования параллельных виртуальных машин и основы разработки кластерных приложений. Эта книга не только научит писать программные компоненты, предназначенные для совместной работы в сетевой среде, но и послужит надежным «путеводителем» по стандартам для программистов, которые занимаются многозадачными и многопоточными приложениями. Многолетний опыт работы привел авторов книги к использованию агентно-ориентированной архитектуры, а для минимизации затрат на обеспечение связей между объектами системы они предлагают применить методологию «классной доски».
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.

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

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

Интервал:

Закладка:

Сделать

int pvm_reduce(void *operation, void *buffer, int count, int datatype, int messageid, char *groupname, int root);Выполняет глобальную операцию operation во всех процессах группы groupname

Рис.13.5. UML-диаграмма видов деятельности, отображающая синхронизацию «классной доски» и источников знаний

// Листинг 13.5. Определение функции operator() // в классе task

void task::operator()(string X) {

int cc; pvm_mytid();

cc = pvm_spawn(const_cast(X.data()),NULL,0,"",l, &Tid[N]);

N++;

}

Функция-оператор operator() используется для порождения PVM-задач. Имя задачи содержится в элементе X. data(). При обращении к функции pvm_spawn ()(см. листинг 13.5) создается одна задача, а ее идентификационный номер сохраняется в элементе Tid[N]. (Подробнее о функции pvm_spawn() и вызове PVM-задач см. гла-вуб.) Класс taskиспользуется для создания функциональных объектов (объектов-функций). При выполнении алгоритма

for_each(Solve.begin(),Solve.end(),Task);

вызывается функция operator(), которая выполняет объект Task.Эта операция заставляет активизироваться источники знаний, содержа щ иеся в контейнере Solve.Алгоритм for_each() гарантирует активизацию всех источников знаний. Если используется м одель SIMD, то в алгоритме for_each() нет никакой необходимости. Вместо него прямо в конструкторе «классной доски» мы используем вызов функции pvm_spawn().В листинге 13.6 как раз и показано, как при использовании модели SIMD можно запустить множество PVM-задач из конструктора «классной доски».

// Листинг 13.6. Запуск PVM-задач из конструктора

// класса task

void task::operator()(string X) {

int cc; pvm_mytid();

cc = pvm_spawn(const_cast(X.data()),NULL,0,"",l, &Tid[N]);N++;

}

Связь «классной доски» и источников знаний

Согласно коду, приведенному в листинге 13.6, порождается 20 источников знаний. Сначала все они выполняют одинаковый код. После их порождения «классная доска» должна отправить сообщения с указанием, какую роль они будут играть в процессе решения задачи. При использовании данной конфигурации источники знаний и «классная доска» являются частью PVM-среды. После создания источники знаний будут взаимодействовать с «классной доской» путем соединения с портом, на котором она размещается, или по ее адресу в сети intranet или Internet. Для этого источникам знаний понадобится объектная ссылка на «классную доску». Эти ссылки можно «зашить» в код источников знаний, или они могут прочитать их из файла конфигурации либо получить из службы имен. Имея ссылку, источник знаний взаимодействует с ORB-брокером (Object Request Broker — брокер объектных запросов), чтобы найти удаленный объект, содержащий реальные данные (знания) и активизировать его. Для нашего примера мы назначаем «классной доске» конкретный порт и запускаем CORBA-объект «классной доски» с помощью следующей ко м анды,

blackboard -ORBIIOPAddr inet:porthos:12458

По этой команде запускается наша программа «классной доски» с подключением к порту 12458 хоста porthos.Запуск CORBA-объекта зависит от используемой CORBA-реализации. В данном случае мы используем «открытую» CORBA-реализацию Mico [25]При выполнении программы blackboardреализуется экземпляр «классной доски», который в свою очередь порождает источники знаний. В созданных источниках знаний жестко закодирован номер порта, по которому они будут связываться с «классной доской». Фрагмент кода реализации источника знаний, который связывается с CORBA - ориентированным объектом «классной доски», представлен в листинге 13.7.

// Листинг 13.7. Код источника знаний, который связывается

// с CORBA-ориентированной «классной доской»

1 #include «pvm3.h»

2 using namespace std;

3 #include

4 #include

5 #include

6 #include

7 #include «black_board_impl.h» 8

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

10 {

11 CORBA::ORB_var Orb = CORBA::ORB_init(argc, argv,«mico-local-orb»);

12 CORBA::Object_yar Obj =Orb->bind(«IDL:black_board:1.0»,«inet:por thos:12 4 5 8»);

13 courses Courses;

14 //...

15 //...

16 black_board_var BlackBoard = black_board::_narrow(Obj);

17

18 int Pid;

19 //...

20 //... 21

22 cout « «Источник знаний создан.» « endl;

23 Courses.length(2);

24 Courses[0] = 255551;

25 Courses[l] = 253212;

26 string FileName;

27 strstream Buffer;

28 Pid = pvm_mytid();

29 Buffer « «Результат.» « Pid « ends;

30 Buffer » FileName;

31 ofstream Fout(FileName.data());

32 BlackBoard->suggestionsForMajor(Courses);

33 Fout.close();

34 pvm_exit();

35 return(0);

36 } 37

В строке 11 (см. листинг13.7) инициализируется ORB брокер .При выполнении строки 12 осу щ ествляется связывание имени объекта black_boardс портом 12458 и возвра щ ается ссылка на CORBA-объект в переменной Obj.Строку 16 можно расценивать как разновидность операции приведения типа, чтобы Переменная BlackBoardссылалась на объект «правильного размера». После того как источник знаний реализовал объект BlackBoard,он может вызывать любой метод, объявленный в интерфейсе black_board,код которого приведен в листинге 13.1. Обратите внимание на создание в строке 13 объекта Courses.Вспомните, что тип coursesизначально был определен как CORBA-тип sequence.Здесь источник знаний использует класс courses,созданный во время IDL-компиляции. Добавление элементов в этот класс можно представить как добавление элементов в любой массив. При выполнении строк 24 и 25 в объект Coursesдобавляются два элемента, а в строке 32 содержится вызов метода, которому в качестве параметра передается объект Courses: BlackBoard->suggestionsForMaj or(Courses)

При выполнении этого вызова информация о курсах обучения записывается на «классную доску». Аналогично следующие методы

courses currentDegreePlan(); courses suggestedSchedule();

можно использовать для считывания информации с «классной доски». Поэтому для об щ ения с «классной доской» источнику знаний достаточно иметь ссылку на объект Black_board.Объект Black_boardможет располагаться в любом м есте сети intranet или Internet. Найти реальное м естоположение удаленного объекта — забота исключительно ORB-боркера. (Процесс отыскания и активизации CORBA-объектов расс м атривается в главе8.) Поскольку объект Black_boardи м еет идентификационные но м ера PVM-задач, он м ожет управлять эти м и задачами и обмениваться сообщениями (отправлять и получать их) непосредственно с источниками знаний. Аналогично источники знаний могут напрямую взаимодействовать друг с другом, используя традиционный обмен PVM-сообщениями. Важно отметить следующее: после того как окажется, что не существует больше никаких системных PVM-вызовов, деструктор объекта Black_boardдолжен вызвать м етод pvm_exit(),а каждый источник знаний — м етод pvm_exit(). Те м са м ы м из PVM-среды будут удалены ненужные больше объекты, но обработкаданных, не связанная с эти м и объекта м и, м ожет продолжаться.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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