OpenACC

OpenACC
Тип API
Стабільний випуск 2.0 (червень 2013)
Платформа Cross-platform
Операційна система Cross-platform
Мова програмування C, C++, тa Fortran
Вебсайт openacc.org

OpenACC (англ. Open Accelerators) — програмний стандарт для паралельного програмування, що розробляється y Cray, CAPS, Nvidia і PGI. Стандарт описує набір директив компілятора, призначених для спрощення створення гетерогенних паралельних програм, що задіюють як центральний, так і графічний процесор[1][2].

Як і більш ранній стандарт 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 ().

Примітки[ред. | ред. код]

  1. Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing. The Inquirer. 4/11/2011. Архів оригіналу за 17 листопада 2011. Процитовано 28 травня 2015. (англ.)
  2. Офіційний сайт OpenACC [Архівовано 23 вересня 2012 у Wayback Machine.] (англ.)
  3. OpenACC standard version 2.0 (PDF). OpenACC.org. Архів оригіналу (PDF) за 3 серпня 2016. Процитовано 28 травень 2015. (англ.)
  4. Вычисления на GPU с помощью простых директив [Архівовано 4 листопада 2012 у Wayback Machine.] // NVidia, 2012 (рос.)

Див. також[ред. | ред. код]