Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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  [ ja ] и XcalableACC  [ ja ], сочетающие 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  [ ja ]
  • XcalableMP  [ ja ]

Ссылки [ править ]

  1. ^ «Nvidia, Cray, PGI и CAPS запускают стандарт программирования OpenACC для параллельных вычислений» . Спрашивающий . 4 ноября 2011 г.
  2. ^ "Версия стандарта OpenACC 2.5" (PDF) . OpenACC.org . Дата обращения 2 июня 2017 .
  3. ^ "Как OpenACC API соотносится с OpenMP API?" . OpenACC.org . Проверено 14 января 2014 года .
  4. ^ "Как возникли спецификации OpenACC?" . OpenACC.org . Проверено 14 января 2014 года .
  5. ^ «Консорциум OpenMP выпускает первый технический отчет» . OpenMP.org . 5 ноября 2012 . Проверено 14 января 2014 года .
  6. ^ «OpenMP на SC12» . OpenMP.org . 29 августа 2012 . Проверено 14 января 2014 года .
  7. ^ a b «Группа OpenACC сообщает о расширении поддержки стандарта программирования ускорителей» . HPCwire . 20 июня 2012 года Архивировано из оригинала 23 июня 2012 . Проверено 14 января 2014 года .
  8. ^ «Версия 2.0 OpenACC, опубликованная для комментариев» . OpenACC.org . 12 ноября 2012 . Проверено 14 января 2014 года .
  9. ^ "OpenACC 2.0 Spec | www.openacc.org" . www.openacc.org . Архивировано из оригинала на 2016-04-04 . Проверено 23 марта 2016 .
  10. ^ «OpenACC Standards Group объявляет о выпуске спецификации 2.5; поставщики-участники добавляют поддержку ARM и x86 в качестве параллельных устройств | www.openacc.org» . www.openacc.org . Архивировано из оригинала на 2016-07-26 . Проверено 22 марта 2016 .
  11. ^ «Что нового в OpenACC 2.6? | OpenACC» . www.openacc.org . Проверено 1 мая 2018 .
  12. ^ «Что нового в OpenACC 2.7! | OpenACC» . www.openacc.org . Проверено 7 января 2019 .
  13. ^ "Взгляды Cray на #OpenACC против #OpenMP" . Дата обращения 14 мая 2019 .
  14. ^ «Стандарт OpenACC, чтобы помочь разработчикам воспользоваться преимуществами ускорителей вычислений на GPU» . Xbit лаборатории . 16 ноября 2011 года Архивировано из оригинала 16 января 2014 года . Проверено 14 января 2014 года .
  15. ^ "Компилятор OpenUH" . Архивировано из оригинала 25 января 2014 года . Проверено 4 марта 2014 года .
  16. ^ "Компилятор OpenARC" . Проверено 4 ноября 2014 года .
  17. ^ a b Ларабель, Майкл (30 сентября 2013 г.). «Опубликована поддержка GCC для OpenACC на GPU» . Фороникс .
  18. ^ "accULL Реализация исследования OpenACC" . Проверено 14 января 2014 года .
  19. ^ "Омни компилятор" . omni-compiler.org . Проверено 18 ноября 2019 .
  20. ^ Omni Compiler для программ C и Fortran с директивами XcalableMP и OpenACC: omni-compiler / omni-compiler , omni-compiler, 17.10.2019 , получено 17.11.2019
  21. ^ "Компилятор IPMACC" . Проверено 31 января 2017 года .
  22. ^ Larabel, Майкл (4 декабря 2012). «OpenACC по-прежнему не нравится открытым компиляторам» . Фороникс .
  23. ^ Larabel, Майкл (14 ноября 2013). «OpenACC 2.0 с поддержкой GPU переходит в GCC» . Фороникс .
  24. ^ Larabel, Майкл (15 ноября 2013). «NVIDIA, Mentor Graphics может нанести вред GCC» . Фороникс .
  25. ^ Larabel, Майкл (21 ноября 2013). «Борьба с OpenACC продолжается в GCC» . Фороникс .
  26. ^ "OpenACC - GCC Wiki" .
  27. Швинге, Томас (15 января 2015 г.). «Слить текущий набор изменений OpenACC из gomp-4_0-branch» . gcc (список рассылки). gcc.gnu.org . Проверено 15 января 2015 года .
  28. Jelinek, Jakub (3 мая 2019 г.). «Выпущен GCC 9.1» . LWN.net .
  29. ^ "Простой параллелизм GPU с OpenACC" . Доктора Добба . 11 июня 2012 . Проверено 14 января 2014 года .
  30. ^ «OpenACC API QuickReference Card, версия 1.0» (PDF) . NVidia . Ноябрь 2011 . Проверено 14 января 2014 года .
  31. ^ «Версия стандарта OpenACC 2.0» (PDF) . OpenACC.org . Проверено 14 января 2014 года .
  32. ^ «Ядра OpenACC и параллельные конструкции» . Инсайдер PGI . Август 2012 . Проверено 14 января 2014 года .
  33. ^ "Параллельная секция OpenACC VS ядер" . База знаний предприятия CAPS . 3 января 2013 г. Архивировано из оригинала 16 января 2014 года . Проверено 14 января 2014 года .

Внешние ссылки [ править ]

  • https://www.openacc.org/
  • Пример использования от Nvidia: часть 1 , часть 2