OpenACC
OpenACC (англ. Open Accelerators) — програмний стандарт для паралельного програмування, що розробляється y Cray, CAPS, Nvidia і PGI. Стандарт описує набір директив компілятора, призначених для спрощення створення гетерогенних паралельних програм, що задіюють як центральний, так і графічний процесор[1][2].
Тип | API |
---|---|
Стабільний випуск | 2.0 (червень 2013) |
Платформа | Cross-platform |
Операційна система | Cross-platform |
Мова програмування | C, C++, тa Fortran |
Вебсайт | openacc.org |
Як і більш ранній стандарт OpenMP, OpenACC використовується для анотування фрагментів програм на мовах C, C ++ і Fortran. За допомогою набору директив компілятора програміст зазначає ділянки коду, які слід виконувати паралельно або на графічному процесорі, позначає які з змінних є загальними, а які індивідуальними для потоку і т. ін[3]. За синтаксисом схожий з OpenMP[4]. Стандарт OpenACC дозволяє програмісту абстрагуватися від особливостей ініціалізації графічного процесора, питань передачі даних на співпроцесор і назад і т. д.
Історія
Творці OpenACC також беруть участь у роботі над стандартами OpenMP і планують розширити майбутні версії OpenMP для підтримки обчислювальних прискорювачів. У листопаді 2012 року був опублікований технічний звіт для обговорення та додавання підтримки акселераторів, твір не Nvidia. На конференції ISC'12 продемонстровано роботу OpenACC на прискорювачах виробництва Nvidia, AMD і Intel без публікації даних про продуктивність.
Планується об'єднати специфікації OpenACC і OpenMP, включивши в останній підтримку роботи з прискорювачами, в тому числі GPU.
Чернетка другої версії стандарту, OpenACC 2.0 був представлений в листопаді 2012 року на конференції SC12. У стандарт були додані директиви управління пересиланням даних, підтримка явних викликів функцій і роздільна компіляція.
Підтримка в компіляторах
Реалізація OpenACC доступна в компіляторах від PGI (з версії 12.6), Cray і CAPS.
Група HPCTools з Університету Х'юстона додала підтримку OpenACC у відкритий компілятор OpenUH, заснований на кодах Open64.
У національній лабораторії ORNL був розроблений компілятор з відкритими вихідними текстами OpenARC для мови Сі, що підтримує OpenACC версії 1.0.
Безкоштовний компілятор GNU GCC підтримує OpenACC починаючи з версії 5. У версії 5.1 (22 квітня 2015 року) була додана бібліотека підтримки openacc.h. GCC версії 5.1 планується до включення в Ubuntu 15.10 (жовтень 2015 року), компілятор також доступний у складі Fedora 22 beta.
Використання
Основним режимом використання OpenACC є директиви, точно також як і в OpenMP 3.x або більш ранньому OpenHMPP. Бібліотека підтримки надає кілька допоміжних функцій, описаних в заголовних файлах «openacc.h» для C / C ++ і «openacc_lib.h» для Fortran;.
Директиви
У OpenACC описані різні директиви компілятора:
#pragma acc parallel #pragma acc kernels
Обидві Прагми використовуються для визначення коду для паралельного виконання. Основна директива для визначення і копіювання даних:
#pragma acc data
Директива, яка визначає тип паралелізму в регіонах parallel і kernels
#pragma acc loop
Додаткові директиви
#pragma acc cache #pragma acc update #pragma acc declare #pragma acc wait
Функції бібліотеки
Деякі стандартні функції бібліотек, що реалізують OpenACC: acc_get_num_devices (), acc_set_device_type (), acc_get_device_type (), acc_set_device_num (), acc_get_device_num (), acc_async_test (), acc_async_test_all (), acc_async_wait (), acc_async_wait_all (), acc_init (), acc_shutdown (), acc_on_device (), acc_malloc (), acc_free ().
Примітки
- Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing. The Inquirer. 4/11/2011. Архів оригіналу за 17 листопада 2011. Процитовано 28 травня 2015. (англ.)
- Офiцiйний сайт OpenACC (англ.)
- OpenACC standard version 2.0. OpenACC.org. Процитовано 28 травень 2015. (англ.)
- Вычисления на GPU с помощью простых директив // NVidia, 2012 (рос.)