1.6 Паралельна віртуальна машина (PVM)
Основою обчислювального середовища кластера Beowulf є паралельна вірутальних машина PVM. PVM (Паралельна Віртуальна Машина) - це пакет програм, який дозволяє використовувати пов'язаний в локальну мережу набір різнорідних комп'ютерів, що працюють під операційною системою Unix, як один великий паралельний комп'ютер. Таким чином, проблема великих обчислень може бути вельми ефективно вирішена за рахунок використання сукупної потужності і пам'яті великого числа комп'ютерів. Пакет програм PVM легко переноситься на будь-яку платформу. Вихідні тексти, вільно поширювані netlib, було скомпільовано на комп'ютерах починаючи від laptop і до CRAY.
Паралельну віртуальну машину можна визначити як частину коштів реального обчислювального комплексу (процесори, пам'ять, периферійні пристрої і т.д.), призначену для виконання безлічі завдань, що беруть участь в отриманні загального результату обчислень. У загальному випадку число завдань може перевершувати число процесорів, включених в PVM. Крім того, до складу PVM можна включати досить різнорідні обчислювальні машини, несумісні з систем команд і форматам даних. Інакше кажучи, Паралельної Віртуальної Машиною може стати як окремо взятий ПК, так і локальна мережа, що включає в себе суперкомп'ютери з паралельною архітектурою, універсальні ЕОМ, графічні робочі станції і все ті ж малопотужні ПК. Важливо лише, щоб про що включаються в PVM обчислювальних засобах була інформація у програмному забезпеченні PVM. Завдяки цьому програмному забезпеченню користувач може вважати, що він спілкується з однією обчислювальною машиною, в якій можливо паралельне виконання безлічі завдань.
PVM дозволяє користувачам використовувати існуючі апаратні засоби, для вирішення набагато складніших завдань при мінімальній додаткової вартості. Сотні дослідних груп у всьому світі використовують PVM, щоб вирішити важливі наукові, технічні, і медичні проблеми, а так само використовують PVM як освітній інструмент, для викладання паралельного програмування. В даний час, PVM став де факто стандартом для розподілених обчислень.
Головна мета використання PVM - це підвищення швидкості обчислень за рахунок їх паралельного виконання. Функціонування PVM засноване на механізмах обміну інформацією між завданнями, виконуваними в її середовищі. В цьому відношенні найбільш зручно реалізовувати PVM в рамках многопроцессорного обчислювального комплексу, виділивши віртуальній машині кілька процесорів і загальне або індивідуальні (в залежності від умов) ОЗУ. Використання PVM доспустімо як на багатопроцесорних комп'ютерах (SMP) так і на обчислювальних комплексах, побудованих по кластерної технології. При використанні PVM, як правило, значно спрощуються проблеми швидкого інформаційного обміну між завданнями, а також проблеми узгодження форматів представлення даних між завданнями, виконуваними на різних процесорах
Ефективне програмування для PVM починається з того, що алгоритм обчислень слід адаптувати до складу PVM і до її характеристикам. Це дуже творча задача, яка в багатьох випадках повинна вирішуватися програмістом. Крім завдання розпаралелювання обчислень з необхідністю виникає і завдання управління обчислювальним процесом, координації дій завдань - учасників цього процесу. Іноді для управління доводиться створювати спеціальну задачу, яка сама не беручи участь в обчисленнях, забезпечує узгоджену роботу інших завдань - обчислювачів.
Раніше побіжно згадувалося, що при паралельних обчисленнях необхідно програмувати спеціальні дії по координації роботи завдань, такі як процеси запуску завдань на процесорах кластера, управління обміном даних між завданнями та ін. Також слід чітко визначити "область діяльності" для кожного завдання.
Найбільш простий і популярний спосіб організації паралельного рахунку виглядає наступним чином. Спочатку запускається одна задача (master), яка в колективі завдань буде грати функції координатора робіт. Це завдання робить деякі підготовчі дії, наприклад ініціалізація початкових умов, після чого запускає інші завдання (slaves), яким може відповідати або той же виконуваний файл, або різні виконувані файли. Такий варіант організації паралельних обчислень краще при ускладненні логіки управління обчислювальним процесом, а також коли алгоритми, реалізовані в різних завданнях, істотно розрізняються або є великий обсяг операцій (наприклад, введення - виведення), які обслуговують обчислювальний процес в цілому.
1.6.1 Взаємодія завдань в PVM
В системі PVM кожна задача, запущена на деякому процесорі, ідентифікується цілим числом, яке називається ідентифікатором завдання (TID) і за змістом схоже на ідентифікатор процесу в операційній системі Unix. Система PVM автоматично підтримує унікальність таких ідентифікаторів: копії одного виконуваного файлу, запущені паралельно на N процесорах PVM, створюють N задач з різними TID.
За стандартом прийнятому в PVM для взаємодії завдань вважається, що в межах однієї PVM будь-яке завдання може передавати повідомлення будь-який інший завданню, причому, розміри і число таких повідомлень в принципі не обмежені. Це припущення істотно спрощує реалізацію PVM на конкретних обчислювальних комплексах, тому що при цьому контроль переповнення буферних пристроїв і масивів залишається в віданні операційних систем і з програміста знімається одна зайва турбота.
Для підвищення ефективності межзадачного обміну інформацією передбачено використання декількох алгоритмів. Зокрема, можна використовувати алгоритм блокованої передачі, при якому функція "Послати повідомлення" повертає значення (тобто завершує роботу) тільки після того як отримана позитивна чи негативна квитанція від одержувача повідомлення. Такий алгоритм передачі з очікуванням повідомлення про доставку кращий в тих випадках, коли довге повідомлення передається декількома порціями, а також при обміні командами, послідовність виконання яких в часі дорлжна бути строго фіксованою.
При використанні неблокірованние алгоритмів передачі і прийому повідомлень зменшуються простої процесорів, викликані очікуванням реакції "співрозмовника". Особливо великий ефект це дає на приймальній стороні при невідомому часу приходу повідомлення. Можна організувати роботу приймального процесора так, щоб він в очікуванні повідомлення виконував поточну роботу, лише час від часу опитуючи приймальний буфер.
Суттєвим є те обставина, що при передачі послідовності повідомлення від одного завдання до іншого порядок прийому повідомлення завжди збігається з порядком їх передачі. Більш того, якщо до звернення до функції "прийняти повідомлення" в приймальний буфер приймаючої завдання записано кілька повідомлень, то функція "прийняти повідомлення" поверне посилання на перше повідомлення, яке.
Пам'ять для буферних масивів на передавальної і приймальні стороні виділяється динамічно, отже, максимальний обсяг повідомлень обмежується лише обсягом вільної пам'яті. Якщо одне із завдань, запущених в PVM, не може отримати необхідну пам'ять для спілкування з іншими завданнями, то вона видає користувачеві відповідне повідомлення про помилку ( "can not get memory"), але інші завдання про цій події не повідомляються та можуть, наприклад, продовжувати посилати їй повідомлення.
Інформація про роботу «Основи паралельного програмування на кластері та розробка елективного курсу« Адміністрування в інформаційних системах і адміністрування віртуальних машин »»