상세 컨텐츠

본문 제목

예제로 배우는 CUDA 프로그래밍

전체 출간 도서

by 비제이퍼블릭 2011. 10. 5. 08:20

본문

 


예제로 배우는 CUDA 프로그래밍

: 입문자를 위한 GPGPU 프로그래밍의 기초


저자: 제이슨 샌더스, 에드워드 캔드롯

역자: 박춘언

 

출간예쩡일: 20111026()

정가: 25,000

페이지: 330p

판형: 190 x 245

ISBN: 978-89-94774-06-0 (93560)

원서정보: CUDA BY EXAMPLE: An Introduction to General-Purpose GPU Programming

 

 

책 소개

예제로 배우는 CUDA 프로그래밍: 입문자를 위한 GPGPU 프로그래밍의 기초

 

“이 책은 가속기 기반(accelerator-based)의 컴퓨팅 시스템에서 작업을 수행하는 이들이 읽어야 할 책이다.잭 돈가라(Jack Dongarra), 테네시 대학 오크리지 국립 연구소

 

《예제로 배우는 CUDA 프로그래밍》은 최근 대용량 병렬 가속기들의 프로그래밍 문제에 대한 가장 혁신적이고 강력한 해결책 중 하나를 이용함으로써 소프트웨어 개발에서의 문제의 핵심을 설명한다.

 

이 책은 여러분에게 예제, 프로그램을 구성하는 과정, NVIDIA GPU를 효율적으로 사용하는 통찰력을 제공함으로써 CUDA C 프로그래밍에 대한 소개를 한다. 또한 간단한 예제부터 (로직과 성능을 포함한) 디버깅까지 입문자들을 위한 병렬 컴퓨팅의 개념들을 설명한다. 그뿐만 아니라, 고급 주제 및 많은 어플리케이션들을 이용하고 구축하면서 발생하는 문제들도 다루고 있다. 이 책에서는 프로그래밍 예제들을 통하여 제시한 개념들을 보강한다.

 

CUDA는 병렬 프로그램 개발이 가능하도록 설계된 컴퓨팅 아키텍처다. CUDA 아키텍처는 대규모 소프트웨어 플랫폼에서 프로그래머들이 고성능 어플리케이션을 제작할 때 GPU(그래픽스 프로세서 유닛)의 막강한 성능을 이용할 수 있게 도와준다. 물론 GPU는 오랫동안 그래픽스와 게임 어플리케이션에서 이용 가능하였지만, 지금은 CUDA가 과학, 엔지니어링, 금융을 포함한 다른 분야에서 어플리케이션을 제작하는 프로그래머들에게 GPU의 가치 있는 자원을 제공해준다. 그래픽스 프로그래밍에 대한 지식이 필요 없으며, 단지 조금 확장된 C 언어로 프로그래밍할 수 있는 능력만 있으면 누구나 배울 수 있다.

 

CUDA 소프트웨어 플랫폼 팀의 두 명의 책임이 집필한 예제로 배우는 CUDA 프로그래밍은 새로운 기술을 이용하는 방법을 프로그래머들에게 보여준다. 저자들은 동작하는 예제들을 통해 CUDA 개발에서의 각 부문을 소개한다. 이 책에서는 CUDA 플랫폼 및 아키텍처에 대한 간결한 소개와 CUDA C에 대한 빠른 학습을 가이드하고 난 후, CUDA의 주요 특징들과 관련된 기술들과 그들 간의 균형 있는 사용법에 대해 상세히 설명한다. 여러분은 이 책에서 CUDA C의 확장 문법들과 정말 뛰어난 성능의 CUDA 소프트웨어를 작성하는 방법을 발견할 것이다.

 

이 책에 포함된 주요 주제들

- 병렬 프로그래밍

- 원자

- 스레드 협력

- 스트림

- 상수 메모리와 이벤트

- 다중 GPU 상에서의 CUDA C

- 텍스처 메모리

- 고급 원자

- 그래픽스 상호운용성

- 그 외의 CUDA 자원들

 

여러분이 필요로 하는 모든 CUDA 소프트웨어 툴들은 NVIDIA에서 무료로 다운로드 가능하다.

 

독자 대상

이 책은 가속 기반의 컴퓨팅 시스템을 이용하여 작업을 수행하는 사람들을 대상으로 하고, 컴퓨팅을 깊이있게 살펴보며 직면할 수도 있는 많은 문제들에 대한 해결 방안들을 제시한다. 특히 어플리케이션 개발자, 수치와 관련된 라이브러리 작성자, 병렬 컴퓨팅을 가르치는 선생님 및 학생들에게 유용하다.

 

 

 

저자소개

제이슨 샌더스 (Jason Sanders)

엔비디아 CUDA 플랫폼 그룹의 책임 소프트웨어 엔지니어다. CUDA 시스템 소프트웨어의 초기 배포판을 개발하는 데 도움을 주었으며 헤테로지니어스 컴퓨팅의 산업 표준인 OpenCL 1.0 스펙에도 기여했다. 그는 ATI 테크놀로지, 애플, 노벨에서 근무한 경험이 있다.

 

에드워드 캔드롯 (Edward KAndrot)

NVIDIA CUDA 알고리즘 팀의 책임 소프트웨어 엔지니어다. Adobe, Microsoft, Google Autodesk 사를 포함하여 업계에서 20년 이상 코드를 최적화하고 성능을 향상시키는 데 전념한 경험을 가지고 있다.

 

 

역자소개

박춘언

삼성전자 DMC 연구소 S/W 플랫폼 팀에서 스마트폰 플랫폼 개발 업무에 임하고 있다. 3D 그래픽스, 소프트웨어 아키텍처, 시스템 프로그래밍, 병렬 프로그래밍 등에 관심이 많으나 최근에는 3D 그래픽스, GUI 분야에 전념하고 있으며 각 종 분야의 학습한 내용을 개인 블로그(hermet.pe.kr)에 틈틈이 개제하여 지식을 공유하고 있다. 이번 CUDA 번역이 끝난 시점에는 EFL(Enlightenment Foundation Library) 오픈 소스 개발에 전념하고 있을 것이다.

 

 


목차

1. CUDA인가? 왜 지금인가?

1.1 이번 장의 목표

1.2 병렬 프로세싱의 시대

1.2.1 중앙 처리 장치

1.3 GPU 컴퓨팅의 도래

1.3.1 GPU의 간략한 역사

1.3.2 초창기의 GPU 컴퓨팅

1.4 CUDA

1.4.1 CUDA 아키텍처란 무엇인가?

1.4.2 CUDA 아키텍처의 사용

1.5 CUDA를 이용한 어플리케이션

1.5.1 의학 화상(MEDICAL IMAGE)

1.5.2 컴퓨터를 이용한 유체동역학

1.5.3 환경과학

1.6 요약

 

2. 시작하기

2.1 이번 장의 목표

2.2 개발 환경

2.2.1 CUDA가 가능한 그래픽스 프로세서

2.2.2 NVIDIA 디바이스 드라이버

2.2.3 CUDA 개발 툴킷

2.2.4 표준 C 컴파일러

2.3 요약

 

3. CUDA C에 대한 소개

3.1 이번 장의 목표

3.2 첫 번째 프로그램

3.2.1 Hello, World!

3.2.2 커널 호출

3.2.3 매개변수 전달

3.3 디바이스 정보 질의하기

3.4 디바이스 속성 이용하기

3.5 요약

 

4. CUDA C를 이용한 병렬 프로그래밍

4.1 이번 장의 목표

4.2 CUDA 병렬 프로그래밍

4.2.1 벡터의 합

4.2.2 하나의 재미있는 예제

4.3 요약

 

5. 스레드 협력

5.1 이번 장의 목표

5.2 병렬 블록들을 분할하기

5.2.1 돌아온 벡터 합

5.2.2 스레드를 이용한 GPU 물결

5.3 공유메모리와 동기화

5.3.1 내적

5.3.2 (올바르지 않는) 내적 최적화

5.3.3 공유메모리 비트맵

5.4 요약

 

6. 상수 메모리와 이벤트

6.1 이번 장의 목표

6.2 상수 메모리

6.2.1 광선 추적(RAY TRACING) 소개

6.2.2 GPU의 광선 추적

6.2.3 상수 메모리를 이용한 광선 추적

6.2.4 상수 메모리의 성능

6.3 이벤트를 이용한 성능 측정

6.3.1 광선 추적기 성능 측정

6.4요약

 

7. 텍스처 메모리

7.1 이번 장의 목표

7.2 텍스처 메모리 개요

7.3 열전달 시뮬레이션

7.3.1 단순한 난방 모델

7.3.2 온도 갱신을 위한 계산

7.3.3 애니메이션 효과를 적용한 시뮬레이션

7.3.4 텍스처 메모리 이용

7.3.5 2차원 텍스처 메모리 이용

7.4요약

 

8. 그래픽스 상호운용성

8.1 이번 장의 목표

8.2 그래픽스 상호운용

8.3 그래픽스 상호운용을 이용한 GPU 물결

8.3.1 GPUANIMBITMAP 구조체

8.3.2 돌아온 GPU 물결

8.4 그래픽스 상호운용을 이용한 열전달

8.5 DirectX 상호운용성

8.6 요약

 

9. 원자

9.1 이번 장의 목표

9.2 계산 능력

9.2.1 NVIDIA GPU들의 계산 능력

9.2.2 최소의 계산 능력을 위한 컴파일

9.3 원자적 연산 개요

9.4 히스토그램 계산

9.4.1 CPU 히스토그램 계산

9.4.2 GPU 히스토그램 계산

9.5 요약

 

10. 스트림

10.1 이번 장의 목표

10.2 잠긴 페이지의 호스트 메모리

10.3 CUDA 스트림

10.4 하나의 CUDA 스트림 이용

10.5 다수의 CUDA 스트림 이용

10.6 GPU 작업 스케줄링

10.7 효과적인 다수의 CUDA 스트림 이용

10.8 요약

 

11. 다중 GPU 상의 CUDA C

11.1 이번 장의 목표

11.2 무복사 호스트 메모리

11.2.1 무복사 내적

11.2.2 무복사 성능

11.3 다수의 GPU 이용하기

11.4 이식이 가능한 고정 메모리

11.5 요약

 

12. 최종 카운트다운

12.1 이번 장의 목표

12.2 CUDA

12.2.1 CUDA 툴킷

12.2.2 CUFFT

12.2.3 CUBLAS

12.2.4 NVIDIA GPU Computing SDK

12.2.5 NVIDIA 퍼포먼스 프리미티브스 (NVIDIA PERFORMANCE PRIMITIVES)

12.2.6 CUDA C 디버깅

12.2.7 CUDA 비주얼 프로파일러 (CUDA VISUAL PROFILER)

12.3 문서로된 자료

12.3.1 대규모 병렬 프로세서 프로그래밍: CUDA를 이용한 실용적 접근

12.3.2 CUDA U

12.3.3 NVIDIA 포럼(NVIDIA FORUM)

12.4 코드로된 자료

12.4.1 CUDA 데이터 병렬 기본 요소 라이브러리

12.4.2 CULAtools

12.4.3 랭귀지 래퍼(Language Wrappers)

12.5 요약

 

부록. 고급 원자

A.1 돌아온 내적 예제

A.1.1 원자 잠금

A.1.2 돌아온 내적 예제: 원자적 잠금

A.2 해시 테이블 구현

A.2.1 해시 테이블 개요

A.2.2 CPU 버전의 해시 테이블

A.2.3 멀티 스레드 기반의 해시 테이블

A.2.4 GPU 버전의 해시 테이블

A.2.5 해시 테이블 성능

A.3 요약

 



출판사 리뷰

이 책은 컴퓨터 그래픽 처리 장치(GPU)의 능력을 이용함으로써, 광범위의 어플리케이션들을 위한 고성능 소프트웨어를 작성하는 방법을 보여준다. 원래 GPU는 하나의 모니터 상에서 컴퓨터 그래픽을 렌더링하기 위해 설계되었지만(여전히 이 목적으로 사용되고 있다) 과학, 엔지니어링, 금융 등 다른 분야에서도 동일하게 요구되는 프로그램들 때문에 점점 더 많은 요구를 받고 있다. 우리는 그래픽 분야가 아닌 문제들을 다루는 GPU 프로그램들을 총괄적으로 범용(general-purpose) GPU 프로그램이라고 부른다. 여러분이 이 책으로부터 무언가를 배우기 위해서는 C C++에 대한 일부 경험이 필요하겠지만, 다행히도 컴퓨터 그래픽스에 대한 지식은 전혀 필요하지 않다. 여러분은 단순히 여러분의 기존 프로그래밍 기술에 GPU 프로그래밍 기술을 쌓을 수 있는 하나의 기회만 제공받을 뿐이다.

 

여러분은 범용의 계산 작업들을 수행하는 NVIDIA GPU들을 프로그래밍하기 위해서 CUDA가 무엇인지 알고자 할 것이다. NVIDIA GPU들은 CUDA 아키텍처로 알려진 것을 기반으로 제작되었으며, CUDA 아키텍처는 본래의 그래픽스 렌더링 작업들과 범용의 작업을 수행할 수 있는 GPU를 제작하기 위한 NVIDIA의 의도로 볼 수 있다. CUDA가 가능한 GPU들을 프로그래밍하기 위해서 여러분은 CUDA C라는 언어를 이용할 것이다. 이 책의 도입부에서 보겠지만, CUDA C는 근본적으로 C와 같으며 NVIDIA GPU들과 같은 대용량 병렬 기계들을 프로그래밍 할 수 있게 소수의 확장 문법들을 제공한다.

 

이 책은 C 코드를 무난하게 읽거나 작성할 수 있을 정도로 C C++에 어느 정도 친숙한 프로그래머들을 대상으로 집필되었다. 이 책은 여러분이 C 언어에 어느 정도 경험이 있다는 전제하에 작성되었으며, NVIDIA CUDA C 프로그래밍 언어를 빠르게 학습할 수 있도록 예제 중심으로 기술되었다. 여러분이 큰 규모의 소프트웨어 아키텍처를 다뤄봤거나 C 컴파일러 및 운영체제 커널을 작성해 봤거나 ANSI C 표준을 결코 상세히 알고 있을 필요는 없지만, 이 책에서는 C 문법이나 malloc(), memcpy()와 같은 일반 C 라이브러리 함수들을 살펴보기 위한 시간은 할애하지 않는다. 따라서 우리는 여러분이 이러한 것들에 대해서는 이미 상당히 익숙하다고 가정할 것이다.

 

비록 이 책은 일반 병렬 프로그래밍 패러다임을 다루고 있지 않지만, 여러분은 일반 병렬 프로그래밍 패러다임을 고려해야 하는 일부 기술들과 직면할 것이다. 또한 이 책은 거의 모든 CUDA API들을 살펴보긴 하겠지만 광범위한 API 참고서로서 제공되지는 않을 뿐만 아니라, CUDA C 소프트웨어 개발을 하기 위해 사용할 수 있는 모든 툴에 대해서도 세세하게 다루지는 않을 것이다. 따라서 여러분이 이 책을 NVIDIA에서 무료로 제공하는 문서들, 특히 NVIDIA CUDA Programming Guide NVIDIA CUDA Best Practices Guide를 병행해서 보길 강력히 추천한다. 그렇다고 이러한 문서들을 확보하는 데 스트레스 받을 필요는 없다. 왜냐하면 이 책이 여러분이 해야 할 모든 것들을 알려줄 것이기 때문이다.

 

CUDA C와 함께 NVIDIA GPU 프로그래밍의 세계가 바로 지금 여러분을 기다리고 있다!





관련글 더보기

댓글 영역