OpenACC
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 (). Примітки
Див. також
|