앞으로 병령처리를 하기 위해 알아두어야 하는 알짜 상식을 정리하겠습니다.

목표는 실제로 코딩을 하여 SIMD에 대해 몸소 느껴보는걸 목표로 두고 있습니다.



Cache memory

컴퓨터 구조를 알아야 하는 이유는 컴퓨터의 처리속도를 이해하기 위함입니다. 나무위키 참고 하였습니다.

레지스터 - 캐시 - 주기억장치 - 보조기억장치 순서 입니다. 레지스터와 캐시는 CPU 내에 포함되어 있습니다.

가장 쉽게 말해 느린 장치는 적게 쓰고 빠른 장치를 많이 쓰면 가장 효율 좋은 프로그램이 됨니다.

SIMD 를 쓰는 이유는 다 이러한 이유가 있기 때문에 사용한다고 생각하시면 되겠습니다. 멀티코어 환경에서는 더욱 그 가치가 돋보이게 됨니다.





명령어주기 - 1참고, 2참고

instruction cycle

컴퓨터의 명령어 주기를 알기위해서는 4개의 의미를 기억해둬야 한다.

Fetch(인출) : 메모리상의 PC가 가리키는 명령어를 CPU로 인출하여 적재.
Decode(해석) : 명령어의 해석. 이 단계에서 명령어의 종류와 타겟 등을 판단한다.
Execute(실행) : 해석된 명령어에 따라 데이터에 대한 연산을 수행한다.
Writeback(쓰기) : 명령어대로 처리 완료된 데이터를 메모리에 기록한다.


PC(Program counter), MAR(Memory address register), MDR(Memory data register)
IR(Instruction register), CU(Control unit), ALU(Arithmetic logic unit)


위키에 설명이 잘되어 있으므로 참고하세요.





단일 명령어 - 단일 데이터 흐름 

SISD(Single Instruction stream, Single Data stream)

가장 일반적으로 사용되는 방법으로 사용자가 일일이 CPU 명령어를 모르더라도 컴파일러가 일반적으로 처리해 주는 기법임으로 명령어를 실행시 마다 매번 메모리를 읽어오기때문에 효율이 떨어집니다. 





단일 명령어 - 복수 데이터 흐름

SIMD(Single Instruction stream, Multiple Data stream)

SISD 기법에서는 하나의 싸이클동안 하나의 데이터 처리를 하지만 SIMD 기법은 복수의 데이터를 처리하는 방법을 말합니다.  컴퓨팅 성능을 높이기 위해서는 최소한의 메모리를 참조(읽기 쓰기)해야 성능이 높아짐을 알 수 있습니다. 이때문에 SIMD 기법은 반복작업이 많은 프로세싱 분야에 많이 사용되고 있으며 openCV, Eigen, Armadillo, IPP등 다양한 라이브러리에서 사용되어 지고 있습니다.






복수 명령어 - 단일 데이터 흐름

MISD(Multiple Instruction stream, Single Data stream)

(위키 참고)


복수 명령어 - 복수 데이터 흐름

MIMD(Multiple Instruction stream, Multiple Data stream)

(위키 참고)



명령어 파이프라인

IP(instruction pipeline)

파이프라이닝기법은 순차적으로 실행하는 프로세서에 적용되는 기술로(단일 명령어 처리는 말하는것으로 이해하고 있다.) 한번에 하나의 명령어를 처리하는것이 아닌  하나의 명령어가 처리중 동시에 복수의 명령어를 처리하는것을 말합니다. 동시에 처리하기 위해서는 반드시 순차적인 명령어가 파이프라인닝이 되어야 합니다.  예를 들어 RISC(Reduced Instruction Set Computer) CPU 에서는 명령어 조합을 통해 연산을 수행 합니다.

이때 캐시 공간을 버퍼로 사용함으로 상대적으로 느린 메모리에 접근은 최소화하게 됨니다.


파이프라인 붕괴 - 명령어 수행 과정중 예외발생

(작업중 예외 상황으로 끼어들었을때 캐시메모리 영역을 초화과하여 저장된 명령어가 손실되었을대는 말하는것인지 궁금함??)


해저드(Hazard) -  파이프라인이 속도가 느려지는 경우를 해저드라고 합니다.







참고 

위키, 위키

나무위키



허접한 내용 봐주셔서 감사합니다. 부족한 내용은 보안 해야겠습니다.




'컴퓨팅' 카테고리의 다른 글

향후 CPU가 발전할 방향?  (0) 2018.02.16
SIMD와 4x4 Matrix 데이터 처리  (0) 2018.02.16
SIMD intrinsics header  (1) 2016.06.07

+ Recent posts