안녕하세요. 오늘 포스팅은 NVIDIA에서 제공되는 CUDA에 대해 알아보겠습니다.
기본적으로 GPU를 이용해 프로세스를 수행하기 위해 필요한 데이터를 GPU공간에 할당해주어야 합니다. 많은 분들이 개발하시면서 CUDA를 도입하시는 이유는 CPU에서도 수행 가능하지만 성능 개선을 위해서 도입하실 것으로 생각됩니다. 즉, Host(CPU)데이터를 Device(GPU)로 데이터를 옮긴 후 처리가 가능합니다.
쿠다를 이용하기 위해서는 기본적인 처리 흐름은 그림과 같습니다.
1. 메인 메모리의 데이터를 GPU 메모리로 복사합니다.
-> GPU 메모리 복사를 위해서는 GPU메모리 할당 + 메모리 복사가 수행되어야 합니다.
2. CPU에서 GPU를 사용할 수 있도록 프로세서를 실행시킵니다.
-> CUDA의 커널을 호출하여 수행됩니다.(헷갈리신 분들은 커널을 함수라고 생각하셔도 무방합니다.)
-> 커널 호출 과정에서 병렬처리를 위한 그리드, 블록, 스레드를 지정해주어야합니다.
3. GPU에서 병렬로 처리가 수행됩니다.
-> CUDA C언어 작성된 코드에 의해 병렬로 처리됩니다.
-> 병렬로 처리하기 위해서는 데이터 영역의 분할이 필요합니다.(병목현상을 고려해야합니다.)
-> SIMT, SIMD개념을 생각하시면 쉬우실것 같네요(하단에 작성해두겠습니다.)
4. 수행 완료된 데이터를 메인 메모리로 복사합니다.
-> 메인메모리로 복사한 이후 GPU에 할당된 영역의 delete가 필요합니다.
SIMD(Single Instruction Multiple Data) : 하나의 명령어로 여러개의 데이터를 처리하도록 하는 동작
SIMT(Single Instruction Multiple Thread) : 하나의 명령어로 여러개의 스레드가 처리하도록 하는 동작
-> 제가 생각했을때 거의 동일하다고 봐도 무방한것 같습니다. 닭과 달걀의 관계로 보입니다...
'GPGPU > CUDA' 카테고리의 다른 글
CUDA 설치 및 설치 실패 대처 (0) | 2022.02.18 |
---|---|
CUDA Host<->Device cudaHostGetDevicePointer (0) | 2020.10.27 |
CUDA 처리 구조 (0) | 2019.12.31 |
GPU 하드웨어 특징 (0) | 2019.11.11 |
GPGPU란? (0) | 2019.11.08 |