OpenACC

редактировать
OpenACC
Стабильный выпуск 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.

Содержание
  • 1 Поддержка компилятора
  • 2 Использование
    • 2.1 Директивы
    • 2.2 API среды выполнения
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Поддержка компилятора

Поддержка 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

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).

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-01 12:36:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте