메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

C++ AMP : Visual C++와 GPGPU를 이용한 대규모 병렬 프로그래밍

한빛미디어

번역서

절판

  • 저자 : 케이트 그레고리 , 에이드 밀러
  • 번역 : 강권학
  • 출간 : 2013-07-16
  • 페이지 : 404 쪽
  • ISBN : 9788968480256
  • 물류코드 :2025
  • 초급 초중급 중급 중고급 고급
4.5점 (2명)
좋아요 : 24

C++ AMP로 만나는 병렬 프로그래밍의 혁신

 

C++ AMP로 고속 연산과 대규모 병렬 처리를 경험한다
C++ 개발자가 그래픽 처리 장치(GPU)와 대규모 병렬 처리 하드웨어를 이용하면 애플리케이션 처리 성능을 극대화할 수 있다. C++ 전문가 케이트 그레고리와 에이드 밀러가 C++ AMP를 사용해 GPU 프로그래밍을 설명하고, 이를 활용하는 방법을 설명한다.

 

STL과 함께 쓸 수 있는 GPU 기술
GPU 프로그래밍을 위한 CUDA나 OpenCL 등의 기술과 달리 C++ AMP는 C++ 표준 위원회 멤버인 허브 서터가 주축이 되어 C++ STL과 함께 쓸 수 있는 범용적인 구조로 개발되어 있다. 따라서 STL과 함께 쓸 수 있으며, STL에 익숙한 개발자는 쉽게 익힐 수 있는 장점이 있다.

 

[주요 내용]

  • C++와 비주얼 스튜디오 2012로 더 빠른 애플리케이션 제작하기
  • 최상의 속도를 위한 타일 기반 알고리즘 설계
  • 비주얼 스튜디오로 병렬 코드 디버깅하기
  • 성능 측정 도구로 코드의 성능 추적하기
  • DirectX 플랫폼과 상호 연동

 

케이트 그레고리 저자

케이트 그레고리

비주얼 C++ MVP이며 마이크로소프트 지역 책임자다. 2005년과 2010년에 올해의 지역 책임자 상을 수상하고, 올해의 비주얼 C++ MVP로 뽑혔다. 열정적인 강사, 발표자, 저자로 활동 중이며 C++을 20년 넘게 사용해왔다.

에이드 밀러 저자

에이드 밀러

마이크로소프트 스튜디오의 수석 아키텍트다. 병렬 분산 컴퓨팅이 최고의 관심사이며 엔지니어 관점의 리더십을 통해 소프트웨어 개발팀의 개발 방법을 향상시키는 데 관심이 많다.

강권학 역자

강권학

중앙대학교 컴퓨터공학과에서 학사와 석사학위를 받았다. 국방과학연구소, 퓨쳐시스템, 안철수연구소에서 13년간 개발자, 보안전문가, 프로젝트 관리자로 근무하였으며, 2009년 4월 호주 멜번에 iGonagi Pty. Ltd.를 설립하고 아이폰 애플리케이션을 개발하고 있다. 『Head First iPhone Development』, 『Head First Programming』, 『iPhone Programming 제대로 배우기』, 『iPhone 3D Programming: using OpenGL ES』(이상 한빛미디어)를 번역했다.

CHAPTER  1  C++ AMP 접근법 개요
1.1  왜 GPGPU인가? 이기종 컴퓨팅은 무엇인가? 
  1.1.1  성능 개선의 역사 
  1.1.2  이기종 플랫폼 
  1.1.3  GPU 아키텍처 
  1.1.4  병렬 처리를 통한 성능 개선 여지 
1.2  CPU 병렬 처리 기술 
  1.2.1  벡터화 
  1.2.2  OpenMP 
  1.2.3  동시성 런타임과 병렬 패턴 라이브러리 
  1.2.4  태스크 병렬 라이브러리 
  1.2.5  윈도 고급 래스터화 플랫폼 
  1.2.6  GPU 병렬 처리 기술 
  1.2.7  병렬 처리에 성공하기 위한 요건 
1.3  C+ + AMP 접근법 
  1.3.1  GPGPU를 주류가 되게 만든 C+ + AMP 
  1.3.2  C+ + AMP는 C가 아닌 C+ + 
  1.3.3  C+ + AMP는 여러분이 이미 알고 있는 도구 
  1.3.4  C+ + AMP는 거의 대부분 라이브러리 
  1.3.5  C+ + AMP는 먼 훗날까지 그대로 실행될 수 있는 이식성 있는 코드 
1.4  요약 

 

CHAPTER 2 NBody 사례 연구
2.1  예제를 실행하기 위한 준비 
2.2  NBody 예제 실행하기 
2.3  예제 구조 
2.4  CPU 계산 
  2.4.1  데이터 구조 
  2.4.2  wWinMain( ) 함수 
  2.4.3  OnFrameMove( ) 콜백 
  2.4.4  OnD3D11CreateDevice( ) 콜백 
  2.4.5  OnGUIEvent( ) 콜백 
  2.4.6  OnD3D11FrameRenderer( ) 콜백 
2.5  CPU NBody 클래스 
  2.5.1  NBodySimpleInteractionEngine 클래스 
  2.5.2  NBodySimpleSingleCore 클래스 
  2.5.3  NBodySimpleMultiCore 클래스 
  2.5.4  NBodySimpleInteractionEngine::BodyBodyInteraction( ) 
2.6  C+ + AMP 계산 
  2.6.1  데이터 구조 
  2.6.2  CreateTasks( ) 
2.7  C+ + AMP NBody 클래스 
  2.7.1  NBodyAmpSimple::Integrate( ) 
  2.7.2  BodyBodyInteraction( ) 
2.8  요약 

 

CHAPTER  3  C++ AMP 기초
3.1  array  
3.2  accelerator와 accelerator_view 클래스 
3.3  index  
3.4  extent  
3.5  array_view  
3.6  parallel_for_each( ) 
3.7  restrict(amp)로 표시한 함수 
3.8  CPU와 GPU 간의 복사 
3.9  수학 라이브러리 함수 
3.10  요약 

 

CHAPTER  4  타일링
4.1  타일링의 목적과 장점 
4.2  tile_static 메모리 
4.3  tiled_extent 
4.4  tiled_index  
4.5  단순한 알고리즘을 수정해 타일 버전 만들기 
  4.5.1  tile_static 메모리 사용하기 
  4.5.2  타일 배리어와 동기화 
  4.5.3  단순 버전을 타일 버전으로 변경 완료 
4.6  타일 크기의 영향 
4.7  타일 크기 선택 
4.8  요약 

 

CHAPTER  5  타일링한 NBody 사례 연구
5.1  타일링하면 NBody의 성능이 얼마나 향상될까? 
5.2  n-body 알고리즘에 타일 사용 
  5.2.1  NBodyAmpTiled 클래스 
  5.2.2  NBodyAmpTiled::Integrate( ) 
5.3  동시성 시각화 도우미 사용 방법 
5.4  타일 크기 선택 
5.5  요약 

 

CHAPTER  6  디버깅
6.1  첫 단계 
6.2  GPU 디버깅과 GPU 디버깅 중 선택하기 
  6.2.1  참조 가속기 
6.3  GPU 디버깅 기초 
  6.3.1  익숙한 창과 팁 
  6.3.2  디버그 위치 툴바 
  6.3.3  경쟁 조건 탐지하기 
6.4  스레드 보기 
  6.4.1  스레드 마커 
  6.4.2  GPU 스레드 창 
  6.4.3  Parallel Stacks 창 
  6.4.4  Parallel Watch 창 
  6.4.5  스레드 플래깅, 그룹화, 필터링 
6.5  스레드 상세 제어 
  6.5.1  스레드 얼리고 녹이기 
  6.5.2  커서 위치까지 타일 실행하기 
6.6  요약 

 

CHAPTER  7  최적화
7.1  성능 최적화 방법 
7.2  성능 분석 
  7.2.1  커널 성능 측정 
  7.2.2  동시성 시각화 도우미 사용 방법 
  7.2.3  동시성 시각화 도우미 SDK 사용 
7.3  메모리 접근 형태 최적화하기 
  7.3.1  앨리어스와 parallel_for_each( ) 호출 
  7.3.2  GPU와의 효율적인 데이터 복사 
  7.3.3  효과적인 가속기 전역 메모리 접근 
  7.3.4  구조체의 배열과 배열을 내포한 구조체 
  7.3.5  효율적인 타일 static 메모리 접근 
  7.3.6  상수 메모리 
  7.3.7  텍스처 메모리 
  7.3.8  점유율과 레지스터 
7.4  계산 최적화 
  7.4.1  스레드마다 다르게 분기하는 코드 사용하지 않기 
  7.4.2  적절한 정밀도 선택하기 
  7.4.3  수학 연산 고려 사항 
  7.4.4  루프 펼치기 
  7.4.5  배리어 
  7.4.6  큐 모드 
7.5  요약 

 

CHAPTER  8  성능 사례 연구 - 리덕션
8.1  문제 
  8.1.1  작은 주의 사항 
8.2  사례 연구 구조 
  8.2.1  초기화와 작업 부하 
  8.2.2  동시성 시각화 도우미 표식 
  8.2.3  TimeFunc( ) 함수 
  8.2.4  오버헤드 
8.3  CPU 알고리즘 
  8.3.1  순차 알고리즘 
  8.3.2  병렬 알고리즘 
8.4  C+ + AMP 알고리즘 
  8.4.1  단순 알고리즘 
  8.4.2  array_view를 사용한 단순 알고리즘 
  8.4.3  최적화된 단순 알고리즘 
  8.4.4  초보 수준의 타일링 알고리즘 
  8.4.5  공유 메모리로 타일링한 알고리즘 
  8.4.6  타일 안의 스레드를 가능한 동일한 경로로 실행하기 
  8.4.7  뱅크 충돌 제거하기 
  8.4.8  정지하고 있는 스레드 줄이기 
  8.4.9  루프 펼치기 
  8.4.10  연쇄 리덕션 
  8.4.11  루프를 펼친 연쇄 리덕션 
8.5  요약 

 

CHAPTER  9  다중 가속기 사용
9.1  가속기 선택하기 
  9.1.1  가속기 나열 
  9.1.2  기본 가속기 
9.2  다중 GPU 사용 
9.3  가속기 간의 데이터 교환 
9.4  동적 로드 밸런싱 
9.5  브레이드 구조 병렬 처리 
9.6  CPU로 돌아가기 
9.7  요약 

 

CHAPTER  10 Cartoonizer 사례 연구
10.1  실행 준비 
10.2  예제 코드 실행 
10.3  예제 구조 
10.4  파이프라인 
  10.4.1  데이터 구조 
  10.4.2  CartoonizerDlg::OnBnClickedButtonStart( ) 메서드 
  10.4.3  ImagePipeline 클래스 
10.5  파이프라인 만화 효과 단계 
  10.5.1  ImageCartoonizerAgent 클래스 
  10.5.2  IFrameProcessor 구현 
10.6  다중 C+ + AMP 가속기 사용 
  10.6.1  FrameProcessorAmpMulti 클래스 
  10.6.2  분기된 파이프라인 
  10.6.3  ImageCartoonizerAgentParallel 클래스 
10.7  만화 효과 처리기 성능 
10.8  요약 

 

CHAPTER  11 그래픽스 인터롭
11.1  기초 
  11.1.1  norm과 unorm 클래스 
  11.1.2  짧은 벡터형 
  11.1.3  texture  
  11.1.4  writeonly_texture_view  
  11.1.5  텍스처와 배열 비교 
11.2  텍스처와 짧은 벡터 사용 
11.3  HLSL 인트린직 함수 
11.4  DirectX 인터롭 
  11.4.1  가속기 뷰와 Direct3D 장치 인터롭 
  11.4.2  배열과 Direct3D 버퍼 인터롭 
  11.4.3  텍스처와 Direct3D 텍스처 리소스 인터롭 
  11.4.4  그래픽스 인터롭 사용 
11.5  요약 

 

CHAPTER  12 C++ AMP 문제 해결
12.1  타일 크기 불일치 문제 처리 
  12.1.1  타일 패딩하기 
  12.1.2  타일 절단하기 
  12.1.3  방법 비교 
12.2  배열 초기화 
12.3  함수 객체와 람다 비교 
12.4  원자성 연산 
12.5  윈도 8에 추가된 C+ + AMP 기능 
12.6  시간 초과 탐지 및 복구 
  12.6.1  TDR 피하기 
  12.6.2  윈도 8에서 TDR 비활성화하기 
  12.6.3  TDR 탐지하고 복구하기 
12.7  배정밀도 지원 
  12.7.1  배정밀도 부분 지원 
  12.7.2  배정밀도 완전 지원 
12.8  윈도 7에서 디버깅 
  12.8.1  원격 컴퓨터 설정하기 
  12.8.2  프로젝트 설정하기 
  12.8.3  프로젝트 배포하고 디버깅하기 
12.9  추가된 디버깅 함수 
12.10  배포 
  12.10.1  애플리케이션 배포 
  12.10.2  C+ + AMP를 서버에서 실행하기 
12.11  C+ + AMP와 윈도 8 윈도 스토어 앱 
12.12  매니지드 코드에서 C+ + AMP 사용 
  12.12.1  닷넷 애플리케이션, 윈도 7 윈도 스토어 앱, 라이브러리에서 
  12.12.2  C+ + CLR 애플리케이션에서 
  12.12.3  C+ + CLR 프로젝트 안에서 
12.13  요약 

 

부록  A  참고 자료

2013년 07월... 한빛미디어 에서 C++ AMP : Visual C++와 GPGPU를 이용한 대규모 병렬 프로그래밍 를 출간하였습니다.

이 책은 C++ 개발자가 C++ AMP 의 핵심 개념(기초 개념 포함)에서 고급 기능까지 이해할 수 있도록 되어 있습니다. 총 12장으로 구성되어 있으며, C++ AMP 의 기능과 일반적인 알고리즘을 구현한 여러 사례를 통해 병렬 프로그래밍을 할 수 있도록 되어 있습니다.

외국에서도 C++ AMP 를 주제로 한 서적이 없는 편인데, 이번에 한빛미디어를 통해 출간된 번역서는 C++ AMP 를 통해 병렬 프로그래밍에 관심이 있는 개발자들에게 큰 도움이 되리라 생각합니다.

더 자세한 리뷰를 보시려면
http://bydavidchoi.wordpress.com/2013/09/23/%EB%A6%AC%EB%B7%B0-c-amp-visual-c%EC%99%80-gpgpu%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%EB%B3%91%EB%A0%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/

한빛미디어 트랙백 : http://www.hanb.co.kr/trackback/978-89-6848-025-6

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

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
C++ AMP : Visual C++와 GPGPU를 이용한 대규모 병렬 프로그래밍
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
C++ AMP : Visual C++와 GPGPU를 이용한 대규모 병렬 프로그래밍
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
C++ AMP : Visual C++와 GPGPU를 이용한 대규모 병렬 프로그래밍
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실