C++ AMP

C++ AMP(C++ Accelerated Massive Parallelism)는 C++ 프로그래밍 언어와 해당 런타임 라이브러리의 요소를 포함하는 네이티브 프로그래밍 모델이다. 이 모델은 데이터 병렬 하드웨어(예: 그래픽 카드 및 그래픽 처리 장치(GPU))에서 컴파일 및 실행되는 프로그램을 쉽게 작성하는 방법을 제공한다.

비주얼 스튜디오 2022(버전 17.0)부터 C++ AMP는 더 이상 지원되지 않는 것으로 선언되어 비주얼 스튜디오 2022 이후에는 지원이 종료된다.

C++ AMP는 DirectX 11에 구현된 라이브러리이며, C++에서 데이터 병렬 처리를 직접 구현하기 위한 마이크로소프트의 개방형 사양이다. 이는 개발자가 GPU 프로그래밍을 쉽게 할 수 있도록 지원하며, GPU 프로그래밍에 대한 경험이 없는 경우에도 시스템이 최선을 다해 처리하거나, 더 세밀하게 제어할 수 있으면서도 이식성을 유지하도록 의도되었다. 마이크로소프트 구현에서는 GPU에서 실행할 수 없는 코드는 대신 하나 이상의 CPU로 대체되어 SSE 명령어를 사용한다. 마이크로소프트 구현은 디버거 및 프로파일러 지원을 포함하여 비주얼 스튜디오 2012에 포함되어 있다.

마이크로소프트의 초기 C++ AMP 릴리스는 최소 윈도우 7 또는 윈도우 서버 2008 R2를 필요로 한다.C++ AMP One-page summary Broken link C++ AMP는 개방형 사양이므로 시간이 지남에 따라 마이크로소프트 외부에서도 구현이 등장할 것이다. 이러한 초기 사례 중 하나는 클랭–LLVM 및 오픈 컴퓨팅 언어(OpenCL)에서 C++ AMP를 인텔의 실험적 구현인 Shevlin Park이다.Shevlin Park: Implementing C++ AMP with Clang/LLVM and OpenCL

2013년 11월 12일, HSA 재단은 현재 C++ AMP 사양을 지원하는 OpenCL, Standard Portable Intermediate Representation (SPIR) 및 HSA Intermediate Language (HSAIL)로 출력하는 C++ AMP 컴파일러를 발표했다. 소스 코드는 https://github.com/RadeonOpenCompute/hcc에서 사용할 수 있다. C++ AMP 지원은 구식으로 간주되며, 현재 ROCm 1.9 시리즈가 이를 지원하는 마지막 버전이 될 것이다.

C++ 클래스를 사용하여 병렬 및 이기종 프로그래밍 기능을 표현하는 것과 같은 C++AMP의 기본 개념은 SYCL 표준에 영감을 주었다.

기능
마이크로소프트는 C++ AMP 가속기에서 함수가 실행될 수 있음을 선언하기 위해 어떤 함수(람다 포함)에도 적용할 수 있는 restrict(amp) 기능을 추가했다. 컴파일러는 관리 및 별도의 언어를 사용할 필요 없이 자동으로 컴퓨트 커널을 생성한다. restrict 키워드는 컴파일러에게 함수가 대부분의 GPU에서 지원되는 언어 기능만 사용하는지 정적으로 확인하도록 지시한다. 예를 들어, void myFunc() restrict(amp) {…} 와 같이 사용할 수 있다.
마이크로소프트 또는 개방형 C++ AMP 사양의 다른 구현자는 C++ AMP와 관련 없는 목적을 포함하여 다른 목적을 위한 다른 restrict 지정자를 추가할 수 있다.

새로운 언어 기능 외에 C++ AMP의 나머지 기능은 동시성(concurrency) 네임스페이스의 <amp.h> 헤더 파일을 통해 사용할 수 있다. 주요 C++ AMP 클래스는 다음과 같다: array(가속기의 데이터 컨테이너), array_view(데이터 래퍼), index(N차원 점), extent(N차원 크기), accelerator(메모리를 할당하고 실행할 GPU와 같은 계산 리소스), accelerator_view(가속기의 뷰). 전역 함수 parallel_for_each는 병렬 루프를 작성할 수 있도록 한다.

 같이 보기 
 OpenCL
 CUDA
 GPGPU
 OpenACC
 벌컨 (API)
 RaftLib

 각주 

 더 읽어보기 
  326 pages.

 외부 링크 
 C++ AMP: Language and Programming Model, version 1.0: August 2012
 Parallel Programming in Native Code - C++ AMP Team Blog
 https://hsafoundation.com/bringing-camp-beyond-windows-via-clang-llvm/ C++ AMP Support in Clang and LLVM compiler
 https://github.com/RadeonOpenCompute/hcc C++ AMP Support in Clang and LLVM compiler

분류:병렬 컴퓨팅
분류:C++ 라이브러리
분류:GPGPU 라이브러리