CUDA는 그래칙 카드를 이용한 GPGPU의 통합 개발 환경 제공을 목적으로 함.
NVIDIA사에서 GPGPU에 대한 흐름을 먼저 인식하고 그래픽 카드를 범용적인 용도로 사용할 때 발생하는 어려움을 해결하기 위한 노력을 시작하였다. 이전의 그래픽 카드는 3D처리를 위해 다양한 기능이 추가되었지만 모두 그래픽 처리를 위한 것으로 범용적인 용도로 쓰이는 것들은 아니었다.
이런 문제를 해결하기 위해 NVIDIA사는 기존의 GeForce 시리즈를 그래픽 전용처리를 위한 구조에서 유연성을 향상시켜 범용적인 프로그램을 처리할 수 있도록 변경하였다. 그리고 GPU를 이용한 범용적인 프로그램을 개발할 수 있도록 '프로그램 모델', '프로그램 언어', '컴파일러', '라이브러리', '디버거', '프로파일러'를 제공하는 통합 환경을 구축하였다.
2006년 11월 NVIDIA사는 다목적 프로그램을 위한 그래픽 카드 GeForce8000시리즈를 출시하였고, 2007년 2월에 통합 개발환경 'CUDA(Compute Unified Device Architecture)'를 발표하였다.
CUDA의 장점
-높은 연산 처리능력
-병렬 프로그램의 확장성
-저렴한 가격
-편리한 설치
CUDA의 연산 능력
- 1TFLOP/s 기준으로 10년전 슈퍼컴퓨터와 동등한 수준, 인텔 i7 CPU를 10개 합쳐야 나오는 성능이다.
병렬 프로그램의 확장성
-잘 설계된 CUDA 프로그램은 GPU의 성능에 비례하여 연산 능력을 발휘한다. 대규모 데이터를 멀티스레드로 실행하여 처리하기 때문에 그래픽 카드가 발전하여 코어 수가 증가하면 자동으로 연산에 필요한 시간이 줄어들게 된다.
저렴한 가격
-같은 성능을 내도록 단순 계산 하여도 인텔 i7 CPU를 장착한 PC 10대를 구성하는 것보다 고성능 그래픽카드 하나를 장착하는 것이 더욱 효율적이다. 또한 CPU만으로는 이런 시스템을 구축할 수 없고 메인보드와 메모리 같은 추가 부품도 필요하지만, 만일 GPU로 더 좋은 성능을 구축할 필요가 있다면 같은 그래픽 카드를 하나 더 장착하면 되는것이다.
*GPGPU(General Purpose Graphics Processing Unit)
-강력해진 GPU의 성능을 그래픽 처리뿐만 아니라 일반적인 데이터를 처리하는 데도 사용하는 것을 의미한다.
3D 그래픽에서 픽셀 좌표계, 렌더링, 비디오 인코딩, 화상 스케일링 같은 처리는 수많은 데이터를 멀티코어 또는 가속기를 이용하여 빠르게 계산한다는 점에서 범용적인 병렬처리와 유사하다. 이런 유사성을 이용하여 강력해진 GPU 성능을 일반적인 신호 처리, 물리 시뮬레이션, 재무 예측, 생물학적 계산 같은 데이터 병렬처리에 이용하고자 하는 것이 GPGPU이다. 하지만, 그래픽을 위한 전용 API함수와 그래픽 카드의 한계 때문에 그래픽 카드를 일반적인 용도로 사용하기에는 무리가 있다.
기존에 제공되고 있던 그래픽 API함수는 그래픽 엔진을 다루는 프로그래머가 주로 사용하던 것으로, 일반적인 프로그래머나 초보자가 사용하기에는 많은 어려움이 있었다. 또 다른 어려움은 GPU의 연산 능력과 비교하면 DRAM 메모리 대역폭의 한계로 병목 현상이 발생하여 유연한 프로그램을 작성할 수 없었다는 점이다.
이러한 한계를 극복하고 효율적으로 GPGPU를 지원하기 위해 나온 것이 CUDA이다.
출처 - https://tododiary.tistory.com/18
'영상인식' 카테고리의 다른 글
Jetson nano와 같은 Edge device를 사용하는 이유 (0) | 2021.07.05 |
---|---|
GStreamer (0) | 2021.07.01 |
YOLO 두바이 운전 영상 객체인식 (0) | 2021.05.15 |
TensorFlow Object Detection 환경구축 (0) | 2021.05.15 |
YOLO ( You Only Look Once )란 무엇인가 (0) | 2021.05.03 |