SIMD(Single Instruction Multi Data)는 컴퓨터 프로세서 명령어 세트의 일종으로, 일반적인 명령어가 SISD(Single Instruction Single Data)인 것과 달리 여러 개의 데이터를 하나의 명령어로 한 번에 처리할 수 있다.

1 예시

예를 들면 IA32 및 AMD64의 SSE 명령어 중 _mm_mul_ps는 128비트 데이터(32비트 데이터 네 개) 두 개를 32비트 단위로 각각 곱한다. { 1, 2, 3, 4 } 데이터와 { 5, 6, 7, 8 } 데이터를 _mm_mul_ps 명령어를 이용해 { 1 * 5, 2 * 6, 3 * 7, 4 * 8 }의 연산이 한 명령어로 실행되어 { 5, 12, 21, 32 } 결과가 나온다. SISD 명령어(MUL)를 사용했다면 각 자리의 숫자를 하나씩 곱해야 해서 최소 세 번의 계산 주기가 더 소요된다.

2 활용처

SIMD 명령어는 벡터행렬 연산에 가장 많이 사용된다. 특히 4차원 벡터, 4 * 4 행렬, 사원수에 자주 사용되며, CPU 연산 주기가 줄어들기 때문에 일반적인 SISD 명령어를 사용하는 것에 비해 미세하게나마 빠른 연산이 가능하다.

벡터나 행렬 이외에도 여러 연산을 한꺼번에 처리해야 할 필요가 있을 때 유용하다. 대량 연산이 많이 필요한 게임, 영상 인코더, 영상 디코더 등에 많이 활용되고 있다.

3 명령어의 종류

3.1 IA32 및 AMD64 프로세서의 SIMD

  • MMX
  • SSE
  • SSE 2
  • SSE 3
  • SSSE 3
  • SSE 4.1
  • SSE 4.2
  • SSE 4a
  • 3DNow!
  • AVX
  • AVX 2
  • FMA 4
  • FMA 3

3.2 ARM 프로세서의 SIMD

  • NEON

4 같이 보기