상위 질문
타임라인
채팅
관점
C++ AMP
위키백과, 무료 백과사전
Remove ads
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를 필요로 한다.[1] C++ AMP는 개방형 사양이므로 시간이 지남에 따라 마이크로소프트 외부에서도 구현이 등장할 것이다. 이러한 초기 사례 중 하나는 클랭–LLVM 및 오픈 컴퓨팅 언어(OpenCL)에서 C++ AMP를 인텔의 실험적 구현인 Shevlin Park이다.[2]
2013년 11월 12일, HSA 재단은 현재 C++ AMP 사양을 지원하는 OpenCL, Standard Portable Intermediate Representation (SPIR) 및 HSA Intermediate Language (HSAIL)로 출력하는 C++ AMP 컴파일러를 발표했다.[3] 소스 코드는 https://github.com/RadeonOpenCompute/hcc에서 사용할 수 있다. C++ AMP 지원은 구식으로 간주되며, 현재 ROCm 1.9 시리즈가 이를 지원하는 마지막 버전이 될 것이다.[4]
C++ 클래스를 사용하여 병렬 및 이기종 프로그래밍 기능을 표현하는 것과 같은 C++AMP의 기본 개념은 SYCL 표준에 영감을 주었다.
Remove ads
기능
마이크로소프트는 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
는 병렬 루프를 작성할 수 있도록 한다.
Remove ads
같이 보기
각주
더 읽어보기
외부 링크
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads