이전 문서: CUDA란
구조
CUDA 프로그램은 Host 코드와 Device 코드로 나뉜다. 두 장치는 서로 독립되어 사용하는 메모리 영역도 다르다.
- Host Code
- CPU와 메인보드에 귀속된 DRAM(System Memory, Host Memory 라고도 부른다)
- 거의 모든 데이터는 Host_Memory 에 저장되어있다.
- Device Code
- GPU와 그에 귀속된 메모리(Device Memory 라고도 부른다.)
- 데이터를 사용하려면 DRAM에서 복사해와야한다.
이 두 코드의 구분이 아주 자주 나오니 잘 구분하자.
- 번외) 통합메모리(Unified Memory) CUDA v6.0 이후 부터 Host Memory 와 Device Memory를 하나의 논리적 주소 공간으로 묶은 기술. 이를 이용하면 명시적인 메모리 복사 없이 CUDA 프로그램 작성이 가능하다. 간단하거나 프로토 코드를 작성할 때 유용하나 큰 프로젝트에선 Host <-> Device 간 메모리 교환이 빈번하게 일어나 성능이 떨어진다.
흐름
1. Host -> Device 데이터 복사
GPU 처리를 위해 가장 먼저 할 일은 Host -> Device 데이터 복사이다. 왜냐하면 HDD, SSD, Net 등등 모든 데이터는 우선적으로 Host_Memory에 저장되는데 GPU에서는 바로 해당 메모리 단에 접근이 불가능하기 때문이다.
2. GPU 연산
GPU 연산은 커널 호출을 통해 시작되며 모든 데이터는 Device_Memory에서 관리한다.
3. Device -> Host 데이터 복사
GPU연산 수행 결과 데이터는 1의 반대로 Device 단에서 Host 단으로 복사된다.