OpenACC

OpenACC (от англ. Open Accelerators) — программный стандарт для параллельного программирования, разрабатываемый совместно компаниями Cray, CAPS, Nvidia и PGI. Стандарт описывает набор директив компилятора, предназначенных для упрощения создания гетерогенных параллельных программ, задействующих как центральный, так и графический[1][2] процессоры.

OpenACC
Тип API
Написана на C, C++, Fortran
Операционная система кроссплатформенность
Последняя версия 2.7 (ноябрь 2018)
Сайт openacc.org

Как и более ранний стандарт 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().

См. также

Примечания

  1. Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing (недоступная ссылка). The Inquirer (4 ноября 2011). Дата обращения: 9 мая 2015. Архивировано 17 ноября 2011 года.
  2. Официальный сайт OpenACC
  3. OpenACC standard version 2.0. OpenACC.org. Дата обращения: 14 января 2014.
  4. Вычисления на GPU с помощью простых директив // NVidia, 2012
  5. How does the OpenACC API relate to the OpenMP API?. OpenACC.org. Дата обращения: 14 января 2014.
  6. How did the OpenACC specifications originate?. OpenACC.org. Дата обращения: 14 января 2014.
  7. The OpenMP Consortium Releases First Technical Report. OpenMP.org (5 ноября 2012). Дата обращения: 14 января 2014.
  8. OpenMP at SC12. OpenMP.org (29 августа 2012). Дата обращения: 14 января 2014.
  9. OpenACC Group Reports Expanding Support for Accelerator Programming Standard (недоступная ссылка). HPCwire (20 июня 2012). Дата обращения: 14 января 2014. Архивировано 23 июня 2012 года.
  10. What is the OpenACC specification based on?
  11. OpenACC Version 2.0 Posted for Comment. OpenACC.org (12 ноября 2012). Дата обращения: 14 января 2014.
  12. OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators (недоступная ссылка). Xbit laboratories (16 ноября 2011). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
  13. CAPS Announcing Full Support for OpenACC 2.0 in its Compilers. HPCwire (14 ноября 2013). Дата обращения: 14 января 2014.
  14. OpenUH Compiler (недоступная ссылка). Дата обращения: 4 марта 2014. Архивировано 25 января 2014 года.
  15. OpenARC Compiler. Дата обращения: 4 ноября 2014.
  16. OpenACC - GCC Wiki
  17. Schwinge, Thomas Merge current set of OpenACC changes from gomp-4_0-branch. Список рассылки gcc (15 January 2015). Дата обращения: 15 января 2015.
  18. (4 October 2007) «HMPP: A Hybrid Multi-core Parallel Programming Environment» in Workshop on General Purpose Processing on Graphics Processing Units.. Дата обращения: 14 January 2014. Архивная копия от 16 января 2014 на Wayback Machine
  19. Easy GPU Parallelism with OpenACC. Dr.Dobb's (11 июня 2012). Дата обращения: 14 января 2014.
  20. OpenACC API QuickReference Card, version 1.0. NVidia (November 2011). Дата обращения: 14 января 2014.
  21. OpenACC Kernels and Parallel Constructs. PGI insider (August 2012). Дата обращения: 14 января 2014.
  22. OpenACC parallel section VS kernels (недоступная ссылка). CAPS entreprise Knowledge Base (3 января 2013). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.