Multimedia
1990년대 인터넷이 발달하며 multimedia가 성장하였다.
Multimedia data는 주로 8bit, 16bit으로 짧은 데이터가 많이 연결되어있다.
따라서 빠르게 처리하는 것이 필요하다.
기본 생각
빠른 데이터 처리를 위해 하나의 큰 adder를 여러 개의 작은 adder로 사용해서 데이터 연산 처리를 병렬로 처리한다.
병렬로 처리하면 동시에 수행할 수 있기 때문에 처리 속도가 빨라진다.
예를 들어 64bit adder는 16bit 마다 넘어오는 carry를 무시함으로써 4개의 16bit adder로 사용할 수 있다.
또는 8bit 마다의 carry를 끊어버림으로써 8개의 8bit adder로 사용할 수 있다.
Subword Parallelism
위에서 처럼 partitioned carry chain로 adder를 사용하여 병렬로 처리하는 것을 subword parallelism이라 한다.
다음과 같이 불리기도 한다.
- DLP : Data-Level Parallelism
- Vector parallelism
- SIMD : Single Instruction Multiple Data
이를 위한 instruction이 추가로 제공된다.
또한 Moore's law에서 보듯이 CPU에 더 많은 하드웨어를 추가할 수 있게 되었다.
이에 따라 64bit adder 뿐만 아니라 128bit adder와 더 wide register 등을 넣을 수 있다.
이는 더 많은 병렬 처리가 가능함으로써 병렬성이 증가하고 더 빠른 속도로 데이터를 처리할 수 있다.
128-bit adder는 16*8bit adder, 8*16bit adder, 4*32bit adder 로 사용할 수 있다.
Intel의 사례(MMX, SSE)
Processor는 SIMD 연산을 위한 instruction들을 추가로 가지고 있다.
MMX
1993년에 multimedia를 빠르게 처리하기 위해 개발되었다.
기존에 존재하는 64bit의 FP register을 사용한다.
이를 통해 8*8bit, 4*16bit, 2*32bit, 1*64bit multimedia 로 처리할 수 있다.
SSE
1999년 floating-point 연산도 병렬로 처리하기 위해 개발되었다.
Multimedia 뿐만 아니라 과학 계산도 빠르게 처리할 수 있다.
Moore's law에 의해서 CPU에 더 많은 하드웨어를 넣는다.
새로운 8개의 128-bit FP register를 추가하였다.(XMM0~XMM7)
이를 통해 single precision FP 4개를 병렬로 처리할 수 있다.
다만 이를 처리하기 위해 추가적인 FP unit 4개가 추가되었다.
SSE2
2001년에 SSE와 MMX를 통합한 것이다.
8*128-bit register을 이용해서 multimeida data도 빠르게 처리할 수 있다.
이를 통해 2*64bit FP, 4*32bit FP를 처리할 수 있다.
추가로 2*64bit, 4*32bit, 8*16bit, 16*8bit Integer(Multimedia)를 처리할 수 있다.
AVX
2008년에 개발된 Advanced Vector Extension이다.
SSE2의 register를 2배로 증가시켰다.
이를 통해 4*64bit double precision FP를 처리할 수 있게 되었다.
DGEMM with Intel Core i7
4개의 double precision FP를 병렬로 처리할 수 있다.
Matrix Computation
Matrix 계산은 각각의 곱이 independent하게 수행된다.
예를 들어 아래 matrix 연산에서 *은 $a_{11} b_{11} + a_{12} b_{21} + ... + a_{1n} b_{n1}$이 된다.
이들의 각 곱은 independent하게 수행된다.
이를 병렬로 처리하면 더 빠른 결과를 얻을 수 있기 때문에 많은 과학 계산이 matrix 연산을 이용한다.
differential equation(미분 방정식)이나 deep learning(vectorizatino with GPU) 등은 모두 matrix를 이용한다.
C Intrinsics
컴파일러는 parallel 기법을 자동으로 적용해주지 않는다.
따라서 parallel을 통해 빠르게 처리하기 위해서는 컴파일러에게 별도로 요청을 해야 한다.
이를 위해 intrinsic function을 이용한다.
컴파일러가 제공하는 function이다.
사용하는 programming language에서 사용될 수 있다.
MMX, SSE, OpenMP 등의 vectorization과 parallelization을 수행하기 위해 사용되기도 한다.
Single instruction으로 여러 data에 대해 동작하고 처리하기 때문에 energy-efficient한 speed up을 이뤄낸다.
Cost-performance-energy가 향상된다.
SIMD Parallelism
DLP에는 3가지 발전이 있었다.
- SIMD extension
- 여러 개의 data를 병렬로 처리한다.
- 시작은 multimedia data였지만 이후 과학계산(FP 연산)으로 확장되었다.
- 주로 범용 컴퓨터에서 사용되는 기법
- Vector architecture
- 여러 데이터를 많이 처리할 수 있다.
- SIMD extension이 나오기 전에 존재
- 오늘날에는 거의 사용되지 않는다.
- Graphics Processing Unit(GPU)
- 범용 프로세서가 아니다.
- 2000년대에 3D 비디오 게임이 널리 퍼지며 발전했다.
- 많은 object들을 병렬로 처리해야하기 때문에 굉장한 parallelism을 가지고 있었다.
- parallelism에 있어서 범용 프로세서에 비해 빠르게 발전했기 때문에 GPU를 이용해서 과학 계산을 처리하였다.
- 요즘은 GPU을 이용해서 deep learning을 하기도 한다.
Multimedia Arithmetic Overflow
Multimedia는 integer로 표현이 된다.
Multimedia의 연산은 소리의 크기, 픽셀의 밝기 등을 증폭/감소시키는데에 목적이 있다.
따라서 만약 overflow가 발생할 경우, 단순히 최댓값이나 최솟값으로 변환하면 된다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
4. Single Cycle Datapath and Control Design (0) | 2021.05.16 |
---|---|
3. MIPS ISA (0) | 2021.05.16 |
3. Floating-Point Arithmetic (0) | 2021.05.16 |
3. Integer Arithmetic (0) | 2021.05.16 |
3. Computer Arithmetic (0) | 2021.05.16 |
댓글