안녕하세요 Steve-Lee입니다. cs231n을 공부하던 중 NVIDIA CUDA에 대한 질문이 나와 정리해보려고 합니다. NVIDIA Bog와 Google 검색을 참고하여 정리합니다.
CUDA란 무엇인가?
NVIDIA blog에 의하면 우리는 삶의 곳곳에서 GPU의 이점을 누린다고 합니다.
가령 Mobile Application의 경우 클라우드에서 서버를 실행하는 GPU에 의존합니다. Web site의 경우 광고를 더 정확하게 위치시키기 위해 GPU를 사용합니다. 상점들은 소매(retail)를 분석하고 웹 데이터를 분석하는데 GPU를 사용합니다. 엔지니어의 경우 computer-aided engineering을 위해 GPU를 사용합니다. 이러한 사례들은 GPU 가속 컴퓨팅의 사례이며 적용범위는 점점 확산된다고 합니다.
그래서 CUDA는 무엇인가요?
대부분의 사람들이 CUDA를 언어 또는 API라고 생각하는데 CUDA는 둘 다 아니라고 합니다. 그 이상이라네요!
NVIDIA CUDA
CUDA에 대한 설명을 NVIDIA 블로그에서 인용해왔습니다.
"CUDA is a parallel comoputing platform and programming model that makes using a GPU for general purpose computing simple and elegant."
"The developer stil programs in the familiar C, C++, Fortran, or an ever expanding list of supported languages and incorporates extensions of these languages in the form of a few basic keywords."
CUDA는 범용 컴퓨팅을 위해 GPU를 간단하고 우아하게 사용하는 병렬 컴퓨팅 플랫폼 및 프로그래밍 모델입니다.
개발자는 여전히 친숙한 C, C ++, Fortran 또는 계속 확장되는 지원되는 언어 목록을 프로그래밍하고 몇 가지 기본 키워드의 형태로 이러한 언어의 확장을 통합합니다. 이 키워드를 통해 개발자는 대량의 병렬 처리를 표현하고 GPU를 매핑하는 응용 프로그램 부분으로 컴파일러를 보낼 수 있습니다.
이렇게 이해하면 조금 와 닿지 않는 것 같습니다. 다음의 예제를 통해 한 번 알아보도록 하겠습니다.
CUDA Example
간단한 코드 예제가 나와 있습니다. 먼저 일반 "C"로 작성된 후 "CUDA 확장명을 가진 C로 작성됩니다.
이처럼 프로그래밍 언어로 작성된 프로그램을 CUDA extension을 통해 GPU 연산이 가능하게 만드는 컴퓨팅 플랫폼이자 프로그래밍 모델로 이해하면 좋을 것 같습니다.
정리
CUDA = GPU 병렬 처리를 효과적으로 만들어준다
"CUDA enables developers to speed up compute-intensive applications by harnessing the power of GPUs for the parallelizable part of the computation"
CUDA를 통해 개발자들은 GPU의 성능을 활용하여 연산의 병렬 처리를 효과적으로 할 수 있게 됩니다. 즉 컴퓨팅 집약적인 응용 프로그램의 속도를 높일 수 있게 됩니다.
지금 단계에서는 'CUDA를 통해 GPU의 성능을 활용한 효율적인 병렬 처리가 가능하다' 정도로 이해하시면 충분할 것으로 생각됩니다. 앞으로 Deep Learning을 공부하면서 CUDA라는 용어가 등장하면 아~ 이런 거구나 정도는 이해할 수 있을 것 같습니다. 더 깊은 내용은 필요할 때마다 채워나가도록 하겠습니다.
오늘 배운 내용은 [모두를 위한 cs231n] Lecture 8 - Part1을 공부하는 데 있어서 도움이 될 거라 생각합니다. 이상 Steve-Lee였습니다. 읽어주셔서 감사합니다.
출처:
- NVIDIA Blog - What is CUDA?
- Googling- Infoworld - What is CUDA?
'Deep Learning > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
[정리노트] AutoEncoder의 모든것 Chap1. Deep Neural Network의 학습 방법에 대해 알아보자(딥러닝 학습방법) (7) | 2020.07.11 |
---|---|
[Deep Learning] Bottleneck 현상이란 무엇인가? (0) | 2020.05.08 |
파이토치(PyTorch)-3.Neural Network 구현하기 (0) | 2020.02.21 |
PyTorch를 공부하며 기록하는 모든것 (0) | 2020.02.19 |
파이토치(PyTorch)-2. Autograd패키지 (2) | 2020.02.19 |
댓글