맨위로가기

OpenACC

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

OpenACC는 가속기를 활용한 병렬 프로그래밍을 위한 지시어 기반의 표준이다. PGI와 Cray, OpenUH, OpenARC, 옴니 컴파일러, IPMACC 등 다양한 컴파일러에서 OpenACC를 지원하며, GCC에서도 OpenACC 지원이 이루어졌다. OpenACC는 지시어와 런타임 라이브러리를 통해 사용되며, 주요 지시어로는 `#pragma acc parallel`, `#pragma acc kernels`, `#pragma acc data` 등이 있다. 런타임 API 함수는 장치 관리, 비동기 작업 제어, 메모리 관리 등을 제공한다.

더 읽어볼만한 페이지

  • 포트란 - 존 배커스
    존 배커스는 FORTRAN 프로그래밍 언어 설계 및 개발, ALGOL 60 개발 참여 및 바커스-나우르 표기법 고안 등 컴퓨터 과학에 기여한 미국의 과학자이다.
  • 포트란 - OpenMP
    OpenMP는 공유 메모리 병렬 시스템에서 병렬 프로그래밍을 지원하는 API로, 컴파일러 지시문, 라이브러리 루틴, 환경 변수 등을 통해 병렬 영역 설정, 작업 분담, 데이터 관리, 스레드 동기화 등을 수행하며, 점진적인 병렬화가 가능하고 이식성이 높다.
  • C 프로그래밍 언어 계열 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • C 프로그래밍 언어 계열 -
    펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
  • 표준 - 국제단위계
    국제단위계(SI)는 7개의 기본 상수 값을 고정하여 정의되는 국제적인 측정 단위 체계로, 2019년 재정의를 통해 자연 상수에 기반하여 측정의 정확도와 재현성을 향상시켰다.
  • 표준 - QR 코드
    QR 코드는 1994년 일본 덴소 웨이브가 개발한 2차원 바코드로, 기존 바코드보다 많은 정보를 저장하고 오류 정정 기능이 있으며, 자동차 부품 관리에서 시작하여 다양한 분야에서 활용되지만 악성 QR 코드에 의한 피해에도 주의해야 한다.
OpenACC - [IT 관련 정보]에 관한 문서
OpenACC 정보
이름OpenACC
종류API (응용 프로그래밍 인터페이스)
개발자OpenACC 조직
플랫폼크로스 플랫폼
장르API (응용 프로그래밍 인터페이스)
최신 버전3.3
최신 릴리스 날짜2022년 11월
프로그래밍 언어C
C++
Fortran
운영 체제크로스 플랫폼
웹사이트OpenACC 공식 웹사이트

2. 컴파일러 지원

OpenACC는 다양한 상용 및 오픈 소스 컴파일러에서 지원된다. PGI와 크레이는 상용 컴파일러에서, OpenUH, OpenARC, 옴니 컴파일러, IPMACC, GCC는 오픈 소스 컴파일러에서 OpenACC를 지원한다. 각 컴파일러에 대한 자세한 내용은 하위 섹션을 참고할 수 있다.

2. 1. 상용 컴파일러

PGI(12.6 버전부터)와 크레이(Cray 하드웨어 전용)에서 OpenACC를 지원한다.[7][14]

2. 2. 오픈 소스 컴파일러

OpenUH[15]는 오픈64 기반의 오픈 소스 OpenACC 컴파일러로, 휴스턴 대학교 HPCTools 그룹에서 개발했으며 CFORTRAN을 지원한다.[49]

OpenARC[16]는 오크리지 국립 연구소에서 개발한 오픈 소스 C 컴파일러로, OpenACC 1.0 사양의 모든 기능을 지원한다.[50] 라 라구나 대학교에서 개발된 accULL[17]은 실험적인 오픈 소스 C 컴파일러이다.

옴니 컴파일러(Omni Compiler)[18][19]쓰쿠바 대학 HPCS 연구소와 RIKEN (이화학연구소) 계산 과학 연구 센터 프로그래밍 환경 연구팀에서 개발한 오픈 소스 컴파일러로, XcalableMP, OpenACC, XcalableACC|XcalableACC일본어를 지원한다.[52][53]

IPMACC[20]빅토리아 대학교에서 개발한 오픈 소스 C 컴파일러로, OpenACC를 CUDA, OpenCL 및 ISPC로 변환한다. 현재 ''data'', ''kernels'', ''loop'', ''cache'' 지시어만 지원한다.[54]

GCC의 OpenACC 지원은 늦게 이루어졌다.[21] 삼성은 GPU를 대상으로 OpenACC 1.1 코드를 OpenCL로 변환하는 구현을 2013년 9월에 발표했다.[56] NVIDIA는 OpenACC 2.0 기반으로 PTX 어셈블리 언어를 타겟으로 하는 구현을 발표했다.[57] GCC 5.1 버전부터 OpenACC/PTX에 대한 실험적인 지원이 추가되었고,[58][59] GCC 9.1에서는 OpenACC 2.5 지원이 거의 완성되었다.[62]

3. 사용 방법

OpenACC의 주요 프로그래밍 방식은 OpenMP 3.x 버전이나 초기 OpenHMPP와 유사하게 지시어이다.[29] C 언어에서는 "openacc.h", Fortran에서는 "openacc_lib.h"를 포함시킨 후 ''acc_init()'' 함수를 호출하여 런타임 라이브러리를 초기화하고 사용할 수 있다.[30]

3. 1. 지시어 (Directives)

OpenACC는 광범위한 프라그마(지시어) 목록을 정의한다.[31]

```c

#pragma acc parallel

#pragma acc kernels

```

위 두 지시어는 가속기에서 실행될 병렬 계산 커널(여기서 커널은 운영체제의 핵심 부분이 아닌, 가속기에서 실행되는 계산 프로그램을 의미한다)을 정의하는 데 사용되며, 서로 다른 의미를 갖는다.[32][33]

```c

#pragma acc data

```

위 지시어는 데이터를 가속기로 복사하거나 가속기에서 데이터를 복사하는 것을 정의하는 주요 지시어이다.

```c

#pragma acc loop

```

위 지시어는 `parallel` 또는 `kernels` 영역에서 병렬 처리 유형을 정의하는 데 사용된다.

```c

#pragma acc cache

#pragma acc update

#pragma acc declare

#pragma acc wait

3. 2. 런타임 API

OpenACC는 장치 관리, 비동기 작업 제어, 메모리 관리 등을 수행하기 위한 런타임 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()`: OpenACC 런타임을 초기화한다.
  • `acc_shutdown()`: OpenACC 런타임을 종료한다.
  • `acc_on_device()`: 코드가 지정된 장치에서 실행 중인지 확인한다.
  • `acc_malloc()`: 지정된 장치에 메모리를 할당한다.
  • `acc_free()`: 지정된 장치에 할당된 메모리를 해제한다.


OpenACC는 일반적으로 대상 장치에 대한 작업 구성을 처리하지만, 갱(gang)과 워커(worker)를 사용하여 이를 재정의할 수 있다. 갱은 워커로 구성되며, 여러 처리 요소에서 작동한다( OpenCL의 작업 그룹과 유사).

참조

[1] 웹사이트 Nvidia, Cray, PGI, and CAPS launch 'OpenACC' programming standard for parallel computing http://www.theinquir[...] 2011-11-04
[2] 웹사이트 OpenACC standard version 2.5 https://www.openacc.[...] 2017-06-02
[3] 웹사이트 How does the OpenACC API relate to the OpenMP API? http://www.openacc.o[...] 2014-01-14
[4] 웹사이트 How did the OpenACC specifications originate? http://www.openacc.o[...] 2014-01-14
[5] 웹사이트 The OpenMP Consortium Releases First Technical Report http://openmp.org/wp[...] 2014-01-14
[6] 웹사이트 OpenMP at SC12 http://openmp.org/wp[...] 2014-01-14
[7] 웹사이트 OpenACC Group Reports Expanding Support for Accelerator Programming Standard https://web.archive.[...] 2014-01-14
[8] 웹사이트 OpenACC Version 2.0 Posted for Comment http://www.openacc.o[...] 2014-01-14
[9] 웹사이트 OpenACC 2.0 Spec {{!}} www.openacc.org https://web.archive.[...] 2016-03-23
[10] 웹사이트 OpenACC Standards Group Announces Release of the 2.5 Specification; Member Vendors Add Support for ARM & x86 as Parallel Devices {{!}} www.openacc.org https://archive.toda[...] 2016-03-22
[11] 웹사이트 What's new in OpenACC 2.6? {{!}} OpenACC https://www.openacc.[...] 2018-05-01
[12] 웹사이트 What's new in OpenACC 2.7! {{!}} OpenACC https://www.openacc.[...] 2019-01-07
[13] 웹사이트 The OpenACC© Application Programming Interface https://www.openacc.[...] 2023-12-13
[14] 웹사이트 OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators https://web.archive.[...] 2014-01-14
[15] 웹사이트 OpenUH Compiler https://web.archive.[...] 2014-03-04
[16] 웹사이트 OpenARC Compiler http://ft.ornl.gov/r[...] 2014-11-04
[17] 웹사이트 accULL The OpenACC research implementation http://accull.wordpr[...] 2014-01-14
[18] 웹사이트 Omni Compiler https://omni-compile[...] 2019-11-18
[19] Citation Omni Compiler for C and Fortran programs with XcalableMP and OpenACC directives: omni-compiler/omni-compiler https://github.com/o[...] omni-compiler 2019-11-17
[20] 웹사이트 IPMACC Compiler https://www.github.c[...] 2017-01-31
[21] 웹사이트 OpenACC Still Not Loved By Open Compilers https://www.phoronix[...] 2012-12-04
[22] 웹사이트 GCC Support Published For OpenACC On The GPU https://www.phoronix[...] 2013-09-30
[23] 웹사이트 OpenACC 2.0 With GPU Support Coming To GCC https://www.phoronix[...] 2013-11-14
[24] 웹사이트 NVIDIA, Mentor Graphics May Harm GCC https://www.phoronix[...] 2013-11-15
[25] 웹사이트 In-Fighting Continues Over OpenACC In GCC https://www.phoronix[...] 2013-11-21
[26] 웹사이트 OpenACC - GCC Wiki https://gcc.gnu.org/[...]
[27] 메일링리스트 Merge current set of OpenACC changes from gomp-4_0-branch https://gcc.gnu.org/[...] 2015-01-15
[28] 웹사이트 GCC 9.1 Released https://lwn.net/ml/g[...] 2019-05-03
[29] 웹사이트 Easy GPU Parallelism with OpenACC http://www.drdobbs.c[...] 2014-01-14
[30] 웹사이트 OpenACC API QuickReference Card, version 1.0 http://www.nvidia.co[...] 2014-01-14
[31] 웹사이트 OpenACC standard version 2.0 http://www.openacc.o[...] 2014-01-14
[32] 웹사이트 OpenACC Kernels and Parallel Constructs http://www.pgroup.co[...] 2014-01-14
[33] 웹사이트 OpenACC parallel section VS kernels https://web.archive.[...] 2014-01-14
[34] 문서 The OpenACC® Application Programming Interface Version 3.3 | OpenACC-Standard.org https://www.openacc.[...]
[35] 웹사이트 Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing http://www.theinquir[...] 2011-11-04
[36] 웹사이트 OpenACC standard version 2.5 https://www.openacc.[...] 2017-06-02
[37] 웹사이트 How does the OpenACC API relate to the OpenMP API? http://www.openacc.o[...] 2014-01-14
[38] 웹사이트 How did the OpenACC specifications originate? http://www.openacc.o[...] 2014-01-14
[39] 웹사이트 The OpenMP Consortium Releases First Technical Report http://openmp.org/wp[...] 2012-11-05
[40] 웹사이트 OpenMP at SC12 http://openmp.org/wp[...] 2014-01-14
[41] 웹사이트 OpenACC Group Reports Expanding Support for Accelerator Programming Standard http://www.hpcwire.c[...] 2014-01-14
[42] 웹사이트 OpenACC Version 2.0 Posted for Comment http://www.openacc.o[...] 2014-01-14
[43] 웹사이트 OpenACC 2.0 Spec {{!}} www.openacc.org http://www.openacc.o[...] 2016-03-23
[44] 웹사이트 OpenACC Standards Group Announces Release of the 2.5 Specification; Member Vendors Add Support for ARM & x86 as Parallel Devices {{!}} www.openacc.org http://www.openacc.o[...] 2016-03-22
[45] 웹사이트 What’s new in OpenACC 2.6? {{!}} OpenACC https://www.openacc.[...] 2018-05-01
[46] 웹사이트 What’s new in OpenACC 2.7! {{!}} OpenACC https://www.openacc.[...] 2019-01-07
[47] 웹사이트 Cray’s views on #OpenACC vs #OpenMP https://twitter.com/[...] 2019-05-14
[48] 웹사이트 OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators http://www.xbitlabs.[...] 2014-01-14
[49] 웹사이트 OpenUH Compiler http://web.cs.uh.edu[...] 2014-03-04
[50] 웹사이트 OpenARC Compiler http://ft.ornl.gov/r[...] 2014-11-04
[51] 웹사이트 accULL The OpenACC research implementation http://accull.wordpr[...] 2014-01-14
[52] 웹사이트 Omni Compiler https://omni-compile[...] 2019-11-18
[53] 간행물 Omni Compiler for C and Fortran programs with XcalableMP and OpenACC directives: omni-compiler/omni-compiler https://github.com/o[...] omni-compiler 2019-11-17
[54] 웹사이트 IPMACC Compiler https://www.github.c[...] 2017-01-31
[55] 웹사이트 OpenACC Still Not Loved By Open Compilers https://www.phoronix[...] 2012-12-04
[56] 웹사이트 GCC Support Published For OpenACC On The GPU https://www.phoronix[...] 2013-09-30
[57] 웹사이트 OpenACC 2.0 With GPU Support Coming To GCC https://www.phoronix[...] 2013-11-14
[58] 웹사이트 NVIDIA, Mentor Graphics May Harm GCC https://www.phoronix[...] 2013-11-15
[59] 웹사이트 In-Fighting Continues Over OpenACC In GCC https://www.phoronix[...] 2013-11-21
[60] 문서 https://gcc.gnu.org/wiki/OpenACC
[61] 웹사이트 Merge current set of OpenACC changes from gomp-4_0-branch https://gcc.gnu.org/[...] 2015-01-15
[62] 웹사이트 GCC 9.1 Released https://lwn.net/ml/g[...] 2019-05-03
[63] 웹사이트 Easy GPU Parallelism with OpenACC http://www.drdobbs.c[...] 2014-01-14
[64] 웹사이트 OpenACC API QuickReference Card, version 1.0 http://www.nvidia.co[...] 2014-01-14
[65] 웹사이트 OpenACC standard version 2.0 http://www.openacc.o[...] 2014-01-14
[66] 웹사이트 OpenACC Kernels and Parallel Constructs http://www.pgroup.co[...] 2014-01-14
[67] 웹사이트 OpenACC parallel section VS kernels http://kb.caps-entre[...] 2014-01-14
[68] 웹인용 Nvidia, Cray, PGI, and CAPS launch ‘OpenACC’ programming standard for parallel computing http://www.theinquir[...] 2020-03-04
[69] 웹인용 OpenACC standard version 2.5 https://www.openacc.[...] 2017-06-02



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com