OpenACC
OpenACC | |
---|---|
Тип | API |
Написана на | C, C++, Fortran |
Операционная система | кроссплатформенность |
Последняя версия | 3.2 (ноябрь 2021) |
Сайт | openacc.org |
OpenACC (от англ. Open Accelerators) — программный стандарт для распараллеливания программ, разрабатываемый совместно компаниями Cray, CAPS, Nvidia и PGI. Стандарт описывает набор директив компилятора, предназначенных для упрощения создания гетерогенных параллельных программ, задействующих как центральный, так и графический[1][2] процессоры.
Как и более ранний стандарт OpenMP, OpenACC используется для аннотирования фрагментов программ на языках C, C++ и Fortran. С помощью набора директив компилятора программист отмечает участки кода, которые следует выполнять параллельно или на графическом процессоре, обозначает какие из переменных являются общими, а какие индивидуальными для потока и т. п[3]. По синтаксису схож с OpenMP[4]. Стандарт OpenACC позволяет программисту абстрагироваться от особенностей инициализации графического процессора, вопросов передачи данных на сопроцессор и обратно и т. д.
История
Создатели OpenACC также участвуют в работе над стандартами OpenMP и планируют расширить будущие версии OpenMP для поддержки вычислительных ускорителей.[5][6] В ноябре 2012 года был опубликован технический отчет[7] для обсуждения и добавления поддержки акселераторов, произведенных не Nvidia.[8] На конференции ISC’12 продемонстрирована работа OpenACC на ускорителях производства Nvidia, AMD и Intel без публикации данных о производительности.[9]
Планируется объединить спецификации OpenACC и OpenMP, включив в последний поддержку работы с ускорителями, в том числе GPU[10].
Черновик второй версии стандарта, OpenACC 2.0 был представлен в ноябре 2012 года на конференции SC12.[11] В стандарт были добавлены директивы управления пересылкой данных, поддержка явных вызовов функций и раздельная компиляция.
Поддержка в компиляторах
Реализация OpenACC доступна в компиляторах от PGI (с версии 12.6), Cray и CAPS.[9][12][13]
Группа HPCTools из Университета Хьюстона добавила поддержку OpenACC в открытый компилятор OpenUH, основанный на кодах Open64[14].
В национальной лаборатории ORNL был разработан компилятор с открытыми исходными текстами OpenARC[15] для языка Си, поддерживающий OpenACC версии 1.0.
Свободный компилятор GNU GCC поддерживает OpenACC начиная с версии 5.[16][17] GCC 5 включена в Ubuntu 15.10, в ОС Fedora 22, в DragonFly BSD 4.2. В версии GCC 5.1 (22 апреля 2015 года) была добавлена библиотека поддержки openacc.h.
Использование
Основным режимом использования OpenACC являются директивы, точно также как и в OpenMP 3.x или более раннем OpenHMPP (англ.),[18][19]. Библиотека поддержки предоставляет несколько вспомогательных функций, описанных в заголовочных файлах "openacc.h" для C/C++ и "openacc_lib.h" для Fortran;[20].
Директивы
В OpenACC описаны различные директивы компилятора (#pragma), в том числе[3]:
#pragma acc parallel #pragma acc kernels
Обе директивы используются для определения кода для параллельного исполнения[21][22]
Основная директива для определения и копирования данных:
#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 ноября 2011). Дата обращения: 9 мая 2015. Архивировано из оригинала 17 ноября 2011 года.
- ↑ Официальный сайт OpenACC (неопр.). Дата обращения: 30 сентября 2012. Архивировано 23 сентября 2012 года.
- ↑ 1 2 OpenACC standard version 2.0 (неопр.). OpenACC.org. Дата обращения: 14 января 2014. Архивировано 3 августа 2016 года.
- ↑ Вычисления на GPU с помощью простых директив Архивная копия от 4 ноября 2012 на Wayback Machine // NVidia, 2012
- ↑ How does the OpenACC API relate to the OpenMP API? (неопр.) OpenACC.org. Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ How did the OpenACC specifications originate? (неопр.) OpenACC.org. Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ The OpenMP Consortium Releases First Technical Report (неопр.). OpenMP.org (5 ноября 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenMP at SC12 (неопр.). OpenMP.org (29 августа 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ 1 2 OpenACC Group Reports Expanding Support for Accelerator Programming Standard (неопр.). HPCwire (20 июня 2012). Дата обращения: 14 января 2014. Архивировано из оригинала 23 июня 2012 года.
- ↑ What is the OpenACC specification based on? (неопр.) Дата обращения: 30 сентября 2012. Архивировано 25 сентября 2012 года.
- ↑ OpenACC Version 2.0 Posted for Comment (неопр.). OpenACC.org (12 ноября 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators (неопр.). Xbit laboratories (16 ноября 2011). Дата обращения: 14 января 2014. Архивировано из оригинала 16 января 2014 года.
- ↑ CAPS Announcing Full Support for OpenACC 2.0 in its Compilers (неопр.). HPCwire (14 ноября 2013). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenUH Compiler (неопр.). Дата обращения: 4 марта 2014. Архивировано из оригинала 25 января 2014 года.
- ↑ OpenARC Compiler (неопр.). Дата обращения: 4 ноября 2014. Архивировано 4 ноября 2014 года.
- ↑ OpenACC - GCC Wiki (неопр.). Дата обращения: 9 мая 2015. Архивировано 1 апреля 2015 года.
- ↑ Schwinge, Thomas (2015-01-15). "Merge current set of OpenACC changes from gomp-4_0-branch". gcc (Mailing list). Архивировано 16 января 2015. Дата обращения: 15 января 2015.
{{cite mailing list}}
: Указан более чем один параметр|website=
and|mailinglist=
(справка) - ↑ Dolbeau, Romain; Bihan, Stéphane; Bodin, François (2007-10-04). HMPP: A Hybrid Multi-core Parallel Programming Environment (PDF). Workshop on General Purpose Processing on Graphics Processing Units. Архивировано из оригинала (PDF) 16 января 2014. Дата обращения: 14 января 2014. Источник (неопр.). Дата обращения: 9 мая 2015. Архивировано из оригинала 16 января 2014 года.
- ↑ Easy GPU Parallelism with OpenACC (неопр.). Dr.Dobb's (11 июня 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenACC API QuickReference Card, version 1.0 (неопр.). NVidia (ноябрь 2011). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenACC Kernels and Parallel Constructs (неопр.). PGI insider (август 2012). Дата обращения: 14 января 2014. Архивировано 20 июля 2014 года.
- ↑ OpenACC parallel section VS kernels (неопр.). CAPS entreprise Knowledge Base (3 января 2013). Дата обращения: 14 января 2014. Архивировано из оригинала 16 января 2014 года.
Ссылки
- http://www.openacc.org/ Архивная копия от 15 июня 2012 на Wayback Machine
- Стандарт OpenACC 1.0 Архивная копия от 24 января 2013 на Wayback Machine
- Примеры от NVIDIA: часть 1 Архивная копия от 12 июня 2012 на Wayback Machine, часть 2 Архивная копия от 26 июня 2012 на Wayback Machine