-
SISD / SIMD / MISD / MIMD전공/시스템프로그래밍 2020. 6. 8. 02:32
Flinn(플린)의 컴퓨터 분류로 보았을 때 컴퓨터는 크게 4가지로 나뉜다.
* SISD(Single Instruction Single Data stream)
하나의 명령어가 하나의 데이터를 처리한다.
* SIMD(Single Instruction Multi Data stream)
하나의 명령어로 여러 개의 데이터를 처리한다. 예시에도 나오지만 배열이 존재할 때 주로 사용된다.
예시)
for(i=1; i<=20; i++) { a[i] = b[i] + c[i] // a,b,c는 배열 }
이렇게 하나의 반복문으로 20개의 데이터(상대주소 1부터 20까지)를 처리하는 경우를 SIMD라고 한다.
* MISD(Multi Instruction Single Data stream)
여러 개의 명령어로 하나의 데이터를 처리하는 방식이다. 교수님께서 이론적으로 존재는 하지만 거의 쓰지 않는다고 하셨다. 예시를 들어주시긴 하셨는데 내가 제대로 이해했는지는 모르겠다.
예시)
MOV A, B // B의 내용을 A로 옮김. MOV 연산이 하나의 명령
MOV ADD A, B // 두 개의 연산자로 A, B를 연산하는 방식. 이게 MISD의 예시.
* MIMD(Multi Instruction Multi Data stream)
'한 번'에 여러 개의 명령어로 여러 개의 데이터를 처리하는 방식이다. 여기서 말하는 '한 번'은 CPU의 실행 단위인 '한 클럭'을 의미한다. 슈퍼스칼라 구조(한 클럭에 두 개의 명령어를 실행)가 MIMD에 해당된다.
예시) <나무위키의 설명을 참고했습니다>
SIMD)
(10, 10, 10, 10) → (2, -4, 5, 3) → (4, 7, 2, 9)
첫번째 데이터 스트림 + 두번째 데이터 스트림 - 세번째 데이터 스트림 = (12, 6, 15, 13) → (8, -1, 13, 4)
즉, 여러 데이터에 대해 모두 동일한 연산만을 적용할 수 있다.
MIMD)
(10, 10, 10, 10) → (2, -4, 5, 3) → (4, 7, 2, 9)
(+, -, *, %) → (-, +, %, *) 적용 = (12, 14, 50, 1) → (8, 13, 0, 9)
MIMD를 활용하면 병렬로 적용할 수 있는 연산을 모두 다르게 줄 수 있는 것이다.
'전공 > 시스템프로그래밍' 카테고리의 다른 글
인텔 프로세서의 내부 구조 (1) 2020.06.08 실수를 비트로 표현하는 방법, 부동소수점 (0) 2020.06.08 연산 단위, 컴퓨터 조직, 명령어 실행의 4단계 (0) 2020.06.08 링커, 로더, 번역기(Translator), 프로그램 실행과정 (0) 2020.06.06 로더의 4단계 (0) 2020.06.06