맥스웰의 SM 아키텍처를 크게 변화시킨 NVIDIA

 

NVIDIA의 새 GPU 마이크로아키텍처 맥스웰의 특징은 높은 효율성입니다. NVIDIA는 맥스웰이 기존의 케플러 아키텍처보다 연산 유닛의 가동율이 높아졌다고 설명합니다. 이를 위해 NVIDIA는 맥스웰에서 GPU의 처리 단위인 SM(Streaming Multiprocessor)의 구성과 명령 스케줄링을 바꿨습니다.

 

맥스웰의 SM은 4개 블럭으로 분할되며 각각의 블럭이 저마다 명령 유닛과 실행 유닛을 갖추고 있습니다. 1개의 블럭에 CUDA 코어(연산 유닛) 32개와 SFU(Super Function Unit)가 8개 들어가며, 로드/스토어 유닛도 8가 포함됩니다.

 

1.jpg

 

맥스웰의 SMM

 

NVIDIA GPU는 32스레드를 묶은 Warp를 단위로 해서 명령을 실행합니다. 맥스웰의 경우 CUDA 코어 유닛은 32연산 유닛을 갖춰 들어가 1개의 Warp를 1 사이클로 실행할 수 있습니다. 그에 비해 SFU와 로드/스토어는 32스레드 Warp을 4사이클 주기로 실행합니다. SFU와 로드/스토어가 8개가 된 건 실행 산출량을 나타내는 것입니다. 또 명령 종류에 따라 처리량이 더 낮을 수도 있지만 기본적으로는 4 사이클입니다.

 

맥스웰에선 이들 유닛이 64KB의 레지스터 파일을 공유합니다. 명령 스케줄러, 컴퓨트 실행 유닛, 레지스터 파일이 1개의 셋트가 됩니다. 명령 스케줄링은 2개의 클러스터에서 공유하는 텍스쳐 유닛 이외에 모두 1개 묶음에서 이루어지기 때문에 단순한 편입니다. 아래는 맥스웰 아키텍처의 명령 스케줄링입니다.

 

2.jpg

 

맥스웰의 스케줄링

 

명령 유닛은 매 사이클마다 다수의 Warp를 갖춘 풀에서 리소스 준비가 끝난 Warp을 1개 골라, 프로그램 카운터를 참조해 Warp의 명령 스트림에서 명령을 주게 됩니다. 그 때 1개의 Warp에서 최대 2개의 명령을 매 주기에 처리할 수 있습니다.

 

한편 실행 유닛에서 CUDA 코어는 1사이클 안에 1개의 Warp 명령을 실행할 수 있습니다. 그래서 명령 유닛은 매 사이클마다 CUDA 코어에 명령을 발행할 수 있습니다. 그에비해 SFU와 로드/스토어 유닛은 4사이클에 걸쳐 1개의 Warp 명령을 실행합니다. 즉 1개의 명령을 SFU나 로드/스토어 유닛에 발행하면 4사이클 동안은 다음 명령을 발행할 수 없는 것입니다. 맥스웰은 이렇게 SM에서 한정된 블럭에 명령을 발행합니다. 텍스처 유닛의 경우 이것과 조합된 또 다른 1개 블럭의 명령 유닛과 함께 명령 발행을 합니다. 그러나 그 외에 명령 유닛은 블럭 범위 내에서 명령을 제어하기에 비교적 간단합니다. 

 

 

실제로는 Warp 스케줄러와 페어링된 리소스

 

Kepler의 경우는 SM안에 포함되는 192개의 CUDA핵심은 16유닛의 번들의 벡타유닛토으로 구성되어 있다. 합계 12개의 x16 CUDA핵심 번들이 배치되어 있다. 명령 유닛은 4유닛으로, 실제로는 CUDA핵심 군과 레지스터를 4분할해 제어하고 있다. 이 점은, Maxwell과 비슷하지만 Kepler에서는 보다 자유롭게 명령 발행이 가능하도록 되어 있다고 한다. 그만큼 SM의 복잡도는 높다.

 

3.jpg

 

케플러의 SMX

 

케플러에서 CUDA 코어는 16스레드 병렬 구성이며 32 스레드 Warp의 실행은 2사이클의 레이턴시가 있습니다. SFU도 Warp의 명령 주기는 최저 2사이클, 로드/스토어 유닛도 2사이클입니다.

 

그에비해 명령 유닛은 각 사이클마다 2개의 명령을 발행할 수 있습니다. 그래서 한 유닛에는 홀수 사이클에 명령을 발행하고, 다른 유닛에선 짝수 사이클에 발행하는 식입니다. SM을 2개로 나눠 번갈아가며 명령을 발행하는 것이 아니라 각 유닛마다 다른 타이밍으로 명령을 발행하는 구조입니다. 그래서 맥스웰과 비교하면 명령 발행은 훨씬 복잡합니다. 아래는 케플러 아키텍처의 명령 발행 스케줄링입니다.

 

4.jpg

 

케플러의 스케줄링

 

 

명령 발행 성능과 실행 성능의 균형

 

이러한 SM의 구조 차이를 보면, 케플러와 맥스웰이 각 사이클마다 발행하고 실행할 수 있는 명령의 차이가 명확하게 보입니다.

 

케플러와 맥스웰 모두 SM 전체에서 발행하는 명령의 수는 각 사이클 당 최대 8명령입니다. 각각의 명령은 32스레드 Warp를 대상으로 실행하기에 스레드 단위로 보면 8×32명령입니다. 즉 32스레드 Warp에 대한 명령을 8개 버텍스로 병렬 발행할 수 있으며 간단히 말해 8 Warp 명령 발행이 가능한 성능입니다. 명령 발행율로 따지면 케플러와 맥스웰의 구조에 차이가 없습니다.

 

5.jpg

 

케플러의 맥스웰의 명령 발행

 

케플러는 명령 발행과 정확하게 맞는 수량의 실행 파이프를 갖췄습니다. CUDA 코어 16유닛에 벡터 유닛이 총 12개 갖춰져 있습니다. 각각의 유닛은 2사이클 주기로 32스레드 Warp 명령을 실행합니다.

 

그래서 실행 산출량으로 보면 각각의 16유닛 구성은 0.5Warp명령/사이클이 됩니다. SFU도 Warp의 명령 처리 주기는 최저 2사이클. 로드/스토어 유닛도 2사이클입니다. 케플러의 경우 모든 컴퓨트 실행 유닛이 최고 0.5Warp 명령/사이클의 실행 주기를 갖추게 됩니다. 아래 그림은 케플러의 SM 내부 명령 발행과 실행의 관계를 그린 것입니다.

 

6.jpg

 

케플러의  SM의 명령 발행과 실행

 

케플러의 SM에는 0.5Warp 명령/사이클 유닛이 총 16유닛 있습니다. 각 유닛의 명령 실행 산출량을 합치면 0.5Warp 명령/사이클×16유닛이니까 8Warp명령/사이클의 실행 주기를 갖게 됩니다. 케플러는 명령 발행 성능과 명령 실행 성능이 똑같은 수를 맞추고 있습니다.

 

즉 케플러는 명령을 잘 스케줄링하면 모든 실행 유닛에 딱 맞는 명령을 발행하게 됩니다. 다시 말하면 명령 유닛과 실행 유닛 모드를 최대한 낭비하지 않고 작동하도록 만든 것입니다. 실제로는 텍스처 유닛과 그 데이터 경로를 컴퓨트에서 쓸 수 있으니 실행 유닛 수는 더 많지만 기본적인 컴퓨트 유닛으로 한정하면 위 그림대로 됩니다.

 

CPU는 명령 유닛이 명령을 발행하는 수보다 실행 유닛이 명령을 처리하는 양이 더 많은게 일반적입니다. 처음부터 실행 유닛을 최대한으로 가동시킬수 없다는 걸 전제로 설계되어 있습니다. 그에 비해 GPU는 실행 유닛의 가동률을 CPU보다 높게 유지하는 걸 전제로 한 설계를 씁니다.

 

 

명령 발행에 치우친 맥스웰 아키텍처

 

케플러에서 명령 발행/실행 비율은 1대 1이었습니다. 그에 비해 맥스웰은 명령 발행에 대한 접근 방식이 다릅니다. 맥스웰도 명령 발행의 산출량은 최대 8Warp 명령/사이클로 케플러와 같습니다. 그러나 실행 유닛은 1/4의 클러스터마다 32 쿠다 코어를 넣으며, 그 외에 벡터 유닛 1개와 SFU, 로드/스토어 유닛으로 구성되어 있습니다.

 

7.jpg

 

맥스웰의 명령 발행과 실행

 

맥스웰의 경우 CUDA 코어에는 32 연산 유닛이 있어 1개의 Warp 명령을 최단 1사이클 주기로 실행할 수 있습니다. 명령 처리량이 1Warp 명령/사이클이 되는 것입니다. 그에 비해 SFU와 로드/스토어는 모두 1개의 Warp명령을 실행하는 주기가 최단 4사이클입니다. 위 그림에서 x8이라고 한 건 4사이클 처리량을 기준으로 한 것이며, 환산하면 0.25Warp 명령/사이클이 됩니다. 그래서 1/4 클러스터 내에서 합계는 최고 1.5Warp 명령/사이클의 주기가 됩니다. 그에 비해 명령 발행은 1/4 클러스터에 최고 2Warp 명령/사이클이라 이쪽이 남게 됩니다.

 

SM 전체로 보면 맥스웰은 최대 8Warp 명령/사이클의 명령 발행 능력을 갖췄는데, 실행량은 컴퓨트만 계산해서 최대 6Warp 명령/사이클입니다. 맥스웰도 케플러와 마찬가지로 조직 단위가 있지만 SM의 텍스처 유닛은 케플러가 두배 많습니다. 4텍셀/사이클의 필터링 출력량을 갖춘 유닛이 맥스웰은 2개 있어 2개 클러스터가 공유합니다. 그에 비해 케플러는 4유닛이 있습니다. 그래서 그래픽만 담당하는 워크로드를 가정했을 경우 케플러가 명령 발행에 비해 명령 실행의 비율이 높습니다.

 

맥스웰과 케플러의 명령 발행과 실행을 비교하면 아래 그림처럼 됩니다. 위가 맥스웰이고 아래가 케플러입니다. 이처럼 단순히 명령 발행과 실행 비율만 봐도 맥스웰과 케플러는 큰 차이가 있습니다.

 

8.jpg

 

케플러의 맥스웰의 명령 발행과 실행

 

 

GPU 물리 설계의 문제는 배선 밀도

 

맥스웰 명령 스케줄링의 설계 방침은 명령 발행에 여유를 두면 실행 유닛을 높은 효율로 가동할 수 있다는 것입니다. 그 결과 명령 발행 능력 쪽이 명령 실행을 웃도는 아키텍처가 됐습니다. 명령 발행이 적은 게 당연한 CPU와는 전혀 다른 설계입니다. 그러나 이런 선택에 의해 맥스웰은 케플러보다 연산 코어의 가동율을 높일 수 있었습니다.

 

SM 아키텍처의 개혁은 GPU가 물리 설계에 갖고 있는 문제와 밀접한 연관이 있습니다. NVIDIA는 2009년 11월에 열린 반도체 컨퍼런스 IEDM에서 GPU 물리 설계의 문제점이 인터 커넥트에 있다고 설명했습니다. 아래 그래프는 IEDM의 논문에 있던 각 프로세스 세대에서 GPU 단위 면적당 금속 배선의 길이와 배선 레이어 사이의 Via의 수를 표시한 것입니다. GPU의 배선은 매우 복잡하며 그것이 점점 악화되고 있습니다. 특히 융통성(코어의 일부를 막아서 하위 모델을 내놓는다던가)이 없는 제품 수율에 영향을 주는 싱글 Via의 수가 40nm 공정 이후로 늘어나고 있습니다. 지금 쓰는 28nm 공정은 더욱 악화되어 제품 수율이 악화될 가능성이 그만큼 높아졌습니다.

 

9.jpg

 

10.jpg

 

GPU 배선의 증가

 

방대한 숫자의 연산 유닛을 레지스터나 메모리 등의 리소스나 명령 장치 등의 제어 리소스와 연결해야 합니다. GPU는 배선이 가장 중요한 문제입니다. 그래서 GPU 설계에서는 논리적인 구성을 간단하게 고안해 물리적인 배선을 줄이려 합니다. 그러기 위해서는 GPU를 최대한 단순한 단위로 설계하는 것이 좋습니다.

 

그 점에서 케플러는 좀 복잡한 편이라 할 수 있습니다. 맥스웰 아키텍처에서 SM 내부의 4개 블럭은 명령 발행은 내부에서 끝나는 아키텍처입니다. 그래서 더 많은 리소스를 연결해야 하는 케플러보다 배선은 단순해질 것입니다. 또 메모리 계층도 케플러보다 맥스웰이 간단하고 정리되어 있습니다.

 

 11.jpg

 

맥스웰의 메모리 계층

 

이번 맥스웰은 16웨이가 아니라 32웨이 CUDA 코어 구성을 썼습니다. 이것도 간소화 때문이라고 NVIDIA는 설명합니다. 실제로 CUDA 코어를 대상으로 명령 발행이 1사이클 주기가 되면 케플러처럼 CUDA 코어 사이에 명령 발행 주기가 어긋나는 문제는 발생하지 않습니다.

 

효율을 높여 물리적인 SM의 다이가 차지하는 구역을 줄인 것도 맥스웰 SM 아키텍처의 중요한 특징입니다. 그 결과 케플러 세대의 메인스트림 GPU가 2개의 SM으로 구성됐던 것이 맥스웰 세대는 5개의 SM까지 확장할 수 있었습니다.

 

 

 

케플러와 맥스웰의 명령 발행

 

12.jpg

 

13.jpg

 

NVIDIA GPU와 AMD GPU의 비교

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.