Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсак.doc
Скачиваний:
3
Добавлен:
07.12.2018
Размер:
787.97 Кб
Скачать

ЗМІСТ

1

ВСТУП 2

1. КОНСТРУКТОРСЬКИЙ РОЗДІЛ 3

1.1 Технологія OpenCL 3

1.2 Специфікація відеокарти Radeon HD 4850 9

1.3 Архітектура чіпу RV770 10

1.4 Мультипроцесор 11

2. АЛГОРИТМІЧНИЙ РОЗДІЛ 13

2.1 Постановка завдання 13

2.2 Вибирання засобів розробки програмного забезпечення 14

2.3 Алгоритм 15

2.4 Збірка програмного забезпечення 18

3. ТЕХНОЛОГІЧНИЙ РОЗДІЛ 19

3.1 Опис алгоритму 19

4. ТЕСТУВАЛЬНИЙ РОЗДІЛ 31

4.1 Тестування програми 31

6. СПИСОК ЛІТЕРАТУРИ 33

7. ДОДАТОК 34

ВСТУП

У сучасних обчислювальних системах найважливішу роль грає швидкість обчислення. Дослідники вже давно використовують не центральній процесор(CPU), а процессор відеокарти. Для прикладу, самий найкрутіший настільний процесор Intel Core i7-975 XE 3,33 ГГц має пікову продуктивність 47,7 Гігафлопс. А відеокарта RADEON HD 4850 (RV770), має вже продуктивність 1 Терафлопс. Видно що відеокарти давно обігнали центральних процесорів. Щоб використовувати всю потужність GPU виробники відеочипів розробили технологію програмування відеокарт.

В роботі ставиться мета, показати як використовувати ці технології. Досить вдалим розв'язком проблеми швидкої та ефективної паралельної обробки надвеликих масивів даних на основі спеціалізованих системних рішень, зокрема паралельно-ієрархічних систем, є використання відеоадаптерів для обчислень загального призначення (GPGPU) . Необхідно відзначити, що найбільшої ефективності обчислень на GPU вдається досягти при виконанні матричних обчислень. У контексті GPU під матричними обчисленнями розуміється множення застосоване лише до матриць над кільцями. При теперішніх обсягах пам'яті на GPU можна перемножувати матриці розмірністю до 10000х10000, і всі дані будуть розміщені у відео пам'яті. Така продуктивність досягається за рахунок використання блокових алгоритмів множення матриць, а класичні реалізації виявляються на порядок повільнішими.

1. Конструкторський розділ

1.1 Технологія OpenCl

OpenCL (від Open Computing Language - відкрита мова обчислень) - фреймворк для написання комп'ютерних програм, пов'язаних з паралельними обчисленнями на різних графічних (GPU) і центральних процесорах (CPU).

OpenCL™ (Open Computing Language) - це API низького рівня для гетерогенних обчислень, Ati stream, що працює з архітектурою. OpenCL дозволяє розробникам програмувати обчислювальні ядра за допомогою С-подібної мови і використовувати переваги паралельних обчислень ATI Radeon GPU для створення чудових обчислювальних застосувань. Враховуючи розвиток стандарту і його підтримку процесорами від інших виробників, компанія ATI продовжить пропонувати користувачам драйвери, інструменти і ресурси для навчання.

Компанією NVIDIA мова OpenCL була представлена групі Khronos компанією Apple влітку 2008 року з метою створення міжплатформеного середовища для універсальних розрахунків на GPU. NVIDIA є главою галузевої робочої групи, що визначає стандарт OpenCL, з моменту її створення. Компанія надала першу у світі реалізацію OpenCL GPU для Windows і Linux в червні 2009 року.

Мета OpenCL полягає в тому, щоб доповнити OpenGL і OpenAL, які є відкритими галузевими стандартами для тривимірної комп'ютерної графіки і звуку, користуючись можливостями GPU.

OpenCL розробляється і підтримується некомерційним консорціумом Khronos Group, в який входять багато великих компаній, включаючи Apple, AMD, Intel, nVidia, Sun Microsystems, Sony Computer Entertainment і інші.

OpenCL задіює можливості графічних процесорів для неграфічних обчислень, дозволяючи виконувати їх паралельно. Простіше кажучи, при виконанні "важких" операцій комп'ютер зможе задіювати не лише CPU, але і GPU.

Модель платформи. Центральним елементом даної моделі виступає поняття хоста (host) - первинного пристрою, який управляє OpenCL-обчисленнями і здійснює всі взаємодії з користувачем. Хост завжди представлений в єдиному екземплярі, в той час як OpenCL-пристрої (devices), на яких виконуються OpenCL-інструкції можуть бути представлені у множині. OpenCL-пристроєм може бути CPU, GPU, DSP або будь-який інший процесор в системі, підтримується встановленими в системі OpenCL-драйверами.

Рис. 1.1.1. Схематичне представлення OpenCL-платформи.

Модель обчислень. З хостом нерозривно пов'язане поняття хостової програми (host program) - програмного коду, що виконується тільки на хості. OpenCL не вказує як саме має працювати хостова програма, а лише визначає інтерфейс взаємодії з OpenCL-об'єктами.

З точки зору моделі обчислень OpenCL-додаток складається з хостової програми і набору ядер (kernels). OpenCL-ядро в загальному вигляді являє собою функцію, написану мовою OpenCL C (підмножина мови ISO С'99) і скомпільовану OpenCL-компілятором.

Ядро створюється в хостової програмі і потім за допомогою спеціальної команди ставиться в чергу на виконання в одному з OpenCL-пристроїв. Під час виконання згаданої команди OpenCL Runtime System створює цілочисельний простір індексів (integer index space), кожен елемент якого має назву глобальним ідентифікатором (global ID). Кожен екземпляр ядра виконується окремо для кожного значення глобального ідентифікатора. Примірник ядра носить назву work-item. Таким чином, кожен work-item однозначно визначається своїм глобальним ідентифікатором.

Сукупність всіх work-item розбивається на групи. Така група носить назву work-group. З кожною work-group зіставляється свій унікальний ідентифікатор (work-group ID). Всі work-item в одній work-group ідентифікуються унікальним в межах своєї групи номером: local ID. Таким чином кожен work-item визначається як за унікальним global ID так і по комбінації work-group ID і local ID всередині своєї групи.

Всі work-item в межах однієї work-group виконуються паралельно на обробних елементах одного обчислювального модуля OpenCL-пристрої. Це гарантується стандартом, тоді як зовсім не гарантується, що кілька work-item з різних груп будуть виконані паралельно. Про цю важливу властивість паралелізму необхідно завжди пам'ятати при розробці OpenCL-програм.

Простір індексів N-розмірний і зазвичай носить назву NDRange. У разі версії стандарту OpenCL 1.1 розмірність N приймає значення 1,2 або 3. Таким чином, сітки координат global ID і local ID N-розмірні, тобто визначаються N координатами. На рис.1.1.2. схематично показаний двовимірний NDRange.

Рис. 1.1.2. Приклад двовимірного NDRange.

Де Gx і Gy - число глобальних ідентифікаторів, Wx і Wy - число груп, а Lx і Ly - число локальних ідентифікаторів в NDRange.

Модель пам'яті. Модель пам'яті (memory model) описує набір регіонів пам'яті і маніпулювання ними під час проведення обчислень.

OpenCL-об'єкти, що інкапсулють регіони пам'яті, носять назву об'єктів пам'яті (memory objects). Об'єкти пам'яті бувають двох типів: буферні об'єкти (buffer objects) та об'єкти зображення (image objects).

Пам'ять хоста (host memory) доступна лише з хоста.

Глобальна пам'ять (global memory) визначається в пам'яті, доступний на читання і запис для всіх work-item у всіх work-group. Читання і запис в глобальну пам'ять може кешувати, якщо OpenCL-пристрій підтримує дану можливість. У разі CPU глобальною є оперативна пам'ять. У переважній більшості випадків глобальна (і константних) пам'ять сама повільна, так що використовувати без необхідності її не варто.

Константна пам'ять (constant memory) - глобальний регіон пам'яті, який ініціалізує хостом і з якого work-item може лише читати дані. Малий об’єм. Швидкий доступ. Застосовується для зберігання загальних констант.

Локальна пам'ять (local memory) доступна лише в межах однієї work-group. Всі work-item в цiй work-group можуть як читати, так і писати в даний регіон пам'яті одночасно. Малий обьем. Швидкий доступ. Застосовується для Взаємодія Work Item всередині Work Group.

Приватна пам'ять (private memory) доступна лише одному work-item. Великий обсяг. Швидкість доступу від дуже швидкого до повільного. Застосовується для зберігання локальних змінних, і для організації розрахунку в середині Work Item.

Рис. 1.1.3. Співвідношення фізичної та програмної моделі

пам'яті.

На рис. 1.1.4. показані відносини між перерахованими регіонами пам'яті згідно стандарту OpenCL.

Рис. 1.1.4. Схематичне представлення рівнів пам'яті в OpenCL.

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