CPU-level 1 tick 에서 계산하는 CAS 와 같은 연산 외에 매트릭스 연산 같은 병렬적 특성을 지니는 연산을 지원하는 개념인 SIMD 가 있습니다. 이 SIMD 에 대해서 알아보시고, 왜 이게 존재하는지 설명을 해주세요. simd-1

Usage

python에서는 NumPy 같은 라이브러리 등이 C와 Fortran으로 최적화 된 simd 연산을 사용한다. (ARM 아키텍처라는 m1 맥북 같은데서도 잘 동작하나? 챗지피티는 그렇다네ㅎ)

왜 존재하는지?

하나의 명령에 하나의 연산을 하는 SISD 방법과 SIMD 가 어떻게 다르게 동작하는지 어셈블리 코드로 살펴보자.

SISD(Single Instruction Single Data)

SISD C 코드를 어셈블리 명령어로 변환하면, 4회의 add instruction을 포함하여 총 16개의 instruction을 사용한다. simd-2

SIMD(Single Instruction Multiple Data)

반면 SIMD C 코드의 어셈블리 명령은, 1회의 paddd instruction을 포함하여 총 6개의 instruction을 사용한다. simd-3

SIMD로 구현한 코드가 SISD 보다 더 효율적으로 연산한다는 것을 확인할 수 있다. 그래서 SIMD 기술은 벡터/행렬 연산이 많은 어플리케이션을 개발할 때 성능적으로 큰 이득을 취할 수 있다.

SIMD가 적용되는 어플리케이션은 주로 영상처리(이미지/동영상 압축, 컴퓨터 비전), 머신러닝, 암호모듈 구현 등이 있다.

references

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