Open ACC 란 : directive based standard to allow developers to take advantage of accelerators such as GPUs from NVIDIA and AMD, Intel's Xeon Phi, FPGAs, and even DSP chips.
OpenMP 와 OPenACC 는 통합을 목표로 제작되었으며, syntax 가 매우 유사.
-CUDA 도 GPU 가속화 프로그래밍이 가능하지만, 매우 low level 임. 컴파일러가 해야되는일까지 대신하는 느낌. 또한 18-24개월마다 GPU 가 새로 등장하는데, GPU 마다 code 를 조금씩 바꿔줘야 함. 따라서 CUDA 로 직접 코딩하는 것 보다, CUDA 로 짜여진 라이브러리를 그냥 이용하는게 권장 됨. OpenACC 는 CUDA 로 짜여진 라이브러리를 활용 할 수 있음. (CUDA 의 오픈 소스 버전인 OpenCL 도 마찬가지..)
MPI 를 사용해서 코드 병렬화를 하기 위해서는 전체 코드를 다 이해해야 하고, 상당한 양의 코드를 다시 써야 함
다양한 컴파일러에서 OpenACC 를 지원함. 그 중 PGI 컴파일러 (Nvidia 소유) 는 GPU 코드가 잘 작동하는 것에 초점이 맞추어져 있음. (무료인 PGI 커뮤니티 버전 존재) gcc 는 6.0 이상부터 OpenACC 지원
OpneMP 는 Shared memory 에서 사용을 목표로 하였기 때문에, 데이터 이동 (migration) 기능이 없음. OpenACC 는 PCI 버스를 통해 GPU 로 데이터 이동 가능.
Nvidia GPU 를 사용 할 꺼면 OpenACC, OpenACC 컴파일러 사용이 유리 (Nvidia 는 CUDA, OpenACC 를 지원)
Xeon Phi 를 사용 할 꺼면 OpenMP + 인텔 컴파일러가 유리 (인텔은 OpenMP 를 지원) (두 개 사이를 돌아가면서 하기 위한 편집 tool 도 존재 함)
OpenCL 은 법인 지원을 잃음
https://www.youtube.com/watch?v=I36kb1UBEBA