GPU 컴퓨팅의 기원
상태바
GPU 컴퓨팅의 기원
  • 엔비디아
  • 승인 2020.06.23 09:00
  • 댓글 0
이 기사를 공유합니다

과학적 발견과 비즈니스 애널리틱스는 컴퓨팅 자원에 대한 수요를 끊임없이 촉진한다. 날씨 예측, 전산유체역학(Computational Fluid Dynamics) 시뮬레이션부터 최근의 머신러닝과 딥러닝에 이르는 많은 애플리케이션에는 현재 사용할 수 있는 것 이상의 컴퓨팅 파워와 복잡한 알고리즘이 요구된다.

컴퓨팅 산업은 트랜지스터 밀도 증가, 명령어 수준 병렬성(Instruction-level parallelism), 데나드 스케일링(Dennard Scaling) 등의 필요 성능을 충족하기 위해 다양한 방법에 의존해왔다. 무어의 법칙에 따라 예측된 대로 트랜지스터 밀도의 증가는 컴퓨팅 수요를 증가시켰고, 18개월마다 칩 트랜지스터 집적도가 2배씩 늘어났다.

명령어 수준 병렬성 같은 기술 역시 성능을 향상시키는 데 도움이 됐지만 2001년부터 둔화되기 시작했다. 데나드 스케일링은 전압 스케일링이 종료된 2005년까지 무어의 법칙과 연계해 몇몇 이점을 제공했다.

이어 2005년경 데나드 스케일링이 둔화되면서, 업계는 컴퓨팅 수요를 충족시킬 수 있는 대안이 필요했다. 주요 요인은 전력과 통신 문제였는데, 연구에 따르면 전력은 대부분 통신을 위해 소비되므로, 기계에 투입될 수 있는 컴퓨팅 양을 제한했다. 그리고 이는 미래의 컴퓨팅이 병렬성에 달려있다는 점을 명백히 보여준다.

GPGPU(General Purpose Computing on GPU)의 시대

1990년대와 2000년대 그래픽 하드웨어는 특히 그래픽 산업의 워크로드를 위한 특정 요구에 맞도록 설계됐다. 하지만, 그래픽 워크로드는 높은 컴퓨팅 파워를 필요로 했다. 이 때문에 필요 성능은 트랜지스터 더블링이 제공할 수 있었던 연간 약 1.8배에서 약 2.4배로 향상됐다. [그림1]은 노스캐롤라이나 대학교(University of North Carolina, UNC)의 존 폴튼(John Poulton) 교수가 착안한 그래픽 성능 궤적 연구다.

2001년경 그래픽 성능 궤적(출처=UNC 존 폴픈 교수)
[그림1] 2001년경 그래픽 성능 궤적(출처=UNC 존 폴픈 교수)

그래픽 하드웨어는 초 단위의 삼각형 미터법을 사용해 무어의 법칙이 예측한 것보다 빠르게 성능을 높이고 있었다. 하드웨어 컴퓨터 그래픽 계산에서 이용할 수 있는 대규모 병렬처리 기술 덕분이다. 2001년 PC 그래픽은 이미 그래픽용으로 설계된 방대한 시스템의 종말을 초래하고 있었다.

이는 개발자 커뮤니티가 그래픽 하드웨어에서 놀라운 연산력을 활용하고, 의료 영상, 전자기 같은 과학적 워크로드를 가속하는 동기가 됐다. 애당초 엔비디아 GPU는 높은 병렬처리 수준이 요구되는 게임과 그래픽 워크로드를 실행하도록 설계됐다. 게임과 그래픽 산업에서 FLOPS와 메모리 대역폭 수요가 증가하면서, GPU는 엄청난 계산력과 높은 메모리 대역폭을 가진 고도로 병렬화된 멀티스레드, 다중 코어 프로세서로 진화했다. 또한 이는 게임과 그래픽과 같은 특정 워크로드만을 가속화하도록 설계된 GPGPU 시대가 열린 배경이기도 하다.

하이브리드 컴퓨팅 모델

GPU는 병렬 연산을 위해 설계됐으며 이는 처리량(Throughput, 스루풋) 프로세서라고도 불린다. 많은 과학, AI 워크로드는 알고리즘에 내재된 거대한 병렬성을 가지고 있어, CPU에서는 매우 느리게 실행될 수 있다. GPU 가속 애플리케이션은 시간이 많이 걸리는 루틴과 기능(핫스팟이라고도 함)을 오프로드해 GPU에서 실행되도록 하고, 대규모 병렬 처리를 활용한다.

나머지 애플리케이션은 여전히 CPU에서 실행된다. 컴퓨팅 집약적이고 시간이 많이 걸리는 코드의 일부를 GPU로 오프로드해 애플리케이션을 GPU로 완전히 이동하지 않고도 애플리케이션 속도를 높일 수 있다. 이를 하이브리드 컴퓨팅 모델이라고도 한다. 또 하이브리드 컴퓨팅이 발전하면서 두 프로세스가 공존했지만 근본적으로는 달랐다. [그림2]는 CPU와 GPU의 근본적인 차이를 보여준다.

GPU는 데이터 처리를 계산하기 위해 더 많은 트랜지스터를 투입한다.
[그림2] GPU는 데이터 처리를 계산하기 위해 더 많은 트랜지스터를 투입한다.

GPU는 데이터 처리를 위해 대부분 트랜지스터를 활용하는 반면, CPU는 큰 캐시, 제어 장치 등을 위한 다이 면적 확보가 필요하다. 또 CPU 프로세서는 각 스레드 내에 레이턴시(지연시간)를 최소화하는 원리로 작동하지만, GPU는 연산을 통해 명령과 메모리 레이턴시를 숨긴다. [그림3]은 GPU와 CPU 계산 스레드의 차이를 보여준다.

[그림3] 낮은 레이턴시 혹은 높은 스루풋

[그림3]에서 알 수 있듯 CPU 아키텍처는 각 스레드 내에서 레이턴시를 최소화해야 한다. CPU에서 모든 스레드는 데이터 액세스 시간(흰색 막대)을 최소화한다. 또한 단일 타임슬라이스 동안 스레드는 가능한 많은 작업을 수행한다(녹색 막대). 이를 달성하기 위해 CPU는 레이턴시가 낮고 복잡한 제어 논리가 필요한 것이다. 이와 함께 스레드 간 컨텍스트 전환 비용이 많이 들기 때문에 캐시는 코어 당 몇 개의 스레드만을 사용하는 것이 가장 좋다.

반면, GPU 아키텍처는 연산으로 명령과 메모리 레이턴시를 숨긴다. GPU는 수천 개의 경량 스레드를 병렬로 실행하므로, 매 클럭 사이클마다 비용을 들이지 않고 정지된 스레드에서 다른 스레드로 전환할 수 있다.

[그림3]과 같이 스레드 T1이 데이터를 위해 정지했을 때, T3과 T4로 다른 스레드가 처리를 시작하고, 그 사이에 T1은 결국 데이터를 처리한다. 이런 식으로 다른 가능한 작업으로 전환함으로써 레이턴시를 숨긴다. 이는 GPU가 레이턴시를 숨기기위해 겹쳐지는 동시 스레드가 많이 필요하다는 것을 의미한다. 때문에, GPU에서 수천 개의 스레드를 실행할 수 있는 것이다.

테크월드 - 월간<EMBEDDED> 2020년 6월호 中


관련기사

댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
0 / 400
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.