본문 바로가기
공부

[자료구조] SIMD (Single Instruction Multiple Data)

by MY블로그 2023. 6. 19.

SIMD란 ?

하나의 명령어로 여러개의 데이터를 한번에 처리하는 병렬 방식의 기법을 의미 합니다.

즉 CPU에서 지원되는 명령어 셋으로 하나의 명령어로 동일한 형태나 구조의 여러 데이터를 한번에 처리 할 수 있는 기법입니다.

 

일반적인 프로그램은 SISD(Single Instruction Single Date)의 방식으로 구현되어있습니다.

대표적으로 DirecX, OpenGl 은 SIMD를 지원하고 있습니다.

SIMD는 SISD보다 동영상, 그래픽 렌더링 등의 작업이 성능이 뛰어납니다.


SISD & SIMD

출처 : https://m.blog.naver.com/fs0608/221650925743

4개의 32비트 정수 A0 ~ A3 그리고 B0 ~ B3 를 각각 덧셈을 하기 위해서는 총 4번의 연산과정이 필요합니다.

하지만 SIMD 연산에서는 4개의 다른 연산이아닌 한번의 연산으로 가능 합니다.

 

위의 과정을 C언어 코드로 살펴볼 경우는 다음과 같습니다.

출처 : https://m.blog.naver.com/fs0608/221650925743

아래의 예제를 참고하도록 합니다.

SISD 연산의 경우 총 16번의 instruction 을 사용하지만

SIMD 연산의 경우 총 6번만의 instruction 을 사용한 모습을 볼 수 있습니다.

 

SISD 연산

출처 : https://m.blog.naver.com/fs0608/221650925743

SIMD 연산

출처 : https://m.blog.naver.com/fs0608/221650925743

위처럼 4개의 32비트간의 덧셈 연산을 수행하는 add함수를 구현하고자 할 때 기존 SISD 보다 SIMD의 방식이 더욱 효율적인것을 쉽게 확인 할 수 있습니다.

때문에 SIMD 기술은 벡터 & 행렬 연산이 필요한 구조에 적합한것(효율적인것)으로 볼 수 있습니다.

 

벡터는 (x,y,z)  의 형태로 표현이 되는데 이때 계산이 x에 한번 y에 한번 z에 한번 총3번 연산이 이루어지는 것이아닌 한번만의 연산으로 결과를 낼 수 있기 때문에 유용 합니다.

행렬또한 마찬가지로 유용하다고 볼 수 있습니다.

 

실제 코드로 구현해 본 결과물등은 다른 블로그를 참조 하도록 합니다.

 

SIMD (Single Instruction Multiple Data)에 대한 집중탐구!

안녕하세요~! 오늘은 파수테크 블로그 첫번째 시간으로 SIMD (Single Instruction Multiple Data)...

blog.naver.com

 

 

SIMD 병렬 프로그래밍

SIMD 병렬 프로그래밍이 무엇인지 알아봅시다.

stonzeteam.github.io

'공부' 카테고리의 다른 글

[CS] 컴퓨트 쉐이더(Compute Shader)  (0) 2023.07.11
[CS] GPGPU  (0) 2023.07.11
[C++] 람다 표현식 (Lambda Expression)  (0) 2023.05.27
[자료구조] 함수포인터  (0) 2023.05.24
[C++/DX11] 3D 가위바위보  (1) 2023.05.21

댓글