ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 활용하면 병렬로 적용할 수 있는 연산을 모두 다르게 줄 수 있는 것이다.

    댓글

Designed by Tistory.