Стабильный выпуск | 2.7 / ноябрь 2018 |
---|---|
Написано в | C , C ++ и Фортран |
Операционная система | Кроссплатформенность |
Платформа | Кроссплатформенность |
Тип | API |
Веб-сайт | www |
OpenACC (для открытых ускорителей ) - это стандарт программирования для параллельных вычислений, разработанный Cray , CAPS, Nvidia и PGI . Стандарт разработан для упрощения параллельного программирования разнородных систем CPU / GPU . [1]
Как и в OpenMP , программист может аннотировать исходный код C , C ++ и Fortran, чтобы определить области, которые следует ускорить с помощью директив компилятора и дополнительных функций. [2] Подобно OpenMP 4.0 и новее, OpenACC может ориентироваться как на архитектуры CPU, так и на GPU и запускать на них вычислительный код.
Члены OpenACC работали как члены стандартной группы OpenMP, чтобы объединиться со спецификацией OpenMP, чтобы создать общую спецификацию, которая расширяет OpenMP для поддержки ускорителей в будущей версии OpenMP. [3] [4] Эти усилия привели к техническому отчету [5] для комментариев и обсуждения, приуроченного к ежегодной конференции по суперкомпьютерам (ноябрь 2012 г., Солт-Лейк-Сити ) и рассмотрению поддержки ускорителей сторонних производителей с участием поставщиков оборудования в 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] Последняя версия спецификации, версия 2.7, была выпущена в ноябре 2018 года. [12]
3 апреля 2019 года Джон Левеск (директор Cray Supercomputing Center of Excellence в Cray ) объявил, что Cray прекращает поддержку OpenACC в CCE / 9.0. [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]
Omni Compiler [19] [20] - компилятор с открытым исходным кодом, разработанный в лаборатории HPCS. из Университета Цукуба и группа исследования среды программирования Центра вычислительных наук RIKEN , Япония, поддержали OpenACC, XcalableMP
и XcalableACC сочетающие XcalableMP и OpenACC.IPMACC [21] - компилятор C с открытым исходным кодом, разработанный Университетом Виктории, который переводит OpenACC в CUDA, OpenCL и ISPC. В настоящее время поддерживаются только следующие директивы: данные , ядра , цикл и кеш .
Поддержка GCC для OpenACC появлялась медленно. [22] В сентябре 2013 года компания Samsung анонсировала реализацию нацеливания на GPU; это транслировало аннотированный код 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 в Fortran; [30], а затем вызовите функцию acc_init () .
Директивы [ править ]
OpenACC определяет обширный список прагм (директив) [31], например:
#pragma acc parallel #pragma acc ядра
Оба используются для определения ядер параллельных вычислений, которые будут выполняться на ускорителе, с использованием разной семантики [32] [33]
#pragma acc data
Основная директива для определения и копирования данных в ускоритель и из него.
#pragma acc loop
Используется для определения типа параллелизма в области parallel
или kernels
.
#pragma acc cache #pragma acc update #pragma acc declare #pragma acc wait
Runtime 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).
См. Также [ править ]
- C ++ AMP
- OpenCL
- OpenHMPP
- OpenMP
- XcalableACC
- XcalableMP
Ссылки [ править ]
- ^ «Nvidia, Cray, PGI и CAPS запускают стандарт программирования OpenACC для параллельных вычислений» . Спрашивающий . 4 ноября 2011 г.
- ^ "Версия стандарта OpenACC 2.5" (PDF) . OpenACC.org . Дата обращения 2 июня 2017 .
- ^ "Как OpenACC API соотносится с OpenMP API?" . OpenACC.org . Проверено 14 января 2014 года .
- ^ "Как возникли спецификации OpenACC?" . OpenACC.org . Проверено 14 января 2014 года .
- ^ «Консорциум OpenMP выпускает первый технический отчет» . OpenMP.org . 5 ноября 2012 . Проверено 14 января 2014 года .
- ^ «OpenMP на SC12» . OpenMP.org . 29 августа 2012 . Проверено 14 января 2014 года .
- ^ a b «Группа OpenACC сообщает о расширении поддержки стандарта программирования ускорителей» . HPCwire . 20 июня 2012 года Архивировано из оригинала 23 июня 2012 . Проверено 14 января 2014 года .
- ^ «Версия 2.0 OpenACC, опубликованная для комментариев» . OpenACC.org . 12 ноября 2012 . Проверено 14 января 2014 года .
- ^ "OpenACC 2.0 Spec | www.openacc.org" . www.openacc.org . Архивировано из оригинала на 2016-04-04 . Проверено 23 марта 2016 .
- ^ «OpenACC Standards Group объявляет о выпуске спецификации 2.5; поставщики-участники добавляют поддержку ARM и x86 в качестве параллельных устройств | www.openacc.org» . www.openacc.org . Архивировано из оригинала на 2016-07-26 . Проверено 22 марта 2016 .
- ^ «Что нового в OpenACC 2.6? | OpenACC» . www.openacc.org . Проверено 1 мая 2018 .
- ^ «Что нового в OpenACC 2.7! | OpenACC» . www.openacc.org . Проверено 7 января 2019 .
- ^ "Взгляды Cray на #OpenACC против #OpenMP" . Дата обращения 14 мая 2019 .
- ^ «Стандарт OpenACC, чтобы помочь разработчикам воспользоваться преимуществами ускорителей вычислений на GPU» . Xbit лаборатории . 16 ноября 2011 года Архивировано из оригинала 16 января 2014 года . Проверено 14 января 2014 года .
- ^ "Компилятор OpenUH" . Архивировано из оригинала 25 января 2014 года . Проверено 4 марта 2014 года .
- ^ "Компилятор OpenARC" . Проверено 4 ноября 2014 года .
- ^ a b Ларабель, Майкл (30 сентября 2013 г.). «Опубликована поддержка GCC для OpenACC на GPU» . Фороникс .
- ^ "accULL Реализация исследования OpenACC" . Проверено 14 января 2014 года .
- ^ "Омни компилятор" . omni-compiler.org . Проверено 18 ноября 2019 .
- ^ Omni Compiler для программ C и Fortran с директивами XcalableMP и OpenACC: omni-compiler / omni-compiler , omni-compiler, 17.10.2019 , получено 17.11.2019
- ^ "Компилятор IPMACC" . Проверено 31 января 2017 года .
- ^ Larabel, Майкл (4 декабря 2012). «OpenACC по-прежнему не нравится открытым компиляторам» . Фороникс .
- ^ Larabel, Майкл (14 ноября 2013). «OpenACC 2.0 с поддержкой GPU переходит в GCC» . Фороникс .
- ^ Larabel, Майкл (15 ноября 2013). «NVIDIA, Mentor Graphics может нанести вред GCC» . Фороникс .
- ^ Larabel, Майкл (21 ноября 2013). «Борьба с OpenACC продолжается в GCC» . Фороникс .
- ^ "OpenACC - GCC Wiki" .
- ↑ Швинге, Томас (15 января 2015 г.). «Слить текущий набор изменений OpenACC из gomp-4_0-branch» . gcc (список рассылки). gcc.gnu.org . Проверено 15 января 2015 года .
- ↑ Jelinek, Jakub (3 мая 2019 г.). «Выпущен GCC 9.1» . LWN.net .
- ^ "Простой параллелизм GPU с OpenACC" . Доктора Добба . 11 июня 2012 . Проверено 14 января 2014 года .
- ^ «OpenACC API QuickReference Card, версия 1.0» (PDF) . NVidia . Ноябрь 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 года .
Внешние ссылки [ править ]
- https://www.openacc.org/
- Пример использования от Nvidia: часть 1 , часть 2