나에게 필요한 지식과 기술을 검색해 보세요.

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

지은이

케이트 그레고리, 에이드 밀러

옮긴이

강권학

출간일

2013.07.16

레벨

초중급

평점

4.5(2명)

정가

30,000

판매가

27,000

총 결제 금액

10%

27,000

적립 예정

1,350P

쪽수

404쪽

ISBN

9788968480256

브랜드

한빛미디어

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 플랫폼과 상호 연동

 

저자

목차

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  참고 자료

리뷰

전체 평점

4.5

오탈자

등록된 오탈자가 없어요

오탈자를 발견하셨다면 작성해주세요.

30,000

10%

27,000