이미 소장하고 있다면 판매해 보세요.
|
|
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〈T, N〉 3.2 accelerator와 accelerator_view 클래스 3.3 index〈N〉 3.4 extent〈N〉 3.5 array_view〈T, N〉 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〈N1, N2, N3〉 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〈T, N〉 __11.1.4 writeonly_texture_view〈T, N〉 __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 참고 자료 |
|
애플리케이션의 실행 속도가 몇 배 더 빨라진다고 해서 라이브러리 코드 한 줄 대신 직접 180줄의 코드를 작성할 프로그래머가 있을까요? 만약 있다면 이 책은 애플리케이션 처리 속도에 목을 매는 그런 개발자를 위한 책입니다. 마이크로소프트는 CUDA나 OpenCL과 달리 C++ 언어로만 모든 것을 표현할 수 있는 C++ AMP 라이브러리를 개발했습니다. GPU의 성능을 이용해 애플리케이션의 속도를 올리려는 개발자는 이제 더욱 쉽고 자연스럽게 GPU를 이용할 수 있게 되었습니다.
GPU는 얼마나 빠를까요? 흔히들 GPU는 일반 CPU보다 100배 이상 빠르다고 합니다. 그러나 GPU는 단순 연산을 무수하게 반복하는 알고리즘에 적합한 아키텍처를 갖고 있어서 범용 CPU와 직접 비교하기는 어렵습니다. 그런데 2010년 인텔은 기존에 있던 미신 같은 믿음을 깨려고 다음과 같은 논문을 발표했습니다. 「Debunking the 100X GPU vs. CPU myth: an evaluation of throughput computing on CPU and GPU」(http://dl.acm.org/citation.cfm?id=1816021). 기존에 사람들이 생각하는 것과 달리 GPU는 운영체제 커널을 실행하는 데 CPU보다 단지 16배밖에 빠르지 않다는 내용입니다. 현재 대부분의 PC뿐만 아니라 스마트 폰에도 강력한 GPU가 들어갑니다. 이런 막강한 장치의 처리 능력을 애플리케이션에서 사용하려는 시도는 기존에 CUDA, OpenCL로 진행됐으나, 새로운 언어를 배워야 하거나 특정 제조사의 하드웨어에 국한되어 사용할 수 있다는 제한이 있었습니다. C++ AMP는 이런 제한을 극복하고자 윈도 개발자에게 익숙한 비주얼 스튜디오에서 C++ 라이브러리를 이용해 기존의 CPU 개발 환경과 거의 동일하게 GPU의 능력을 활용할 수 있는 표준을 만들었습니다. 그러나 아직 GPU는 CPU와 달리 하드웨어를 전혀 모르고도 자유롭게 애플리케이션 프로그래밍하듯이 개발할 수는 없습니다. 이 책은 이런 하드웨어 제약 안에서 C++ AMP를 통해 애플리케이션 성능을 극대화하는 방법에 대해 세부적인 기술 및 방법론을 설명합니다. 또한, 예제를 개선해가면서 GPU가 제공하는 하드웨어 스레드, 워프, 타일, 텍스처, 프로그래머블 캐시에 대한 사용법을 하나하나 자세히 전달합니다. 애플리케이션의 성능 향상에 미래가 걸린 개발자에게 이 책이 친절하고도 충실한 도우미가 될 것이라고 생각합니다. 옮긴이_ 강권학 ---「옮긴이 서문」 |
|
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 플랫폼과 상호 연동 예제 코드: http://ampbook.codeplex.com http://www.hanb.co.kr/exam/2025 |