Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач Ковальчук.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.71 Mб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ

НАЦІОНАЛЬНИЙ ТРАНСПОРТНИЙ УНІВЕРСИТЕТ

КАФЕДРА ІНФОРМАЦІЙНИХ СИСТЕМИ І ТЕХНОЛОГІЇ

Курсова робота

з дисципліни «Технологія розподілених систем»

на тему:

«Реалізація базових векторно-математичних операцій в бібліотеці BLAS, ESSL, MKL»

Виконав студент: Гульшін О.В.

Група: КН-4-1

Прийняла: Ковальчук О.П.

Київ 2016

Зміст

Вступ 3

  1. Теоретична частина 4

    1. OpenMP 4

    2. MKL 7

    3. BLAS 13

    4. ESSL 16

  2. Практична частина 20

    1. Приклади програми MKL 20

    2. Приклад програми BLAS 23

    3. Приклад програми 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

Для розпаралелювання в моделі загальної пам'яті найбільш ефективним вважається механізм ниток. Існує два протилежних підходи для використання цього механізму:

  1. автоматичне розпаралелювання компілятором (недоліки: недостатня ефективність за існуючих обмежень компіляторів);

  2. повністю «ручне» додавання команд звернення до бібліотеки ниток (недоліки: необхідність залучення системного пропрограмування, непереносимість між платформами).

«Золота середина» – додавання спеціальних директив підказок компілятору про розпаралелюванні. До появи 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. Її алгоритми сконструйовані таким чином, щоб дотримувався баланс даних і завдань і ефективно використовувалися ресурси процесорів. У наведеній таблиці показано розділи математики, для яких є розпаралелені функції:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]