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