2022. 12. 1. 13:20ㆍCUDA
CUDA API 아키텍처
CUDA API는 3가지 그룹으로 이루어진다.
- CUDA Driver API
- CUDA Runtime API
- CUDA Libraries
CUDA API의 세 그룹은 서로 통신을 하면서 GPU를 제어하여 CUDA 프로그램을 동작시킨다. CUDA API가 다루는 분야는 다음과 같다.
- 디바이스 관리
- 문맥 관리
- 메모리 관리
- 코드 모듈 관리
- 실행 제어
- 텍스처 관리
- OpenGL과 Direct3D 상호 운용
CUDA 드라이버 API
CUDA 드라이버 API는 가장 낮은 수준에 있는 API로, GPU를 직접 제어한다. 드라이버 API로 프로그램을 구현하면 더 많은 함수 호출과 관리가 필요하다. 드라이버 API는 디바이스를 제어하는 가장 낮은 수준의 명령어이기 때문에 가장 빠르게 OpenGL이나 Direct3D의 자원을 사용할 수 있고, 프로그래머가 원하는 방향으로 자세하고 유연하게 구현할 수 있다. 이 때문에 그래픽 처리에 장점을 가지고 있지만 주의할 점은 CUDA 드라이버 API와 CUDA Runtime API는 서로 배타적이기 때문에 동시에 사용하면 안된다는 것이다.
CUDA Runtime API 실행시간 API
CUDA Runtime API는 GPGPU를 목적으로 제공되며 드라이버 API의 상위 레벨에 있다. 이것은 단순하게 드라이버 API와 비교하여 상대적으로 상위 레벨에 있다는 것을 말하며 CUDA Runtime API가 많이 추상화 되어 있는 것은 아니다. 때문에 CUDA Runtime API도 GPGPU를 목적으로 한다면 만족할 만한 수준의 성능을 발휘한다.
CUDA 드라이버 API의 복잡한 관리를 줄여주고 적은 학습으로 쉽게 사용할 수 있어 실용적이다. CUDA Runtime API는 다시 두가지로 구분할 수 있다.
- C 형식의 하위 레벨 함수 (cuda_runtime_api.h)
- C++ 형식의 상위 레벨 함수(cuda_runtime.h)
CUDA 라이브러리
CUDA 라이브러리는 CUDA Runtime API를 이용하여 특정 계산을 편리하게 할 수 있도록 제공한다.
- CUBLAS : 선형대수학 계산을 위한 라이브러리
- CUFFT : 고속 푸리에 변환을 처리할 수 있는 라이브러리
- 수학 함수 : 기본적인 수학 함수들의 집합
CUDA Driver API와 Runtime API 비교
Driver API 함수는 일반 C/C++ 언어에 Driver API 라이브러리를 사용한다. 따라서 컴파일도 일반 C/C++ 컴파일러를 사용할 수 있다. 윈도우 환경에서는 Visual Studio에서 사용하는 컴파일러를 이용하면 된다.
이에 비해 CUDA Runtime API는 C/C++과 유사하지만 약간의 차이가 있는 CUDA C 를 사용한다. 컴파일도 전용 컴파일러인 NVCC를 사용해야 한다. CUDA Driver API를 사용할 때 CUBLAS와 CUFFT와 같은 라이브러리는 사용할 수 없지만 Runtime API를 사용할 때는 라이브러리 지원을 받을 수 있다.
'CUDA' 카테고리의 다른 글
Stream (0) | 2022.12.09 |
---|---|
성능 측정 (0) | 2022.12.07 |
메모리 아키텍처 (0) | 2022.11.22 |
스레드 스케줄링 Thread Scheduling (0) | 2022.11.22 |
스레드 블록 아키텍처 Thread Block Architecture (0) | 2022.11.16 |