d (), pvm_spawn (), pvm_initsend (), pvm_pkint (), pvm_send (), pvm_recv (), pvm_exit (). Функція pvm_mytid () повертає індентіфікатор викликає завдання. PVM-система пов'язує ідентифікатор завдання з кожним процесом, який її створює. Ідентифікатор завдання використовується для відправки повідомлень завданням, отримання повідомлень від інших завдань і т. П .. Будь PVM-завдання може зв'язуватися з будь-якої іншої PVM-завданням до тих пір, поки не отримає доступ до її ідентифікатором. Функція pvm_spawn () призначена для запуску нового PVM-процесу. У програмі
master функція pvm_spawn () використовується для запуску програми
slave . Ідентифікатор нового завдання повертається в параметрі amp; Tid виклику функції pvm_spawn (). У PVM-середовищі для передачі даних між завданнями використовуються буфери повідомлень. Кожна задача може мати один або кілька таких буферів. При цьому лише один з них вважається активним. Перед відправкою кожного повідомлення викликається функція pvm_initsend (), яка дозволяє підготувати або ініціалізувати активний буфер повідомлень. Функція pvm_pkint () використовується для упаковки числового значення. Функції pvm_send () і pvm_recv () використовуються для відправки і прийому повідомлень відповідно. Функції pvm_send () і pvm_recv () містять ідентифікатор завдання, що одержує дані, і ідентифікатор завдання, що відправляє дані, відповідно. Функція pvm_upkint () витягує отримане повідомлення з активного буфера повідомлень і розпаковує його, зберігаючи в масиві типу int.
Обов'язковою умовою для кластерів є компіляція вихідних кодів ПО для кожної системи окремо, в нашому випадку LINUX64. Далі слід розіслати на всі вузли кластера виконуваний файл, тобто скопіювати його в каталог usr/share/pvm3/bin/LINUX64 на кожному вузлі.
2.5 ВИКОНАННЯ ПРОГРАМИ
На початку програма виконується на одному вузлі. Перевірка проводиться за різними числами від 2 до n. Після виконання алгоритму, програма повертає час, який було витрачено:
Таблиця 1 - Виконання програми на одному вузлі кластера.
№NВремя, с.1500001,4921000005,23325000030,434500000143,39
Як видно з таблиці зі збільшенням числа N час, який витрачено на виконання алгоритму, вельми відчутно збільшується, що викликає деякі незручності. Числа 10000, 50000 обчислюються швидко, тому їх тестування на кластері не має сенсу, так як навіть 1 вузол відмінно справляється з поставленим завданням.
Після цього програма була запущена на всіх вузлах кластера:
Таблиця 2 - Виконання програми на всіх вузлах кластера.
№NВремя, с.11000004,69225000023,673500000112,53
Як видно з таблиці, продуктивність в обчисленнях з великими числами зросла приблизно на 12%, що небагато. Справа в тому, що на одному вузлі кластера відбувається велика кількість обчислень, так як є всього два вузла в кластері, і програма распараллелена всього на дві підзадачі.
Для того, щоб програма працювала швидше, потрібно додати в кластер вузлів і ще сильніше распараллелить задачу, тобто розбити її на більшу кількість паралельних підзадач, щоб мати можливість використовувати в процесі підрахунку більшу кількість вузлів, на яких відбувається мала кількість обчислень. Чим менше обчислень на одному вузлі, тим швидше працює програма.
Таким чином , тест програми Гіпотеза Гольдбаха показав, що процесорний час роботи кластера над цим завданням зменшується, звідси можна зробити цілком обгрунтований висновок, що кластерна система працює швидше, ніж один комп'ютер. Продуктивність кластерної системи зростає із збільшенням кількості вузлів в ній.
ВИСНОВОК
У ході роботи були вивчені основні принципи побудови розподілених обчислювальних систем, була встановлена ??і система PVM, завершена настройка RSH, а також вивчено принципи паралельного програмування з використанням основних функцій PVM.
СПИСОК ЛІТЕРАТУРИ
PVM Users Guide. Керівництво користувача PVM, Adam Beguelin 1994: сайт. URL: # justify gt; ДОДАТОК
ДОДАТОК А
Лістинг програми Гіпотеза Гольдбаха.
Текст батьківської програми master.c
# include lt; stdio.h gt;
# include lt; stdlib.h gt;
# include lt; time.h gt;
# include lt; /usr/share/pvm3/include/pvm3.hgt; ]
# include /home/master/gold/tags.hraquo;
# include /home/master...