CUDA 기반 GPU 병렬 처리 프로그래밍

기초부터 성능 최적화 전략까지
$28.35
SKU
9791165922238
+ Wish
[Free shipping over $100]

Standard Shipping estimated by Fri 05/31 - Thu 06/6 (주문일로부 10-14 영업일)

Express Shipping estimated by Tue 05/28 - Thu 05/30 (주문일로부 7-9 영업일)

* 안내되는 배송 완료 예상일은 유통사/배송사의 상황에 따라 예고 없이 변동될 수 있습니다.
Publication Date 2023/05/23
Pages/Weight/Size 188*245*30mm
ISBN 9791165922238
Categories IT 모바일 > 프로그래밍 언어
Description
GPGPU 기술과 CUDA로 더 많은 데이터를 더 빠르게!

옥타 코어 CPU의 사용도 놀랍지 않은 시대에 GPGPU는 CPU의 연산을 GPU가 담당하게 하여 더 빠르게 더 많은 양의 데이터를 처리할 수 있도록 합니다. 『CUDA 기반 병렬 처리 프로그래밍』은 엔디비아에서 개발한 GPGPU 아키텍처인 CUDA를 기반으로 다양한 방면에서 속도와 효율의 판도를 뒤집는 병렬 처리에 대해 학습합니다. 또한, 비주얼 스튜디오에서의 CUDA 프로그래밍 방법부터 시작해 병렬 처리 코드를 한 줄씩 살펴보며 컴퓨터 구조 내에서는 세부적으로 어떻게 동작하는지 이미지와 함께 구체적으로 간파합니다.
Contents
1장 GPGPU 및 병렬 처리 개요

_1.1 GPGPU와 GPU 프로그래밍
_1.2 병렬 처리의 개념 및 필요성
__1.2.1 병렬 처리의 개념
__1.2.2 병렬 처리의 필요성
__1.2.3 병렬 처리 프로그래밍의 필요성
_1.3 병렬 처리 하드웨어
__1.3.1 플린의 분류법
__1.3.2 공유 메모리 시스템과 분산 메모리 시스템
__1.3.3 GPU는 SIMT 구조
_1.4 CPU와 GPU 비교
__1.4.1 GPU의 탄생 배경 및 발전 방향
__1.4.2 CPU vs. GPU
_1.5 병렬 처리의 성능
__1.5.1 병렬 처리 성능 지표
__1.5.2 암달의 법칙

2장 CUDA 개요

_2.1 CUDA 소개
__2.1.1 드라이버 API와 런타임 API
__2.1.2 CUDA 사용 가능 GPU
__2.1.3 GPU의 성능
__2.1.4 CUDA compute capability
__2.1.5 내 GPU 확인하기
_2.2 CUDA 개발 환경 설정
__2.2.1 CUDA 툴킷 설치
__2.2.2 CUDA 프로그램 작성 및 컴파일 환경
_2.3 Hello CUDA
__2.3.1 호스트와 디바이스
__2.3.2 CUDA 프로그램
__2.3.3 Hello CUDA - 첫 번째 CUDA 프로그램
__2.3.4 CUDA C/C++ 키워드
__2.3.5 커널의 실행과 실행 구성

3장 CUDA 프로그램의 기본 흐름

_3.1 CUDA 프로그램의 구조 및 흐름
_3.2 CUDA 기초 메모리 API
__3.2.1 디바이스 메모리 공간 할당 및 초기화 API
__3.2.2 호스트-디바이스 메모리 데이터 복사 API
_3.3 CUDA로 작성하는 벡터의 합 프로그램
__3.3.1 디바이스 메모리 할당
__3.3.2 입력 벡터 복사(호스트 메모리 → 디바이스 메모리)
__3.3.3 벡터 합 커널 호출
__3.3.4 결과 벡터 복사 (디바이스 메모리 → 호스트 메모리)
__3.3.5 디바이스 메모리 해제
__3.3.6 CUDA 기반 벡터 합 프로그램 전체 코드
_3.4 CUDA 알고리즘의 성능 측정
__3.4.1 커널 수행 시간
__3.4.2 데이터 전송 시간
__3.4.3 CUDA 기반 벡터 합 프로그램의 성능 측정 및 분석

4장 CUDA 스레드 계층

_4.1 CUDA 스레드 계층 구조
__4.1.1 CUDA 스레드 계층
__4.1.2 CUDA 스레드 계층을 위한 내장 변수들
__4.1.3 그리드 및 블록의 최대 크기 제한
_4.2 CUDA 스레드 구조와 커널 호출
__4.2.1 스레드 레이아웃 설정 및 커널 호출
__4.2.2 스레드 레이아웃 설정 및 확인 예제
_4.3 큰 벡터에 대한 벡터 합 CUDA 프로그램 - 스레드 레이아웃

5장 스레드 레이아웃과 인덱싱

_5.1 1,024보다 큰 벡터의 합 구하기
__5.1.1 스레드 레이아웃 결정
__5.1.2 각 스레드가 접근할 데이터의 인덱스 계산
__5.1.3 계산된 인덱스를 반영한 커널 작성
_5.2 스레드 인덱싱
__5.2.1 메모리 속 배열의 모습
__5.2.2 스레드 인덱싱 연습 I - 스레드의 전역 번호
__5.2.3 스레드 인덱싱 연습 II - 2차원 데이터에 대한 인덱싱
_5.3 CUDA 기반 대규모 행렬 합 프로그램
__5.3.1 2차원 그리드, 2차원 블록 레이아웃
__5.3.2 1차원 그리드, 1차원 블록 레이아웃
__5.3.3 2차원 그리드, 1차원 블록 레이아웃

6장 CUDA 실행 모델

_6.1 엔비디아 GPU 아키텍처
__6.1.1 스트리밍 멀티프로세서
__6.1.2 CUDA 코어
_6.2 CUDA 스레드 계층과 GPU 하드웨어
__6.2.1 그리드 → GPU
__6.2.2 스레드 블록 → SM
__6.2.3 워프 & 스레드 → SM 속의 CUDA 코어
__6.2.4 무비용 문맥 교환(zero context switch overhead)
__6.2.5 워프 분기(warp divergence)
_6.3 메모리 접근 대기 시간 숨기기 전략
_6.4 GPU 정보 확인하기

7장 CUDA 기반 행렬 곱셈 프로그램

_7.1 행렬곱셈이란?
_7.2 스레드 레이아웃 설정
__7.2.1 입력 행렬 A, B 기준 스레드 레이아웃
__7.2.2 결과 행렬 C 기준 스레드 레이아웃
_7.3 스레드 인덱싱
__7.3.1 행렬 C의 크기가 블록 최대 크기(1,024)보다 작은 경우
__7.3.2 행렬 C의 크기가 블록의 최대 크기(1,024)보다 큰 경우
_7.4 구현 및 성능 평가
__7.4.1 세부 구현
__7.4.2 성능 평가
__7.4.3 부동소수점 연산 정밀도 문제

8장 CUDA 메모리 계층

_8.1 컴퓨터 시스템의 메모리 계층
_8.2 CUDA 메모리 계층
__8.2.1 스레드 수준 메모리
__8.2.2 블록 수준 메모리
__8.2.3 그리드 수준 메모리
__8.2.4 GPU 캐시
__8.2.5 CUDA 메모리 요약
_8.3 CUDA 메모리 모델과 성능
__8.3.1 병렬성 최대화
__8.3.2 활성 워프 비율

9장 CUDA 공유 메모리

_9.1 공유 메모리 사용 방법
__9.1.1 스레드 블록 내 스레드들의 공유 데이터 보관
__9.1.2 L1 캐시(HW 관리 캐시)
__9.1.3 사용자 관리 캐시
_9.2 공유 메모리 사용 예제 - 1,024보다 작은 행렬의 곱셈

10장 공유 메모리를 활용한 행렬 곱셈 프로그램

_10.1 문제 정의 및 기반 코드
_10.2 알고리즘 설계 및 구현
__10.2.1 전략 1: 행렬 A의 일부 행과 행렬 B의 일부 열을 공유 메모리에 적재
__10.2.2 전략 2: 행과 열을 블록 단위로 분할하여 공유 메모리에 적재
_10.3 성능 평가

11장 메모리 접근 성능 최적화

_11.1 전역 메모리 접근 최적화
__11.1.1 정렬된 메모리 접근과 병합된 메모리 접근
__11.1.2 예제: 행렬 곱 커널의 스레드 레이아웃
__11.1.3 구조체의 배열 vs. 배열의 구조체
_11.2 공유 메모리 접근 최적화
__11.2.1 메모리 뱅크와 뱅크 충돌
__11.2.2 예제: 공유 메모리 활용 행렬 곱 커널

12장 동기화 및 동시 실행

_12.1 동기화
__12.1.1 CUDA의 동기화
_12.2 CUDA 스트림과 동시 실행
__12.2.1 CUDA 스트림의 정의 및 특성
__12.2.2 CUDA 명령의 동시 실행
__12.2.3 예제: 데이터 전송 부하 숨기기
__12.2.4 스트림 동기화
_12.3 CUDA 이벤트
__12.3.1 CUDA 이벤트 API
__12.3.2 CUDA 이벤트를 이용한 커널 및 스트림별 수행 시간 측정
_12.4 다중 GPU 및 이종 병렬 컴퓨팅
__12.4.1 다중 GPU 사용
__12.4.2 이종 병렬 컴퓨팅
Author
김덕수
- 한국기술교육대학교 컴퓨터공학과 교수, 2018~현재
멀티코어프로그래밍 과목: K-INNOVATION 특수과목(F/L)의 우수 교과목으로 선정, 2021
- 한국과학기술정보원구원(KISTI) 슈퍼컴퓨팅 센터 선임연구원, 2014~2018
- KAIST 전산학 박사, 2014

- CUDA 코딩 콘테스트 자유주제 부문(주최: NVIDIA 코리아) 대상, 2010
- CUDA 코딩 콘테스트 자유주제 부문(주최: NVIDIA 코리아) 2위, 2015
- 한국기술교육대학교 최우수교육상(Best Teaching Award), 2021
- 한국기술교육대학교 컴퓨터공학과 교수, 2018~현재
멀티코어프로그래밍 과목: K-INNOVATION 특수과목(F/L)의 우수 교과목으로 선정, 2021
- 한국과학기술정보원구원(KISTI) 슈퍼컴퓨팅 센터 선임연구원, 2014~2018
- KAIST 전산학 박사, 2014

- CUDA 코딩 콘테스트 자유주제 부문(주최: NVIDIA 코리아) 대상, 2010
- CUDA 코딩 콘테스트 자유주제 부문(주최: NVIDIA 코리아) 2위, 2015
- 한국기술교육대학교 최우수교육상(Best Teaching Award), 2021