SIMD
- Single Instruction Multiple Data
- Intel/AMD/ARM CPU 에서는 아키텍처 모델에 따라 SIMD 기능을 지원
- Intel(AMD) : MMX,SSE,SSE2,AVX,AVX2,AVX512F
- SSE (Streaming SIMD Extensions)
- 128 비트 레지스터 지원
- 4개 float, 2개 double 동시 처리
- AVX (Advanced Vector Extension)
- 256 비트 레지스터 지원
- 8개 float, 4 개 double 동시 처리
- ARM : NEON
구현 방법
- SIMD 는 직접 어셈블리로 구현하거나, Intrinsic function 을 이용하거나, SIMD 명령어 직접 사용. SIMD 명령어들은 CPU 명령어 임.
- SISD 보다 30~100% 성능 개선
- Intrinsic function (내장 함수):
- inline function 으로 모습은 함수와 동일하지만 어셈블리 명령어와 1:1 로 매칭되어 좀 더 쉽게 SSE 를 이용 할 수 있게 해주는 내장 함수
- double underscore (__) 로 표시
- ex:
_mm_<intrin_op>_<suffix>
__CLREX void__CLREX(void);
- `MCR MCR2'
출처 :
https://m.blog.naver.com/fs0608/221650925743
https://stonzeteam.github.io/SIMD-%EB%B3%91%EB%A0%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/
https://bab2min.tistory.com/601#:~:text=SSE%EC%97%90%EC%84%9C%EB%8A%94%20128%EB%B9%84%ED%8A%B8%EC%9D%98,%EB%8F%99%EC%8B%9C%EC%97%90%20%EC%B2%98%EB%A6%AC%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.