SIMD(Single Instruction Multi Data)
SIMD란 Single Instruction Multiple Data의 약자로, 하나의 명령어로 여러개의 데이터를 한번에 처리하는 기법입니다. 일반적인 프로그램의 경우 대부분 SISD(Single Instruction Single Data)으로 구현되어 있고, 이것은 기본적인 폰노이만 컴퓨터가 사용하는 방식입니다. 하지만 동영상 인코딩, 그래픽 렌더링 등의 작업에 SIMD를 적용하였을 때는 성능적으로 큰 이득을 취할 수 있습니다.
SISD VS SIMD
SIMD (Single Instruction, Multiple Data) 아키텍처의 병렬 처리는 동일한 명령어를 사용하여 여러 데이터 요소에 대한 동작을 동시에 수행하는 것을 의미합니다. 이를 통해 여러 데이터 요소에 대한 연산을 병렬로 처리하여 처리량을 향상시킬 수 있습니다. 아래에서 SIMD의 병렬 처리를 자세히 설명합니다.
1. 데이터 병렬성(Data Parallelism): SIMD는 데이터 병렬성을 활용합니다. 이는 여러 데이터 요소에 동일한 연산을 동시에 적용하는 것입니다. 예를 들어, 4개의 정수 값을 더하는 연산을 생각해보면, SIMD는 한 번의 명령으로 이 4개의 정수를 동시에 더할 수 있습니다.
2. 벡터화(Vectorization): SIMD 명령어는 벡터 연산을 수행하는 데 사용됩니다. 벡터 연산은 스칼라 연산과 달리 여러 데이터 요소에 대한 연산을 한 번에 처리합니다. 이러한 연산은 벡터 명령어를 사용하여 프로세서에서 수행됩니다.
3. 병렬 실행(Parallel Execution): SIMD 명령어를 실행하는 프로세서는 여러 실행 유닛을 가지고 있습니다. 이러한 실행 유닛은 여러 데이터 요소에 대한 연산을 병렬로 처리할 수 있는 능력을 가지고 있습니다. 따라서 SIMD 명령어가 실행되는 동안 병렬로 연산을 처리합니다.
4. 데이터 패킹(Data Packing): SIMD 레지스터에 데이터를 패킹하여 저장합니다. 예를 들어, 4개의 정수 값을 담는 SIMD 레지스터에 4개의 정수를 저장할 수 있습니다. 이렇게 데이터를 패킹하면 여러 데이터 요소에 대한 동작을 동시에 수행할 수 있습니다.
5. 벡터 레지스터(Vector Registers): SIMD 연산을 위해 특수한 벡터 레지스터가 사용됩니다. 이러한 레지스터는 여러 데이터 요소를 저장하고 동시에 처리할 수 있는 기능을 가지고 있습니다.
6. 고유한 명령어 집합(Instruction Set): SIMD 아키텍처는 고유한 SIMD 명령어 집합을 제공합니다. 이 명령어들은 벡터 연산, 데이터 로딩 및 저장, 비교 및 분기 등을 수행하기 위한 것입니다.
따라서 SIMD의 병렬 처리는 동일한 명령어를 사용하여 여러 데이터 요소를 동시에 처리함으로써 성능을 향상시키는 방식입니다. 이는 주로 대규모 데이터 처리나 병렬화가 필요한 응용 프로그램에서 많이 사용됩니다.