CUDA 기반 GPU 병렬 처리 프로그래밍 pdf 다운로드를 무료로 제공합니다 옥타 코어 CPU의 사용도 놀랍지 않은 시대에 GPGPU는 CPU의 연산을 GPU가 담당하게 하여 더 빠르게 더 많은 양의 데이터를 처리할 수 있도록 합니다
관련 교재 pdf 모음
책 소개
이제 싱글 스레드 기반의 프로그래밍만 학습한다면 좋은 모델이나 기술을 여러 방면으로 뻗어 활용하기 어렵습니다. 이때 GPGPU는 고사양 게임 개발, 인공지능, 빅데이터 분석, 데이터 마이닝 등의 산업에서 혁신적으로 활용될 수 있습니다. 『CUDA 기반 병렬 처리 프로그래밍』을 통해 GPGPU와 병렬 프로세서에 관한 다양한 용어와 사전적 의미, 컴퓨터 구조에서의 동작 방식부터 이를 활용한 연산 속도 향상법까지 병렬 처리에 관한 모든 것을 완벽하게 익혀봅시다.
CUDA 기반 GPU 병렬 처리 프로
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 이종 병렬 컴퓨팅