GPU를 사용하면 왜 빠르냐는 아주 무식한 질문을 한적이 있었다. 그에 대한 답변은 너무 간단했다.
"CORE 가 많어"
Core가 많으니 당연히 많은 연산을 할 수 있을것이고 좋은 성능을 나타낼 수 있다는 이야기였다. 한동안 누군가가 GPU를 왜 쓰냐는 질문을 하면 나도 똑같이 대답하다보니 무언가 좀더 자세히 알아보고 싶은 생각이 들었다.
CPU는 스레드(thread)라고 하는 순차적인 명령어(a sequence of operations)들을 빠르게 처리하며 동시에 수~수십개의 스레드를 병렬(parallel)처리하도록 설계되어 있으나 GPU는 동시에 수천~수만개의 스레드를 병렬로 실행하는 목적으로 설계되었다. 그러나 GPU에서의 스레드는 명령어의 집합이 아니라 주로 병렬 계산(parallel computations)을 의미한다.
[그림 1]은 간략하게 CPU와 GPU의 구성을 나타낸다. 일반적으로 CPU는 각각의 L1 캐시와 컨트롤러를 가지고 있지만 GPU의 경우에는 여러개의 Core가 캐시와 Controller를 공유하면서 구성된다.
캐시(Cache) 의 역할은 무엇인가?
CPU에는 L1, L2 및 L3 Cache라는 것이 있으며(여기서 L은 Level을 의미한다) 이 캐시 메모리의 크기와 Level에 따라서 CPU의 성능이 좌지우지된다. 일반적으로 캐시 메모리가 많으면 성능적으로 유리하다(AMD과 인텔을 이기기위해 사용하는 방법 ^^)
캐시 메모리는 DRAM의 속도가 상대적으로 느리기 때문에 SRAM을 이용하여 CORE와의 데이터 교환을 좀더 빠르게 하는 방식이다. CORE가 상대적으로 DRAM보다 속도가 빠르기 때문에 병목현상이 발생하게 되고 이를 최소화 하는것이 처리 성능을 높이는데 유리하다.
L1 캐시는 일반적으로 CPU 칩안에 내장되며 일반적으로 8~64KB 정도의 용량으로 구성된다. CORE는 연산중에 데이터를 L1 캐시에서 찾지 못하면 L2 캐시로 넘어간다.
L2 캐시 메모리는 CPU 회로판에 별도의 칩으로 구성되는 경우가 많으면 일반적으로 64KB~4MB 정도로 구성된다. L2 캐시는 L1 캐시보다 느리지만 DRAM보다는 훨씬 빠른 I/O 속도를 제공한다.
L3 캐시는 많이 사용하지 않으며 주로 보드에 실장되어 사용된다. 주의할점은 캐시의 사이즈가 커지면 해당 캐시에서 데이터를 찾을 수 있는 적중률은 높아지지만 선형적으로 CPU의 성능이 늘어나지는 않으며 한계가 존재한다.
GPU는 부동소수점 계산과 같은 데이터 처리에 더 많은 리소스를 할당하여 고도의 병렬계산을 하게 되고 메모리 접근을 최소화하여 고속의 계산을 수행할 수 있는 구조로 설계되어 있다.
응용프로그램을 개발함에 있어서 순차적인 부분은 CPU에서 병렬부분은 GPU에서 수행하게 구성함으로 높은 성능을 구현할 수 있다.
이제 찬찬히 CUDA를 이용한 GPU 프로그래밍을 알아보도록 하자
'Programming > Dance with CUDA' 카테고리의 다른 글
Jetson Xavier NX Developer Kit Initialization (0) | 2024.02.01 |
---|