메인스트림 GPU도 나올 파스칼 아키텍처 GPU

 

1.jpg

 

GTC가 열린 San Jose McEnery Convention Center


NVIDIA가 주최한 GPU 컴퓨팅 컨퍼런스 GPU Technology Conference(GTC)에서 차세대 하이엔드 GPU인 테슬라 P100(GP100)이 발표됐습니다. 차세대 GPU 아키텍처 파스칼 기반의 GPU 컴퓨팅 제품이지요. 파스칼은 GPU 마이크로 아키텍처, 프로세스 기술, 메모리 및 패키지 기술, 프로세서 상호 연결까지 모든면에서 기술적으로 도약한 획기적인 GPU입니다. 기조 강연에선 PC 용 메인스트림을 위한 파스칼 기반 GPU도 살짝 공개돼, 파스칼 아키텍처가 다양한 GPU 라인업으로 나올 가능성을 내비췄습니다.

 

2.jpg

 

여러 기술 혁신이 있었던 파스칼 세대

 

3.jpg

 

테슬라 P100

 

4.jpg

 

GDDR5를 탑재한 메인스트림용 파스칼 탑재 보드를 보여주는 NVIDIA의 젠슨황(Co-founder, President and CEO)

 

5.jpg

 

GTC에서 발표된 테슬라 P100의 NVLink 보드


파스킬의 ​​GPU 마이크로 아키텍처는 이전 세대인 맥스웰에서 바뀌었습니다. 한마디로 말하면 GPU 컴퓨팅을 중시하는 노선으로 돌아온 마이크로 아키텍처입니다. NVIDIA의 GPU 컴퓨팅 전략이 흔들리지 않았음을 보여주는 GPU입니다.

 

맥스웰은 다이 면적당 단정정밀도(FP​​32) 부동소수점 연산 성능을 끌어 올렸지만 배정밀도(FP64) 부동 소수점 연산 성능을 크게 줄였습니다. 굳이 따져보면 PC 그래픽과 모바일에 치중한 마이크로 아키텍처였지요. 처음에 NVIDIA는 GPU 컴퓨팅 시장에서 케플러를 유지하고 그래픽 시장은 맥스웰을 도입하는 전력을 썼을 것이라 추측됩니다. 그러나 계산 정밀도의 요구가 낮은 딥 러닝이 발전하면서 맥스웰도 GPU 컴퓨팅 시장에 투입, NVIDIA의 전략은 다소 혼돈스러워집니다.

 

맥스웰에서 FP64을 희생해 FP32를 강화한 건 28nm 공정 노드를 유지하면서 성능을 향상시켜야 한다는 제약이 있었기 때문입니다. 트랜지스터가 유지되니 뭔가를 희생하지 않으면 FP32의 성능을 늘릴 수 없었습니다. 그러나 16nm FinFET 프로세스로 이행한 파스칼에선 사용할 수 있는 트랜지스터의 수가 크게 늘어나 그런 제약이 없습니다. 그래서 NVIDIA는 파스칼에서 마이크로 아키텍처를 쇄신하고 FP64 성능을 FP32의 1/2까지 끌어 올렸습니다.

 

6.jpg

 

케플러부터 맥스웰까지 동일한 28nm 공정 노드를 사용

 

맥스웰 테슬라 M40(GM200)와 비교하면 파스칼 테슬라 P100의 FP64 성능은 25배가 됩니다. 케플러 기반의 테슬라 K40(GK110)과 비교해도 3배의 성능입니다. 파스칼은 HPC(High Performance Computing) 용도를 충분히 견딜 수 있는 마이크로 아키텍쳐가 됐습니다. 즉 NVIDIA는 3년 반 만에 본격적인 HPC 전용 테슬라를 업데이트한 셈입니다.

 

7.jpg

 

FP16, FP32, FP64의 성능 비교

 

 

공통점이 많은 맥스웰과 파스칼 SM(Streaming Multiprocessor)


NVIDIA GPU는 컴퓨팅 시스템의 유닛을 SM(Streaming Multiprocessor)라는 클러스터로 정리합니다. 맥스웰 이후 SM은 프로세싱 블럭(Processing Block)으로 또 나뉩니다. 프로세싱 블럭은 warp 예약과 명령 발행 레지스터를 공유하는 블럭으로 CPU의 코어에 해당됩니다. warp는 NVIDIA가 논리 벡터라 부르며 32개의 요소로 구성됩니다.  warp는 SIMD(Single Instruction, Multiple Data) 형 실행이나 프레디케이션에서 각 레인을 분기할 수 있어 NVIDIA는 SIMT(Single Instruction, Multiple Thread)라고 부릅니다. warp의 32슬롯의 명령 스트림도 스레드라고 하니 1warp 는 32 스레드 구성이 됩니다.

 

8.jpg

 

파스칼 SM의 블럭 다이어그램

 

맥스웰과 파스칼 마이크로 아키텍처는 공통성도 강합니다. 모두 하나의 프로세싱 블럭에서 32개의 FP32 CUDA 코어와 8개의 로드/스토어 유닛,  9개의 슈퍼 펑션 유닛(Special Function Unit : SFU), 2명령 발행의 명령 유닛 레지스터를 포함한다는 것입니다 . FP32 CUDA 코어는 단정밀도 (FP32) 부동 소수점 연산 유닛, SFU는 초월 함수 등을 실행하는 유닛, 로드/스토어는 메모리에서 데이터의 읽기/쓰기를 제어하는 식입니다.

 

그러나 GPU SM의 구성은 파스칼과 맥스웰이 크게 다릅니다. 파스칼 SM은 맥스웰 SM을 반으로 자른 구조입니다. 맥스웰 SM은 프로세싱 블럭이 4개라 FP32 CUDA 코어가 총 128개 구성이었습니다. 반면 파스칼 SM은 프로세싱 블럭이 2개로 FP32 CUDA 코어가 총 64개의 구성으로 됩니다.

 

9.jpg

 

맥스웰 SM의 블럭 다이어그램

 

10.jpg

 

맥스웰 SM의 구성

 

11.jpg

 

파스칼 SM의 구성

 

12.jpg

 

3세대 아키텍처의 SM 스펙 비교

 

 

맥스웰 SM을 분할한 파스칼 SM

 

맥스웰 SM에서는 4개의 프로세싱 블럭이 96KB의 공유 메모리와 명령어 캐시를 공유하는 구조였습니다. 반면 파스칼 SM은 크기가 작아져 2개의 프로세싱 블럭에 64KB의 공유 메모리와 명령어 캐시를 공유합니다. 즉 자원의 공유 비율이 줄어들고 개별 프로세싱 블럭이 더 많은 공유 리소스, 공유 자원 대역을 쓸 수 있게 됐습니다. 프로세싱 블럭 당 공유 메모리의 양은 맥스웰이 24KB에 파스칼이 32KB입니다. 공유 메모리 대역은 2배가 됩니다. 맥스웰에서 파스칼까지 메모리 계층 구조 자체는 변하지 않았습니다.

 

13.jpg

 

맥스웰의 SM 구성

 

14.jpg

 

파스칼의 SM 구성

 

15.jpg

 

파스칼과 맥스웰의 메모리 계층

 

파스칼과 맥스웰의 각 프로세싱 블럭은 2명령/사이클로 명령을 발행하며 2개의 명령은 같은 warp에서 발행합니다. 전에 설명한대로 파스칼은 맥스웰에 비해 warp의 수를 두배로 늘려 그만큼 더 많은 명령을 충전할 수 있습니다. 해당 레지스터 파일도 맥스웰보다 두배입니다.

 

덧붙여서 이 블럭 다이어그램은 GPU 컴퓨팅에 대한 이미지이며 그래픽의 표현이 약간 다를 수 있습니다. 맥스웰은 SM마다 지오메트리 연산의 고정 기능 유닛이 포함돼 있었습니다. 버텍스 페치나 테셀레이터 뷰파인트 변환 등이 그것입니다. 그러나 파스칼에선 SM이 2개의 프로세싱 유닛으로 구성되니 각 SM마다 지오메트리 유닛을 넣으면 균형이 무너집니다. 아마도 파스칼 그래픽의 구성은 2개의 SM마다 지오메트리 유닛이 함께 Texture/Processor ​​Cluster(TPC) 클러스터를 구성하는 것으로 추측됩니다.

 

16.jpg

 

파스칼의 텍스처/프로세서 클러스터 추정도

 

17.jpg

 

스펙 테이블도 파스칼의 TPC는 2SM 구성으로 기록됩니다.

 

 

블럭마다 16유닛 수준의 FP64 성능

 

파스칼의 SM은 연산 장치가 대폭 강화됐습니다. 맥스웰에서 FP64은 SM당 4 사이클, 즉 하나의 프로세싱 블럭에 1유닛의 FP64 성능을 냈습니다. FP32에 비하면 FP64의 성능은 1/32였습니다. 반면 파스칼에서 FP64의 성능은 FP32의 절반 수준으로 뛰어 올랐습니다. 따라서 NVIDIA의 공식 블럭 다이어그램에도 FP64 CUDA 코어가 표기됐습니다.

 

사실 FP64와 FP32은 일부 자원으로 공유하는 것으로 보입니다. FP64은 32스레드의 warp 명령을 2사이클마다 하나씩 발행하기에 warp 명령 처리 주기는 FP32의 절반이 됩니다. 따라서 아래의 그림에서는 파스칼 SM 블럭은 16개의 FP64 CUDA 코어로 그렸습니다. 마찬가지로 맥스웰은 SM 전체에서 FP64는 4스레드/사이클이기에 맥스웰 SM 블럭 다이어그램에선 각각 1개의 FP64 유닛으로 묘사했습니다.

 

18.jpg

 

왼쪽이 프로세싱 블럭, 오른쪽이 맥스웰 프로세싱 블럭

 

또한 파스칼에선 Packed FP16을 지원합니다. 기존에는 반정밀도(FP16) 부동 소수점 연산을 FP32 CUDA 코어에서 실행하기에 처리량이 FP32과 같았습니다. 맥스웰 세대라면 1 프로세싱 블럭 당 FP32와 FP16가 모두 32 사이클이었지요. 그라나 파스칼에선 2-way의 SIMD(Single Instruction, Multiple Data) 형 FP16을 지원합니다. 따라서 32개의 CUDA 코어가 각 사이클마다 32개의 FP16 연산이 가능해졌습니다.

 

19.jpg

 

Packed FP16

 

그러나 이 FP16는 SIMD 형태의 Packed SIMD 연산이라 FP32와 FP64처럼 각각의 요소에서 명령이 다른 방향으로 분기됐을 경우, 프레디케이션 처리는 할 수 없습니다. 어느 정도 사용이 제한됐다고 할 수 있지요. 하지만 FP16를 모아둔 딥 러닝에선 분기가 없으니 Packed FP16를 효율적으로 쓸 수 있습니다. Packed FP16은 NVIDIA의 모바일 SoC인 테그라 X1의 맥스웰 코어에서 처음으로 썼습니다.

 

20.jpg

 

맥스웰의 테슬라에 비해 파스칼에선 FP16 성능이 3배로 향상

 

 

딥 러닝을 의식한 2-way SIMD 형 FP16 포맷의 도입


Packed FP16의 도입으로 파스칼의 FP16 성능은 급증했습니다. 테슬라 P100의 스펙에서 FP16은 21.2TFLOPS. 맥스웰 테슬라  M40은 7TFLOPS니 3배입니다. FP32 성능은 맥스웰에 비해 파스칼 테슬라 P100은 10.6TFLOPS로 1.5배 오르는 데 그쳤습니다. 그래서 NVIDIA는 FP16의 성능 향상을 전면에 내세우고 있습니다. 그러나 상당수의 HPC 사용자는 케플러 테슬라 K40 기반이라, 파스칼에선 FP32의 성능도 케플러의 4.3TFLOPS에서 2.47배로 오르게 됩니다.

 

21.jpg

 

3세대 테슬라의 성능 비교

 

부동 소수점은 부호, 지수, 가수의 3개 형식으로 구성됩니다. IEEE 754 표준에서 FP32는 s8.23의 부호 1비트, 8비트의 지수, 23비트의 가수 형식입니다. 반면 FP16은 s5.10의 부호 1비트, 지수 5비트, 가수 10비트입니다. 다이나믹 레인지는 2의 40 승. 또한 비정상 값(subnormal number)의 하드웨어도 지원합니다. 이를 소프트웨어로 처리하면 성능이 크게 떨어지는 경우가 나옵니다.

 

22.jpg

 

23.jpg

 

FP16은 GPU에게 새로우면서도 오래된 포맷입니다. 그래픽 정수에서 부동소수점으로 전환하면서 데이터 용량을 줄이기 위해 FP16을 도입해 활발하게 사용했습니다. 그래픽은 지금도 쓰이지만 역시 데이터 용량을 줄이기 위한 목적으로 딥 러닝에서도 쓰이기 시작하면서 각광받고 있습니다. FP16 성능은 GPU 아키텍처의 새로운 초점입니다. NVIDIA가 파스칼을 딥 러닝을 위해 만들었다고 주장하는 근거의 가장 큰 부분이 FP16의 지원에 있습니다.

 

파스칼은 마이크로 아키텍처를 혁신했으나 그 이상으로 바뀐 건 메모리와 패키징, 그리고 인터커넥트입니다. 테슬라 P100은 일반 PCI Express 보드가 아닌 NVLink 보드로 제공합니다. 메모리는 스택 구조의 HBM2입니다. 그리고이 HBM2이 파스칼의 강력한 무기이자 약점이기도 합니다. 양산을 시작한지 얼마 안 된 HBM2의 공급이 P100의 수요를 따라잡지 못하고 있어서입니다. 다음번엔 파스칼의 인터페이스 방향에 대해 보겠습니다.

 

24.jpg

 

파스칼 테슬라 P100(GP100)의 HBM2 메모리

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