[Pascal Architecture] Streaming Multiprocessor (SM) design (P100) (Part 2)

이전에 설명했듯이 GP 100의 SM은 총 6만(65,536) 개의 32-bit register와 64개의 CUDA core로 구성되어 있다. 이는 지난 Maxwell, Kepler와 같은 register 크기이지만 core의 개수는 줄어들었다. 결과적으로 하나의 코어에 할당된 register의 개수가 늘어난 형태이다. 아래 그림 1은 Pascal SM의 구조를 표현한 그림이고, 그림 2는 지난 3세대의 GPU 스펙을 정리한 표이다 (출처).

Pascal SM

그림 1: Pascal SM 구조 (출처)
테이블

그림 2: Kepler, Maxwell, Pascal 스펙 비교표 (출처)

그림 1과 같이 Pascal SM은 2개의 processing block으로 나누어져 있다. 각 Processing block은 3만(32,768) 개의 register와 32개의 CUDA core로 구성되어 있다. 또한, 각 block은 instruction buffer, warp scheduler, 2개의 dispatch units, 16개의 DP unit (FP64 CUDA core), 8개의 LD/ST(Load/Store) unit ,8개의 SFU (Special Function Unit) unit을 포함하고 있다. 이번 Pascal SM은 지난 세대 GPU의 SM보다 많은 수의 DP unit을 가지고 있다 (2:1 비율). Kepler의 경우 3:1비율로 CUDA core와 DP unit이 할당되어 있었다. 결과적으로 64-bit floating point 연산 성능이 많이 향상되었다 (그림 2 참조).

Pascal의 또 다른 하나의 특징은 16-bit floating point 연산을 지원한다는 점이다. 하나의 CUDA core가 2개의 16bit floating point 연산을 지원한다고 발표하였다. 결과적으로 하나의 warp가 총 64개의 16-bit floating point 연산을 수행하는 형태인 것이다(?). 정확하지는 않지만, 아마도 2-way SIMD (Single Instruction Multiple Data) 형태의 인스트럭션을 지원하는 것 같다 (이 부분은 조금 더 조사한 후에 다시 작성하도록 하겠다). 결과적으로 최대 16-bit 연상 성능은 32-bit 연산 성능의 2배라고 발표하였다. 16-bit 연산을 지원하는 가장 큰 목적은 Deep Learning (머신 러닝) 어플리케이션의 성능 향상이다. Deep Learning Application의 경우 16-bit floating point 연산을 하여도 정확도에서 큰 차이가 없다고 한다(?). 16-bit 연산이 다른 어떤 분야에 또 도움이 될런지는 잘 모르겠다.

다음은 16-bit의 연산을 어떻게 수행하는 것이며 Pascal Architecture에서 소개한 새로운 부분을 정리할 계획이다.

Leave a Comment