본문 바로가기

SIMD

[SIMD 병렬 프로그래밍]범용 레지스터 SIMD 프로그래밍을 하기 위해선 C++ 코드 안에 어셈블리어로 구현을 하는데 아래와 같이 _asm{ } 안에 구현을 하게 된다. 여기서 eax, ebx 등은 지정된 값인데, 바로 범용 레지스터라고 하는 부분이다. 레지스터는 CPU에 바로 저장이 되는 영역으로 속도가 매우 빠른 반면 용량은 작다. 그 중에서 범용 레지스터는 연산을 위해서 쓰이는 부분들인데, 요즘의 CPU에서는 메모리에서 레지스터로 데이터를 불러와 연산을 하고 결과를 다시 메모리로 돌려보내게 된다. 비쥬얼 스튜디어에서 위와 같이 디버깅 과정에서 레지스터를 보려면 Debug > windows > registers 를 선택하면 된다. 각 범용레지스터는 그 역할이 있는데 그것은 다음과 같다. - EAX(Accumulator Register) 누.. 더보기
[SIMD 병렬 프로그래밍]MMX, SSE, AVX MMX, SSE, AVX는 모두 SIMD 명령어셋인데, cpu 차원에서 지원을 하는 것이다. 기술적으로 MMX -> SSE -> AVX로 발전되어서 최근의 CPU는 AVX를 지원한다. MMX(MultiMedia eXtension) 1997년 펜티엄 CPU에 탑재되었고, SSE(Streaming SIMD Extensions)는 1999년 펜티엄 III CPU부터 탑재되었다고 한다. SSE는 MMX가 가지고 있던 부동소수점 연산에서의 문제등을 해결하였다. AVX(Intel Advanced Vector Extensions)는 최근 CPU들에 적용이 되고 있는 명령어 칩셋이다. 최신의 AVX 명령어셋은 256bit 연산을 한번에 처리 할 수 있다. 더보기
[SIMD 병렬 프로그래밍]SIMD 프로그래밍이란? SIMD는 Single Instruction Multiple Data의 약자이다. 한번의 지시로 한번에 여러 연산을 동시에 일어나도록 하는 것을 의미한다. 일반적으로 하는 프로그래밍은 모두 SISD 즉 Single Instruction Single Data이다. 즉 한번의 지시로 한번의 연산을 하는 것을 의미한다. 펜티엄 이전의 CPU는 SISD만 지원을 하였는데, 현재의 CPU는 SIMD를 지원한다. 인털 C++ 컴파일러를 쓰기는 하는데, 인텔 CPU만 되는 것은 아니다. 이런 연산이 가능한 이유는 CPU가 한번에 처리할 수 Data양이 늘었기 때문이다. 128bit를 하나의 package로 처리를 하는 CPU라면은 byte연산의 경우 16개 데이타를 하나의 package로 묶어서 한번에 처리가 가능을.. 더보기