CUDA는 두가지 API를 제공하며, 하나의 프로그램에서 병행사용도 가능하다. driver API는 runtime API 대비 더 low-level에서의 제어 기능을 제공한다. Driver API의 장단점은 아래와 같다.
하지만, runtime API에서도 대부분의 기능을 지원하고 사용이 간단하므로 이후 내용은 runtime API로 진행한다.
CUDA 및 GPU 프로그래밍 관련 문서와 자료에 등장하는 호스트(host)와 디바이스(device)는 일반적으로 각각 CPU, GPU를 의미한다.
일반적으로 GPU에서 실행되는 최초의 디바이스 코드(커널)는 호스트 코드에서 호출되어야 하기 때문에 호스트 코드가 함께 있어야 한다. gcc또는 C언어 컴파일러로, 디바이스 코드는 nvcc 컴파일러로 컴파일 된다.
예제 코드.
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <studio.h>
__global__ void helloCUDA(void) // CUDA C/C++ 키워드 단락 참고
{
printf("Hello CUDA from GPU!\\n")
}
int main(void)
{
printf("Hello GPU from CPU!\\n");
helloCUDA<<<1, 10>>>(); // 커널의 실행과 실행 구성 단락 참고
return 0;
}