OpenACC
| OpenACC | |
|---|---|
| Тип | API |
| Написана на | C, C++, Fortran |
| Операционная система | кроссплатформенность |
| Последняя версия | 3.2 (ноябрь 2021) |
| Сайт | openacc.org |
OpenACC (от англ. Open Accelerators) — программный стандарт для распараллеливания программ, разрабатываемый совместно компаниями 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] 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().
См. также
Примечания
- ↑ Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing. The Inquirer (4 ноября 2011). Дата обращения: 9 мая 2015. Архивировано из оригинала 17 ноября 2011 года.
- ↑ Официальный сайт OpenACC. Дата обращения: 30 сентября 2012. Архивировано 23 сентября 2012 года.
- ↑ 1 2 OpenACC standard version 2.0. OpenACC.org. Дата обращения: 14 января 2014. Архивировано 3 августа 2016 года.
- ↑ Вычисления на GPU с помощью простых директив Архивная копия от 4 ноября 2012 на Wayback Machine // NVidia, 2012
- ↑ How does the OpenACC API relate to the OpenMP API? OpenACC.org. Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ How did the OpenACC specifications originate? OpenACC.org. Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ The OpenMP Consortium Releases First Technical Report. OpenMP.org (5 ноября 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenMP at SC12. OpenMP.org (29 августа 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ 1 2 OpenACC Group Reports Expanding Support for Accelerator Programming Standard. HPCwire (20 июня 2012). Дата обращения: 14 января 2014. Архивировано из оригинала 23 июня 2012 года.
- ↑ What is the OpenACC specification based on? Дата обращения: 30 сентября 2012. Архивировано 25 сентября 2012 года.
- ↑ OpenACC Version 2.0 Posted for Comment. OpenACC.org (12 ноября 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators. Xbit laboratories (16 ноября 2011). Дата обращения: 14 января 2014. Архивировано из оригинала 16 января 2014 года.
- ↑ CAPS Announcing Full Support for OpenACC 2.0 in its Compilers. HPCwire (14 ноября 2013). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenUH Compiler. Дата обращения: 4 марта 2014. Архивировано из оригинала 25 января 2014 года.
- ↑ OpenARC Compiler. Дата обращения: 4 ноября 2014. Архивировано 4 ноября 2014 года.
- ↑ OpenACC - GCC Wiki. Дата обращения: 9 мая 2015. Архивировано 1 апреля 2015 года.
- ↑ Schwinge, Thomas (15 января 2015). Merge current set of OpenACC changes from gomp-4_0-branch. gcc (Mailing list). Архивировано 16 января 2015. Дата обращения: 15 января 2015.
{{cite mailing list}}: Указан более чем один параметр|website=and|mailinglist=(справка) - ↑ Dolbeau, Romain; Bihan, Stéphane; Bodin, François (4 октября 2007). HMPP: A Hybrid Multi-core Parallel Programming Environment (PDF). Workshop on General Purpose Processing on Graphics Processing Units. Архивировано из оригинала (PDF) 16 января 2014. Дата обращения: 14 января 2014. Источник. Дата обращения: 9 мая 2015. Архивировано из оригинала 16 января 2014 года.
- ↑ Easy GPU Parallelism with OpenACC. Dr.Dobb's (11 июня 2012). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenACC API QuickReference Card, version 1.0. NVidia (ноябрь 2011). Дата обращения: 14 января 2014. Архивировано 16 января 2014 года.
- ↑ OpenACC Kernels and Parallel Constructs. PGI insider (август 2012). Дата обращения: 14 января 2014. Архивировано 20 июля 2014 года.
- ↑ OpenACC parallel section VS kernels. CAPS entreprise Knowledge Base (3 января 2013). Дата обращения: 14 января 2014. Архивировано из оригинала 16 января 2014 года.
Ссылки
- http://www.openacc.org/ Архивная копия от 15 июня 2012 на Wayback Machine
- Стандарт OpenACC 1.0 Архивная копия от 24 января 2013 на Wayback Machine
- Примеры от NVIDIA: часть 1 Архивная копия от 12 июня 2012 на Wayback Machine, часть 2 Архивная копия от 26 июня 2012 на Wayback Machine
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.