В даний час мова MATLAB є основною мовою технічних обчислень. Налічується близько одного мільйона його користувачів по всьому світу, багато з яких бачать перевагу в підвищеної потужності, яку пропонують широкодоступні багатоядерні процесори і багатовузловий обчислювальні кластери. Середовищі MATLAB також ідеально підходить для вивчення паралельних обчислень, дозволяючи користувачеві звертати основну увагу на паралельні алгоритми, ніж на деталі реалізації. Лаконічність мови MATLAB дає можливість уявити безліч специфічних прикладів як ілюстрацію основних концепцій паралельного програмування.
Дана книга присвячена практичній реалізації методів обчислень і аспектам високої продуктивності наукових обчислень з упором на затребуване програмне забезпечення, обчислювальні середовища та інструменти обчислень. У ній представлені питання розробки технологій програмного забезпечення, такі як поточний статус, додатки та алгоритми, програмне забезпечення для вирішення математичних задач, програмні інструменти, мови і компілятори, обчислювальні середовища та візуалізація.
До цільової аудиторії книги належить будь-яка людина, перед яким стоїть завдання адаптувати послідовну програму MATLAB до паралельної середовищі. Крім того, її можна використовувати в якості основного підручника на заняттях з паралельних обчислень, або в якості допомоги для додаткового читання в класах вивчення чисельних методів або алгоритмів інформатики.
фундаментальні принципи
Основні поняття: система запису і інтерфейси
У цьому розділі представлена система математичних позначень для опису паралельних алгоритмів, а також розглядається відповідний комплекс паралельних функцій з бібліотеки pMATLAB. Представлений метод паралельного програмування на основі відображень і наводиться приклад використання паралельного запису і даних функцій.
У даній книзі розглядається питання паралельного програмування, який вимагає лаконічного опису паралельних алгоритмів. Для цих цілей використовується математичний мову. У цій главі наводяться короткі відомості про базову математичного запису, що використовується для опису паралельних алгоритмів, що зустрічаються в підручнику. Система запису (за потребою) буде доповнюватися по ходу написання книги (для отримання більш повної інформації про дану систему запису див. Додаток).
Для реалізації даних алгоритмів в мові MATLAB необхідний комплекс паралельних функцій, відповідних паралельним алгоритмам. Хоча і передбачається, що читач знайомий з пакетом MATLAB, однак, для написання паралельних програм на MATLAB використовуються нові функції. Книга написана з урахуванням обмеженого підмножини інтерфейсу бібліотеки pMATLAB. У цій главі дається короткий опис деяких ключових функцій, які використовуються для написання паралельних алгоритмів на протязі всієї книги. Дані функції (при необхідності) можуть бути розширені в наступних розділах.
Система запису алгоритмів
Числа є основними одиницями, які будуть оброблятися алгоритмами, представленими в цій книзі. Числа можуть мати різні типи: булеві, цілі, речові, комплексні ...
Введення в pMATLAB
Ласкаво просимо в паралельне програмування на мові MATLAB. В ході ознайомлення з цією главою читач зможе переконатися в перевагах продуктивності декількох паралельних програм на MATLAB. У цьому розділі дається короткий виклад декількох програм, що дозволяє отримати уявлення про основні принципи написання і виконання безлічі паралельних програм. Кожен приклад є самодостатнім і може розглядатися незалежно від інших. Наступні розділи мають таку ж структуру. Кожен розділ відкривається підрозділом «Початок роботи», в якому програма виконується на різних процесорах, при цьому вивчається її результат і реєструється час виконання. У другому підрозділі представлений математичний аспект задачі, а також базова паралельна реалізація. У третьому підрозділі описується, яким чином була написана паралельна програма на MATLAB. У четвертому підрозділі розглядається процес налагодження програми. Завершується розділ вивченням тимчасових характеристик і оцінкою загальної продуктивності. В кінці цієї глави слід обговорення роботи програм і то, як була досягнута висока продуктивність.
Взаємодія з розподіленими масивами
Представлений приклад багатоетапної програми з введенням / висновком з метою демонстрації способу розробки таких програм з використанням розподілених масивів. Програма створює імітовані дані від багатоканального датчика і потім обробляє набір цих даних. На наведеному прикладі також показано, як потрібно працювати з розподіленими масивами під час процесу налагодження і тестування. Зокрема, розглядаються види інформації, які можна отримати з розподілених масивів при виконанні програми.
У цій главі вивчається багатоетапний додаток з введенням / висновком. Воно будується на концепціях, викладених в попередньому розділі, з метою створення більш складної програми з використанням розподілених масивів. Основним завданням є виконання програми в четирехшаговом процесі налагодження і інтерактивне дослідження розподілених масивів для з'ясування того, що можна побачити на кожному кроці. Даний приклад ілюструє спосіб взаємодії з розподіленими масивами, а також висвітлює деякі питання, пов'язані з багатоетапними паралельними програмами.
Методики підвищеної складності
Моделі паралельного програмування
На прикладі нетривіальною масової паралельної програми (Blutimage) проілюстровані ключові компроміси проектування, кодування, налагодження і тестування, пов'язані з паралельним програмуванням. При розгляді програми Blutimage виявляється великий ряд питань у зв'язку з виконанням даних етапів. Крім того, в розділі буде також представлено короткий вступ в основні моделі паралельного програмування: розподілені масиви, обмін повідомленнями і схема начальник / підлеглий (manager / worker).
Дана глава націлена на отримання читачем більш широкого уявлення про компроміси проектування, кодування, налагодження і тестування коду, пов'язаних з паралельним програмуванням. Основне завдання розділу - виявлення широкого кола проблем, пов'язаних із застосуванням цих принципів. Крім того, тут також представлено короткий вступ в основні моделі паралельного програмування: семантику розподілених масивів, обмін повідомленнями і схему начальник / підлеглий (manager / worker). Деякі принципи, розглянуті в цьому розділі, включають в себе наступні аспекти.
Проектування: оцінка необхідності розпаралелювання, класи паралельних програм, моделі паралельного програмування, машинні моделі.
Кодування: різні стилі паралельного програмування, вплив коду на продуктивність і масштабованість.
Налагодження: особливості процесу паралельної налагодження, помилки, які можна виявити на кожному кроці.
Тестування: вимір і прогнозування продуктивності (щодо параметрів комп'ютера).
Програма, яка використовується в якості основного прикладу в цьому розділі, є більш складною, ніж програми, представлені в розділі 2. Вона призначена для виявлення деяких обмежень, властивих різним моделям паралельного програмування.
Проектування: оцінка необхідності розпаралелювання
Єдиним найбільш важливим рішенням при паралельному програмуванні є оцінка необхідності застосування паралельних обчислень. Існує дві і тільки дві причини використовувати паралельний комп'ютер.
- Час: обчислення на одному процесорі займає надто багато часу.
- Пам'ять: щоб виконати обчислення, потрібно більше пам'яті, ніж може надати один процесор.
Дуже часто присутні обидві причини. Виконання програм, що вимагають наявності великого обсягу пам'яті, часто займає багато часу. Проте яким чином програміст MATLAB визначає, чи є дані умови? Поняття про кількість затраченого часу дуже суб'єктивно. Як правило, це означає, що обчислення займає години або дні, але іноді і десять хвилин вважається довгим терміном. «Пам'ять» поняття менш суб'єктивне. Обчислювальна машина володіє певним обсягом пам'яті, і якщо програма намагається задіяти обсяг пам'яті більше наявного, в цьому випадку або видається помилка «недостатньо пам'яті», яка програма починає істотно сповільнити свою роботу, так як операційна система намагається використовувати локальні носії даних в якості пам'яті (це явище носить назву «свопинг» (swapping)). На щастя, MATLAB має деякі вбудованими інструментами, які допомагають визначити не тільки кількість часу і пам'яті, необхідне для виконання програми, а й її конкретні частини, які потребують найбільшої кількості часу і пам'яті. Функції даних інструментів будуть наочно показані для початку в простій програмі обробки зображень (Blurimage).
Розробка складних програм з розподіленими масивами
Для ефективного використання розподілених масивів необхідно розуміння базової технології, яка застосовується для їх реалізації. Розподілені масиви MATLAB в основному реалізовані в бібліотеці з використанням методів перевантаження операторів об'єктно-орієнтованого програмування. Основну структуру даних в бібліотеці представляє розподілений числовий масив, розподіл якого по безлічі процесорів визначається структурою карти розміщення. Операції комунікації між розподіленими масивами знаходяться на нижньому рівні абстракції, що не видимому користувачеві. Типи розподілу даних, підтримувані картами, як правило, належать класу N-мірних блочно-циклічних розподілів з перекриттям. Блокові розподілу використовуються найчастіше. Циклічні розподілу часто можуть бути корисними при вирішенні питань балансування навантаження. Бібліотека розподілених масивів базується на бібліотеці обміну повідомленнями точка-точка, наприклад, на інтерфейсі передачі повідомлень (MPI). Бібліотека повідомлень встановлює основний ліміт на продуктивність комунікації в бібліотеці розподілених масивів.
Метрики продуктивності і архітектура проrраммного забезпечення
Метрики продуктивності є безцінним інструментом для реалізації паралельних програм, які відрізняються високою ефективністю при мінімізації вартості програмного забезпечення. У цій главі описуються деякі метрики продуктивності, а також показані способи їх застосування для прийняття правильних рішень щодо реалізації програми. В ході представлення цих метрик описується стандартна система паралельних обчислень і розглядається вплив продуктивності на різні моделі паралельного програмування.
Ефективну паралельну MATLAB-програму написати досить складно через велику кількість додаткових факторів, які необхідно враховувати, крім основної функціональної коректності програми. Дані фактори наведені нижче.
- Продуктивність: затримка і пропускна здатність.
- Ефективність: обробка, ширина пропускання і пам'ять.
- Витрати на програмне забезпечення: розмір і переносимість коду.
- Витрати на апаратні засоби: розмір і потужність.
Метрики продуктивності є важливим інструментом, який дозволяє розробнику паралельних MATLAB-програм зробити усвідомлений вибір методу програмування і реалізації.
В цьому розділі основна увага приділяється метрик продуктивності та архитектурам програмного забезпечення, призначеного для реалізації паралельних програм, які сприяють мінімізації витрат на програмне забезпечення при тому, що вони відповідають як можна більшій кількості інших вимог. Зокрема, ми розглянемо різні архітектури програмного забезпечення, які можна використовувати з метою застосування паралельних обчислень, призначених для досягнення високої продуктивності. У зв'язку з цим, домінуючими факторами для архітектури паралельного програмного забезпечення є наступні.