CUDA에서는 CPU를 호스트, GPU는 디바이스라고 부른다.
그리고 호스트 코드는 CPU에서 수행될 코드를 의미하고, 디바이스 코드는 CUDA가 가능한 그래픽 칩셋에서 수행될 코드를 의미한다.
__global__ : 커널(Kernel) 함수임을 컴파일러에게 명시
__device__ : 디바이스(GPU)에서만 사용하는 함수라고 명시 (생략이 가능함)
__host__ : 호스트(CPU)에서 실행되는 함수라고 명시
커널(Kernel) 함수 : 디바이스에서 실행되는 함수이며, 호스트에서만 호출 됨
<<<A,B>>> : CUDA 런타임 시스템에 넘겨질 매개변수
아래 예제는 단순하게 A + B = C 예제이다.
cudaMalloc() : 디바이스 메모리(전역 메모리)를 할당
cudaMemcpy() : 호스트와 디바이스간의 메모리 복사
- cudaMemcpyDeviceToHost
- cudaMemcpyHostToDevice
- cudaMemcpyDeviceToDevice
cudaFree() : 디바이스 메모리 해제
* cudaMalloc()으로 할당한 메모리 포인터를 커널로 전달할 수 있다.
* 커널에서 cudaMalloc()으로 할당한 메모리 포인터를 이용하여 메모리를 읽거나 쓸 수 있다.
* cudaMalloc()으로 할당한 메모리 포인터를 호스트 함수로 전달할 수 있다.
* 호스트 함수에서 cudaMalloc()으로 할당한 메모리 포인터를 읽거나 쓸 수 없다.
'Parallel Programming > CUDA' 카테고리의 다른 글
CUDA - 스레드 동기화 (0) | 2015.12.11 |
---|---|
CUDA - 메모리의 계층 구조 (0) | 2015.12.10 |
CUDA - 병렬 프로그래밍(스레드를 이용한 벡터의 합) (0) | 2015.12.10 |
CUDA - 동작 단위 (Thread, Warp, Block, Grid) (0) | 2015.12.08 |
CUDA - 병렬 프로그래밍(블록을 이용한 벡터의 합) (2) | 2015.12.08 |