CUDA 기반 GPU 병렬 처리 프로그래밍: 기초부터 성능 최적화 전략까지
김덕수 지음비제이퍼블릭
( 출판일 : 2023-05-25 )
작성자 :
구○욱
작성일 : 2024-06-13
페이지수 : 312
상태 : 승인
CUDA를 기반으로 GPU병렬처리를 알려주는 책이다.
그러기 위해선 먼저 CUDA, GPU, 병렬처리 개념을 알아야 한다.
먼저 간략하게 소개하면,
CUDA는 GPU병렬처리 개발환경이고,
엔비디아에서 제작하여 엔비디아에서 생산한 GPU중에
CUDA를 지원하는 'CUDA GPU'만 이용할 수 있다.
GPU는 왜 떴을까?
GPU는 Graphic processing units 을 말하며,
기존의 CPU와는 조금 다른 성격을 가지고 있다.
CPU가 범용으로 여러 명령어를 동시에 운영할 수 있다면,
GPU는 칩은 여러개 있지만 분산처리를 위해 존재한다고 볼 수 있다.
즉, 10000개의 칩이 효율적으로 한 가지 작업을 위해 작동한다.
이를 SIMD구조라 한다.
Single Instrucion Multi data
예를 들어서, 대한민국의 인구를 조사하는 일에서
GPU팀 남자 인구 수를 조사하는 역할을 맡았다.
그리고 GPU팀은 분업을 하여
10살, 20살, 30살, 40살, 50살...
각각 조사하고 나중에 전체 인원 수를 합치는 것이다.
혼자서 남자 인구 수를 세는 것보다
훨씬 시간이 단축될 것이다.
그런데 이 자료를 취합하는 과정에서 생각보다 시간이 많이 걸리니
업무분담, 추합관련해서 아이디어가 있다면
이게 곧 GPU병렬처리 알고리즘을 말한다.
그리고 CUDA는
기본이 C/C++언어 기반이다.
Driver API, Runtime API를 가지고 있으며
레벨을 나누어 효율화 작업에 적합한 Driver모듈과
작업용이에 먹적을 둔 Runtime API가 있다.
먼저 CPU가 GPU를 인식하는 방법을 알아야 하는데,
어떻게 보면 GPU는 계산에 특화된 것이지.
계산에 필요한 데이터를 가지고 있는 것은 아니다.
즉, CPU가 GPU에게 데이터를 보내줘야 하고,
GPU는 계산한 데이터를 다시 CPU에게 보내줘야 한다.
그러면 CPU에서 GPU를 위한 메모리를 할당해야 하는데,
메모리할당, 작업분류, 분업체계 자료추합 등을
CUDA에서 지원해준다.
즉, CUDA는 GPU사용을 보다 효율적으로 할 수 있게
도와주는 개발환경이라 볼 수 있다.