МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ ТРАНСПОРТНИЙ УНІВЕРСИТЕТ
КАФЕДРА ІНФОРМАЦІЙНИХ СИСТЕМИ І ТЕХНОЛОГІЇ
Курсова робота
з дисципліни «Технологія розподілених систем»
на тему:
«Реалізація базових векторно-математичних операцій в бібліотеці BLAS, ESSL, MKL»
Виконав студент: Гульшін О.В.
Група: КН-4-1
Прийняла: Ковальчук О.П.
Київ 2016
Зміст
Вступ 3
Теоретична частина 4
OpenMP 4
MKL 7
BLAS 13
ESSL 16
Практична частина 20
Приклади програми MKL 20
Приклад програми BLAS 23
Приклад програми ESSL 24
Висновки 25
Список використаної літератури 26
Вступ
Використання програмних бібліотек – це простий спосіб досягти негайного збільшення продуктивності багатоядерних, багатопроцесорних і кластерних комп'ютерних системах. Бібліотека Intel® Math Kernel Library (Intel® MKL) містить великий набір функцій, який буде корисний у додатках з великою кількістю математичних операцій. У цій роботі описується, як Intel MKL допомагає досягти прекрасною послідовної і паралельної продуктивності в звичайних додатках. Наведений матеріал застосовний до систем на процесорах IA-32 і Intel® 64 з операційними системами Windows, Linux*, і Mac OS* X.
Оптимальна продуктивність у сучасних багатопроцесорних і багатоядерних системах досягається тільки тоді, коли використовуються всі можливості паралелізму та враховуються особливості пристрою пам'яті. Для досягнення оптимальної продуктивності послідовний код повинен широко спиратися на паралелізм рівня SIMD команд і регістрів, а також використання кеш-блокинга. У паралельних програмах застосовують розвинуті стратегії угруповання даних у блоки для більш ефективного використання множинних ядер і процесорів і рівномірного розподілу паралельних завдань. У деяких випадках для складних завдань, які не поміщаються в пам'яті, можуть бути використані зовнішні (out-of-core) реалізації.
Один з найпростіших способів застосувати паралелізм у додатку з інтенсивними математичними розрахунками – використовувати багатопотокову оптимізовану бібліотеку. Це не тільки допоможе заощадити час розробки, але також і суттєво зменшить обсяг тестування. Застосування стандартизованих API робить код більш стерпним.
Теоретична частина
OpenMP
Короткий опис OpenMP
Для розпаралелювання в моделі загальної пам'яті найбільш ефективним вважається механізм ниток. Існує два протилежних підходи для використання цього механізму:
автоматичне розпаралелювання компілятором (недоліки: недостатня ефективність за існуючих обмежень компіляторів);
повністю «ручне» додавання команд звернення до бібліотеки ниток (недоліки: необхідність залучення системного пропрограмування, непереносимість між платформами).
«Золота середина» – додавання спеціальних директив підказок компілятору про розпаралелюванні. До появи OpenMP багато виробників компіляторів підопічні підтримували подібні набори директив, однак ці механізми були неповні і несумісні між собою. На цьому тлі, при підтримці великої кількості виробників компіляторів і обчислювальних систем, був створений стандарт OpenMP.
Модель виконання програм, що використовують інтерфейс OpenMP
Паралельні програми, що використовують інтерфейс OpenMP, виконуються в моделі породження паралельних ниток і очікування завершення їх виконання. Програма починає виконання як один послідовний процес, званий основний ниткою виконання. Основна нитка виконується послідовно доти, поки не зустрінеться перша конструкція розпаралелювання. Пара директив PARALLEL і END PARALLEL становить конструкцію распараллелювания і визначає паралельну область програми. Як тільки зустрічається конструкція розпаралелювання, основна нитка створює групу ниток і основна нитка стає основною ниткою групи. Оператори програми, ув'язнені в конструкцію распараллелювання, включаючи і виклики процедур, що виконуються паралельно кожної ниткою групи. По завершенні конструкції розпаралелювання нитки в групі синхронізуються, і тільки основна нитка продовжує виконання. В одній програмі може бути специфіковано будь-яке число конструкцій розпаралелювання. В результаті програма може багато разів розпаралелюватися і синхронізуватися протягом виконання. Інтерфейс OpenMP дозволяє програмісту використовувати директиви в процедурах, що викликаються зсередини конструкцій розпаралелювання. З цією функціональною можливістю користувачі можуть програмувати конструкції розпаралелювання з верхніх рівнів дерева викликів в програмі і використовувати директиви для контролю виконання в будь-який викликається процедурою. Основні визначення та поняття Програма, що використовує інтерфейс OpenMP, містить спеціальні директиви, які компілятором, що не підтримує OpenMP, будуть сприйматися як коментарі.
Директиви – це спеціальні коментарі в синтаксисі мовипрограмування Фортран, які ідентифікуються унікальною сигнальної міткою. Мітка директиви структурована так, що дирекактиви трактуються як коментарі. Компілятори, які підтримують інтерфейс OpenMP, включають можливість активізувати і дозволяти інтерпретацію всіх директив інтерфейсу OpenMP в командному рядку. Формат директив інтерфейсу OpenMP наступний:
мітка директива [клаузами [[,] клаузами] ...], мітка – послідовність символів x$OMP, клаузами задає параметри директиви.
Фактори, що впливають на продуктивність моделі загальної пам'яті з використанням інтерфейсу OpenMP:
• час на організацію і завершення ниток (заклад локальних змінних, установлення початкових даних, накопичення змінних, перелічених у клаузе REDUCTION тощо);
• очікування у критичних секціях;
• операції, що вимагають синхронізації;
• «послідовні» цикли (паралельні цикли, при описі яких використовувалася клаузами ORDER);
• робота із зовнішніми пристроями (висновок на екран тощо);
• затримки при одночасному зверненні на читання кількома нитками до одній комірці пам'яті.
MKL
Intel MKL надає великий набір математичних функцій, розпаралелених і оптимізованих для використання на нових процесорах Intel®. При першому виклику функції бібліотеки відбувається перевірка апаратних можливостей системи, в якій запущена програма. На основі даних перевірки вибирається варіант коду, який дає максимально ефективне використання паралелізму SIMD команд і регістрів, вибирається найкраща стратегія кеш-блокинга. Бібліотека Intel MKL є потокобезопасной, що означає, що її функції будуть коректно працювати при одночасному виклику з декількох потоків.
Бібліотека Intel MKL зібрана з допомогою компілятора Intel® C++ та Fortran і распараллелена через OpenMP. Її алгоритми сконструйовані таким чином, щоб дотримувався баланс даних і завдань і ефективно використовувалися ресурси процесорів. У наведеній таблиці показано розділи математики, для яких є розпаралелені функції:
