Стабильный выпуск | 2.7 / ноябрь 2018 |
---|---|
Написано на | C, C ++ и Fortran |
Операционная система | Кросс-платформенная |
Платформа | Кросс-платформенная |
Тип | API |
Веб-сайт | www.openacc.org |
OpenACC (для открытых ускорителей) - это стандарт программирования для параллельных вычислений, разработанный Cray, CAPS, Nvidia и PGI. Стандарт разработан для упрощения параллельного программирования гетерогенных CPU /GPU систем.
Как и в OpenMP, программист может аннотировать C, C ++ и Fortran исходный код, чтобы определить области, которые следует ускорить, используя директивы компилятора и дополнительные функции. Подобно OpenMP 4.0 и новее, OpenACC может нацеливаться на архитектуры CPU и GPU и запускать на них вычислительный код.
Члены OpenACC работали как члены стандартной группы OpenMP, чтобы объединиться со спецификацией OpenMP, чтобы создать общую спецификацию, которая расширяет OpenMP для поддержки ускорителей в будущей версии OpenMP. Эти усилия привели к составлению технического отчета для комментариев и обсуждения, приуроченного к ежегодной конференции по суперкомпьютерам (ноябрь 2012 г., Солт-Лейк-Сити ) и рассмотрению поддержки ускорителей сторонних производителей с вводом от оборудования. поставщиков, которые участвуют в OpenMP.
На ISC'12 OpenACC была продемонстрирована для работы на ускорителях Nvidia, AMD и Intel без данных о производительности.
12 ноября 2012 г. на конференции SC12 был представлен проект спецификации OpenACC версии 2.0. Новые предлагаемые возможности включают новые элементы управления перемещением данных (такие как улучшенная обработка неструктурированных данных и улучшения поддержки несмежной памяти), а также поддержку явных вызовов функций и отдельной компиляции (позволяющей создавать и повторно использовать библиотеки ускоренного кода). OpenACC 2.0 был официально выпущен в июне 2013 года.
Версия 2.5 спецификации была выпущена в октябре 2015 года, а версия 2.6 - в ноябре 2017 года. Последняя версия спецификации, версия 2.7, была выпущена в ноябре 2018 года.
3 апреля 2019 г. Джон Левеск (директор Cray Supercomputing Center of Excellence в Cray ) объявил, что Cray прекращает поддержку OpenACC в CCE / 9.0.
Поддержка OpenACC доступен в коммерческих компиляторах PGI (начиная с версии 12.6) и (только для оборудования Cray) Cray.
OpenUH - это компилятор OpenACC с открытым исходным кодом на основе Open64, поддерживающий C и FORTRAN, разработанный разработано группой HPCTools из Университета Хьюстона.
OpenARC - это компилятор C с открытым исходным кодом, разработанный в Национальной лаборатории Ок-Ридж для поддержки всех функций OpenACC 1.0 спецификация. Экспериментальный компилятор с открытым исходным кодом, accULL, разработан Университетом Ла-Лагуна (язык C только).
Omni Compiler - компилятор с открытым исходным кодом, разработанный в HPCS Лаборатория. из Университета Цукуба и группа исследования среды программирования из RIKEN Центра вычислительных наук, Япония, поддержали OpenACC, [ja ] и [ja ] объединение XcalableMP и OpenACC.
IPMACC - компилятор C с открытым исходным кодом, разработанный Университетом Виктории, который переводит OpenACC в CUDA, OpenCL и ISPC. В настоящее время поддерживаются только следующие директивы: данные, ядра, цикл и кеш.
GCC поддержка OpenACC медленно появлялась. В сентябре 2013 года компания Samsung анонсировала реализацию GPU-таргетинга; это переводило код с аннотациями OpenACC 1.1 в OpenCL. Объявление о «настоящей» реализации последовало два месяца спустя, на этот раз от NVIDIA и на основе OpenACC 2.0. Это вызвало споры, поскольку реализация была нацелена только на собственный ассемблер NVIDIA PTX, для которого не было доступно ассемблер или среда исполнения с открытым исходным кодом. Экспериментальная поддержка OpenACC / PTX завершилась в GCC начиная с версии 5.1. Серии выпусков GCC6 и GCC7 включают значительно улучшенную реализацию спецификации OpenACC 2.0a. GCC 9.1 предлагает почти полную поддержку OpenACC 2.5.
Аналогично OpenMP 3.x в однородной системе или более ранней версии OpenHMPP, основной режим программирования в OpenACC - это директивы. В спецификации также включена библиотека времени выполнения , определяющая несколько функций поддержки. Чтобы использовать их, пользователь должен включить openacc.h в C или openacc_lib.h в Fortran; а затем вызовите функцию acc_init ().
OpenACC определяет обширный список прагм (директив), например:
#pragma acc parallel #pragma acc kernels
Оба используются для определения ядер параллельных вычислений для выполняться на ускорителе с использованием особой семантики
#pragma acc data
Это основная директива для определения и копирования данных в ускоритель и из него.
#pragma acc loop
Используется для определения типа параллелизма в параллельной
или ядерной
области.
#pragma acc cache #pragma acc update #pragma acc declare #pragma acc wait
Также определены некоторые функции времени выполнения 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).