본문 바로가기
Computer Science/Computer Architecture

3. Multimedia Arithmetic

by Gofo 2021. 5. 16.

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

댓글