OpenACC

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

OpenACC
Тип 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 ().

Примітки

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

Див. також


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.