OpenACC
Разработчик(и) | Организация OpenACC |
---|---|
Стабильная версия | 3.2
/ ноябрь 2021 г |
Написано в | C , C++ и Фортран |
Операционная система | Кросс-платформенный |
Платформа | Кросс-платформенный |
Тип | API |
Веб-сайт | www |
OpenACC (от открытых ускорителей ) — стандарт программирования для параллельных вычислений, разработанный Cray , CAPS, Nvidia и PGI . Стандарт предназначен для упрощения параллельного программирования гетерогенных систем CPU / GPU . [1]
Как и в OpenMP , программист может аннотировать C , C++ и Fortran, исходный код чтобы определить области, которые следует ускорить, используя директивы компилятора и дополнительные функции. [2] Как и OpenMP 4.0 и более поздние версии, OpenACC может работать как с архитектурой ЦП , так и с графическим процессором , и запускать на них вычислительный код.
Члены OpenACC работали в качестве членов группы стандартов OpenMP над объединением со спецификацией OpenMP и созданием общей спецификации, которая расширяет OpenMP для поддержки ускорителей в будущем выпуске OpenMP. [3] [4] Результатом этих усилий стал технический отчет. [5] для комментариев и обсуждений, приуроченных к ежегодной конференции по суперкомпьютерам (ноябрь 2012 г., Солт-Лейк-Сити ), а также для решения проблемы поддержки ускорителей, не принадлежащих Nvidia, с участием поставщиков оборудования, участвующих в OpenMP. [6]
На ISC'12 была продемонстрирована работа OpenACC на ускорителях Nvidia , AMD и Intel , без данных о производительности. [7]
12 ноября 2012 года на конференции SC12 был представлен проект спецификации OpenACC версии 2.0. [8] Новые предлагаемые возможности включают новые средства управления перемещением данных (например, улучшенную обработку неструктурированных данных и улучшения в поддержке несмежной памяти), а также поддержку явных вызовов функций и раздельной компиляции (позволяющую создавать и повторно использовать библиотеки ускоренного кода). OpenACC 2.0 был официально выпущен в июне 2013 года. [9]
Версия 2.5 спецификации вышла в октябре 2015 года. [10] а версия 2.6 была выпущена в ноябре 2017 года. [11] Впоследствии в ноябре 2018 года была выпущена версия 2.7. [12]
Последней версией является версия 3.2, выпущенная в ноябре 2021 года. [13]
Поддержка компилятора [ править ]
Поддержка OpenACC доступна в коммерческих компиляторах PGI (начиная с версии 12.6) и Cray (только для оборудования Cray). [7] [14]
OpenUH [15] — это компилятор OpenACC с открытым исходным кодом на основе Open64 , поддерживающий C и FORTRAN, разработанный группой HPCTools из Хьюстонского университета .
OpenARC [16] — это компилятор C с открытым исходным кодом, разработанный в Национальной лаборатории Ок-Ридж для поддержки всех функций спецификации OpenACC 1.0. Экспериментальный [17] Компилятор с открытым исходным кодом accULL разработан Университетом Ла-Лагуна ( только язык C ). [18]
Омни-компилятор [19] [20] — компилятор с открытым исходным кодом, разработанный в лаборатории HPCS. Университета Цукубы и группа исследования среды программирования RIKEN Центра вычислительных наук , Япония, поддержали OpenACC, XcalableMP и XcalableACC сочетая XcalableMP и OpenACC.
IPMACC [21] — это компилятор C с открытым исходным кодом, разработанный Университетом Виктории , который преобразует OpenACC в CUDA, OpenCL и ISPC. В настоящее время поддерживаются только следующие директивы: data , kernels , цикл и кэш .
Поддержка GCC для OpenACC появлялась медленно. [22] В сентябре 2013 года было объявлено о реализации Samsung с таргетингом на графические процессоры; это перевело код с аннотациями OpenACC 1.1 в OpenCL . [17] Объявление о «настоящей» реализации последовало два месяца спустя, на этот раз от NVIDIA и на основе OpenACC 2.0. [23] Это вызвало некоторые разногласия, поскольку реализация была ориентирована только на собственный ассемблерный язык NVIDIA PTX , для которого не было ассемблера с открытым исходным кодом или среды выполнения. [24] [25] Экспериментальная поддержка OpenACC/PTX появилась в GCC начиная с версии 5.1. Серии выпусков GCC6 и GCC7 включают значительно улучшенную реализацию спецификации OpenACC 2.0a. [26] [27] GCC 9.1 предлагает почти полную поддержку OpenACC 2.5. [28]
Использование [ править ]
Подобно OpenMP 3.x в гомогенной системе или более ранней версии OpenHMPP , основным способом программирования в OpenACC являются директивы. [29] Спецификации также включают библиотеку времени выполнения, определяющую несколько вспомогательных функций. Чтобы использовать их, пользователь должен включить «openacc.h» в C или «openacc_lib.h» в Фортране; [30] а затем вызовите функцию acc_init() .
Директивы [ править ]
OpenACC определяет обширный список прагм (директив), [31] например:
#pragma acc parallel
#pragma acc kernels
Оба используются для определения ядер параллельных вычислений, которые будут выполняться на ускорителе, используя различную семантику. [32] [33]
#pragma acc data
Основная директива для определения и копирования данных в акселератор и из него.
#pragma acc loop
Используется для определения типа параллелизма в parallel
или kernels
область.
#pragma acc cache
#pragma acc update
#pragma acc declare
#pragma acc wait
API среды выполнения [ править ]
Также определены некоторые функции API времени выполнения : 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()
.
OpenACC обычно заботится об организации работы целевого устройства, однако это можно обойти с помощью групп и рабочих. Группа состоит из рабочих групп и управляет несколькими элементами обработки (как рабочая группа в OpenCL).
См. также [ править ]
Ссылки [ править ]
- ^ «Nvidia, Cray, PGI и CAPS запускают стандарт программирования OpenACC для параллельных вычислений» . Спрашивающий . 4 ноября 2011 г. Архивировано из оригинала 17 ноября 2011 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ «Стандарт OpenACC, версия 2.5» (PDF) . OpenACC.org . Проверено 2 июня 2017 г.
- ^ «Как API OpenACC связан с API OpenMP?» . OpenACC.org . Проверено 14 января 2014 г.
- ^ «Как возникли спецификации OpenACC?» . OpenACC.org . Проверено 14 января 2014 г.
- ^ «Консорциум OpenMP выпускает первый технический отчет» . OpenMP.org . 5 ноября 2012 года . Проверено 14 января 2014 г.
- ^ «OpenMP в SC12» . OpenMP.org . 29 августа 2012 года . Проверено 14 января 2014 г.
- ^ Jump up to: а б «Группа OpenACC сообщает о расширении поддержки стандарта программирования ускорителей» . HPCwire . 20 июня 2012 года. Архивировано из оригинала 23 июня 2012 года . Проверено 14 января 2014 г.
- ^ «Версия OpenACC 2.0 опубликована для комментариев» . OpenACC.org . 12 ноября 2012 года . Проверено 14 января 2014 г.
- ^ «Спецификация OpenACC 2.0 | www.openacc.org» . www.openacc.org . Архивировано из оригинала 4 апреля 2016 г. Проверено 23 марта 2016 г.
- ^ «Группа стандартов OpenACC объявляет о выпуске спецификации 2.5; поставщики-члены добавляют поддержку ARM и x86 в качестве параллельных устройств | www.openacc.org» . www.openacc.org . Архивировано из оригинала 26 июля 2016 г. Проверено 22 марта 2016 г.
- ^ «Что нового в OpenACC 2.6? | OpenACC» . www.openacc.org . Проверено 1 мая 2018 г.
- ^ «Что нового в OpenACC 2.7! | OpenACC» . www.openacc.org . Проверено 7 января 2019 г.
- ^ «Интерфейс прикладного программирования OpenACC©» (PDF) . ОпенАКК . Сентябрь 2021 г. Архивировано (PDF) из оригинала 29 декабря 2022 г. . Проверено 13 декабря 2023 г.
- ^ «Стандарт OpenACC, помогающий разработчикам воспользоваться преимуществами ускорителей вычислений на графических процессорах» . Лаборатории Xbit . 16 ноября 2011 года. Архивировано из оригинала 16 января 2014 года . Проверено 14 января 2014 г.
- ^ «Компилятор OpenUH» . Архивировано из оригинала 25 января 2014 года . Проверено 4 марта 2014 г.
- ^ «Компилятор OpenARC» . Проверено 4 ноября 2014 г.
- ^ Jump up to: а б Ларабель, Майкл (30 сентября 2013 г.). «Опубликована поддержка GCC для OpenACC на графическом процессоре» . Фороникс .
- ^ "accULL Реализация исследования OpenACC" . Проверено 14 января 2014 г.
- ^ «Омни-компилятор» . omni-compiler.org . Проверено 18 ноября 2019 г.
- ^ Omni-компилятор для программ C и Fortran с директивами XcalableMP и OpenACC: omni-compiler/omni-compiler , omni-compiler, 17 октября 2019 г. , получено 17 ноября 2019 г.
- ^ «Компилятор IPMACC» . Гитхаб . Проверено 31 января 2017 г.
- ^ Ларабель, Майкл (4 декабря 2012 г.). «OpenACC все еще не любим открытыми компиляторами» . Фороникс .
- ^ Ларабель, Майкл (14 ноября 2013 г.). «OpenACC 2.0 с поддержкой графического процессора появится в GCC» . Фороникс .
- ^ Ларабель, Майкл (15 ноября 2013 г.). «NVIDIA и Mentor Graphics могут нанести вред GCC» . Фороникс .
- ^ Ларабель, Майкл (21 ноября 2013 г.). «Борьба за OpenACC в странах Персидского залива продолжается» . Фороникс .
- ^ «OpenACC — GCC Wiki» .
- ^ Швинге, Томас (15 января 2015 г.). «Объединить текущий набор изменений OpenACC из ветки gomp-4_0» . gcc (список рассылки) . Проверено 15 января 2015 г.
{{cite mailing list}}
: Неизвестный параметр|agency=
игнорируется ( помогите ) - ^ Елинек, Якуб (3 мая 2019 г.). «Выпущен GCC 9.1» . LWN.net .
- ^ «Простой параллелизм графического процессора с OpenACC» . Доктор Добб . 11 июня 2012 года . Проверено 14 января 2014 г.
- ^ «Краткая справочная карта OpenACC API, версия 1.0» (PDF) . НВидиа . Ноябрь 2011 года . Проверено 14 января 2014 г.
- ^ «Стандарт OpenACC, версия 2.0» (PDF) . OpenACC.org . Проверено 14 января 2014 г.
- ^ «Ядра OpenACC и параллельные конструкции» . Инсайдер PGI . Август 2012 года . Проверено 14 января 2014 г.
- ^ «Параллельный раздел OpenACC VS ядра» . База знаний CAPS для предприятий . 3 января 2013 года. Архивировано из оригинала 16 января 2014 года . Проверено 14 января 2014 г.
Внешние ссылки [ править ]
- Домашняя страница | OpenACC
- Пример использования от Nvidia: часть 1 , часть 2
- OpenACC-standard.org: Руководство по программированию и лучшим практикам OpenACC (июнь 2015 г.)
- Nvidia: Компиляторы и инструменты PGI. Руководство по началу работы с OpenACC (2018).
- Стефан Этье: Введение в программирование графических процессоров с помощью OpenACC , учебный курс по исследовательским вычислениям (1 ноября 2019 г.)
- OpenACC-standard.org: Полное руководство OpenACC (май 2021 г.)
- Ольга Абрамкина, Реми Дюбуа, Тибо Вери: OpenACC для графических процессоров: введение (2 июня 2023 г.)