C++ AMP : Visual C++와 GPGPU를 이용한 대규모 병렬 프로그래밍
C++ 개발자가 그래픽 처리 장치(GPU)와 대규모 병렬 처리 하드웨어를 이용하면 애플리케이션 처리 성능을 극대화할 수 있다. C++ 전문가 케이트 그레고리와 에이드 밀러가 C++ AMP를 사용해 GPU 프로그래밍을 설명하고, 이를 활용하는 방법을 설명한다. GPU 프로그래밍을 위한 CUDA나 OpenCL 등의 기술과 달리 C++ AMP는 C++ 표준 위원회 멤버인 허브 서터가 주축이 되어 C++ STL과 함께 쓸 수 있는 범용적인 구조로
- 저자 : 케이트 그레고리 , 에이드 밀러
- 번역 : 강권학
- 출간 : 2013-07-16
C++ AMP - Visual C++와 ( 사실은 <과> 가 맞는 표현인 듯 싶지만 ) GPGPU를 이용한 대규모 병렬 프로그래밍을 읽어보았다.
기본적인 내용은 기존에 CPU를 중심으로 사용하던 코딩 방식에서 어느정도 GPU를 이용한 병렬 방식의 계산 노하우를 이용하면 비용 및 시간적인 절약을 도모할 수 있다는 내용이다.
이를 책에서 간단하게 표현한 내용은 "병렬 처리를 통한 성능 개선 여지"이며 이 책의 요지를 가장 간단하게 표현한 문구라고 볼 수 있다.
즉, 성능을 개선할지 말지는 사용자의 여건 및 능력에 달려있으며, 책에서는 단지 제시할 뿐이라는 것이다.
물론 책에서 표현하는 내용 중에는 기존의 CPU를 사용한 병렬 처리 기술, 성능 향상, 다른 추가적인 기법들도 소개하고는 있지만 주력적인 내용은 GPGPU를 이용한 "대규모 병렬 프로그래밍"인 것이다.
이 책에 나오는 병렬 처리 방식을 사용하기 위해서는 약간의 준비가 필요한데, 사용자의 환경이 이 방식을 사용할 수 있는 여건이 되는지, 기존의 코드에서 수정하려 한다면 적합한 방법으로 바꿀 수 있는지 사전 조사가 필요하다.
C++ AMP를 사용하려는 장점은 C++ AMP를 사용하면 C++ 개발자로서는 익숙한 도구를 그대로 사용할 수 있으며 이식성이 뛰어나 향후에도 코드를 수정할 필요가 없다는 것이다. 그 외의 단점이라면 아무래도 GPU를 사용하다보니 하드웨어적 측면에서의 효율이 차이가 난다는 것과, 코드 상에서 직관적인 코드보다는 효율성을 따지기에 아무래도 가독성이 떨어진다는 것이다.
또한, 코드 이식 중에 이 책에서 나오는 여러 채택 방식 중 하나를 사용하여 실수를 하게 될 경우에는 오류가 발생할 수 도 있다.
그렇기에 책에서는 항상 이러한 내용에 대해 주의를 기울일 것을 자주 표현한다.
본인의 컴퓨터에서 테스트 시에는 Geforce 530 GT 환경에서 테스트해보았고, CPU 멀티코어 방식과 비교해 AMP를 사용한 방식에서 속도 및 표현 효율이 상당히 차이나는 것을 느끼게 되었다.
해봐야 얼마나 차이 나겠어. 라고 생각하고 실제로 돌려보았을 때 최대치 입자를 설정하면 그 차이가 매우 명확히 나타난다.
구성 방식면에서는 예제를 먼저 개괄하고 기초 ~ 중간 과정 ~ 결과를 보였는데, 차라리 기초적인 개념을 먼저 설명 후에 예제를 소개하는 편이 좋았을 듯 싶다. 그 이유는 기초적인 개념이라도 다소 생소한데, 중간중간에 들어 있어 자주 뒤적였기 때문이다.
아쉬운 점은 이 책을 활용하여 실제로 현업에서 사용할 수 있는 방식은 어떤 것이 있는지가 결여되어 있다는 점이다.
이 코드 방식을 사용하기 위해서는 기존의 코드를 수정하여 사용하기에는 무리가 따르고, 새롭게 설계하는 프로젝트에 적합하다.
게다가 이 프로젝트는 반드시 "대량 데이터의 병렬 처리 방식"에 대한 효율을 제고할 필요가 있는 프로젝트여야 한다.
그렇지 않으면 기존의 방식에서 이 AMP 방식을 채택할 필요가 없다고 본다.
그러므로 대량의 데이터를 사용하는 회계, 증권, GIS 프로그래밍이나, 3D 엔진, 3D 물리 가속엔진 등에서 채택하여 사용할 수 있다고 본다.
NBody 예제를 통해서 그러한 의미를 알아낼 수 있다.
이 C++ AMP 방식이 나아가기 위해서는 이 책에 나와 있는 네임 스페이스의 영역 혹은 라이브러리가 확대되어, 그 고유 내부 구조 안에서 사용할 수 있는 가능성이 확대될 필요가 있다고 본다.
C++ STL이 널리 쓰이는 이유는 사용자가 필요한 많은 범위의 라이브러리를 별 다른 처리 없이 안정적으로 내포하기 때문이다. 그렇지 않고서는 효율성보다는 다소 안정성 쪽을 선택하는 프로그래머가 아무래도 많을 듯 싶다.
결과적으로 보자면, 이 책은 사용자에게 이러이러한 효과가 있고 이러한데 제고해보세요 라는 류의 책으로 볼 수 있다.
사용하고 채택하는 건 사용자의 몫이다.
이 책 내용을 읽어보면 분명 기존 프로젝트나 신규 프로젝트의 효율성을 상승시키는데 도움이 될 수 있고, 나름 신기술이다.
컴파일러, CPU 최적화, 알고리즘의 수정, 캐싱 등등의 효율성에서 나아가 좀 더 액티브한 속도 처리를 위해서 새로운 방식을 고안한다면 이 책을 권해보고 싶다.
대상 독자 추천
1) 대규모 병렬 데이터 처리 관련 업무
2) c++ 11의 람다와 stl의 기본정도
3) 약간의 수학, 알고리즘의 이해도
** 이 책의 예제는 소스 저장소에 묶여서 배포된것 같습니다. 해당 속성 제거 부탁드립니다.
한빛미디어 트랙백 : http://www.hanb.co.kr/trackback/978-89-6848-025-6