OpenACC

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
OpenACC
Тип

API

Написана на

C, C++, Fortran

Последняя версия

2.0 (июнь 2013)

Сайт

openacc.org

OpenACC (от англ. Open Accelerators) — программный стандарт для параллельного программирования, разрабатываемый y 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] В версии 5.1 (22 апреля 2015 года) была добавлена библиотека поддержки openacc.h. GCC версии 5.1 планируется к включению в Ubuntu 15.10 (октябрь 2015 года), компилятор также доступен в составе Fedora 22 beta.

Использование[править | править вики-текст]

Основным режимом использования OpenACC являются директивы, точно также как и в OpenMP 3.x или более раннем OpenHMPP,[18][19]. Библиотека поддержки предоставляет несколько вспомогательных функций, описанных в заголовочных файлах "openacc.h" для C/C++ и "openacc_lib.h" для Fortran;[20].

Директивы[править | править вики-текст]

В OpenACC описаны различные директивы компилятора (прагмы), в том числе[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 (4 November 2011).
  2. Официальный сайт OpenACC
  3. 1 2 OpenACC standard version 2.0. Проверено 14 января 2014.
  4. Вычисления на GPU с помощью простых директив // NVidia, 2012
  5. How does the OpenACC API relate to the OpenMP API?. Проверено 14 января 2014.
  6. How did the OpenACC specifications originate?. Проверено 14 января 2014.
  7. The OpenMP Consortium Releases First Technical Report (5 November 2012). Проверено 14 января 2014.
  8. OpenMP at SC12 (29 August 2012). Проверено 14 января 2014.
  9. 1 2 OpenACC Group Reports Expanding Support for Accelerator Programming Standard (20 June 2012). Проверено 14 января 2014.
  10. What is the OpenACC specification based on?
  11. OpenACC Version 2.0 Posted for Comment (12 November 2012). Проверено 14 января 2014.
  12. OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators (16 November 2011). Проверено 14 января 2014.
  13. CAPS Announcing Full Support for OpenACC 2.0 in its Compilers (14 November 2013). Проверено 14 января 2014.
  14. OpenUH Compiler. Проверено 4 марта 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. 
  19. Easy GPU Parallelism with OpenACC (11 June 2012). Проверено 14 января 2014.
  20. OpenACC API QuickReference Card, version 1.0 (November 2011). Проверено 14 января 2014.
  21. OpenACC Kernels and Parallel Constructs (August 2012). Проверено 14 января 2014.
  22. OpenACC parallel section VS kernels (3 January 2013). Проверено 14 января 2014.

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