{{위키데이터 속성 추적}}
[[파일:MIMD.svg|오른쪽|225px]]
{{플린의 분류학}}
'''복수명령-복수자료'''({{Llang|en|MIMD,'''M'''ultiple '''I'''nstruction, '''M'''ultiple '''D'''ata }})은 전산에서 병렬화의 한 기법이다. MIMD를 사용하는 기계는 비동기적이면서 독립적으로 동작하는 여러개의 프로세서가 있다. 언제든지 각각의 다른 프로세서들은 각기 다른 데이터를 이용하는 각기 다른 여러 명령어들이 실행할 수 있다. MIMD기계는 [[공유 메모리]]이거나 [[분산 메모리]]이며 이러한 분류는 MIMD가 어떻게 메모리를 이용하느냐에 따라 나뉜다. 공유 메모리 기계는 [[버스]]기반, 확장 또는 [[계층]]적인 형태일 수 있다. 분산 메모리 기계는 [[하이퍼큐브]]나 [[메시 네트워킹|메시]] 상호연결 기법을 사용한다. MIMD는 [[병렬 컴퓨팅#플린의 분류학|플린의 분류학]]에서 정의된 4개 분류중의 하나이다.

== 공유 메모리 모델 ==
프로세서들은 모두 소프트웨어적으로 또는 하드웨어적으로 전역 가능한 메모리에 연결되어 있다. [[운영 체제]]는 [[메모리 일관성]](Memory coherence)을 유지한다.<ref name="Ibaroudene-slides">Ibaroudene, Djaffer. "Parallel Processing, EG6370G: Chapter 1, Motivation and History." Lecture Slides. [[St. Mary's University, Texas|St Mary's University]], [[San Antonio, Texas]]. Spring 2008.</ref> 프로그래머의 관점에서 이 메모리 모델은 분산 메모리 모델보다 이해하기가 쉬운 장점이 있다. 또 다른 장점은 메모리 일관성은 프로그램에 의해서가 아니라 OS에 의해서 관리된다. 두가지 알려진 단점은, 첫째는 서른두개 이상의 확장성이 어려우며, 둘째는 분산 메모리 모델보다 유연하지가 않다.<ref name="Ibaroudene-slides"/> 기타 다른 공유 메모리 모델로는 UMA(Uniform Memory Access), COMA(Cached Only Memory Access) 와 [[불균일 기억 장치 접근|NUMA]]({{lang|en|Non-Uniform Memory Access}})가 있다.<ref>Tanenbaum, Andrew S. Organizacion de Computadoras Un Enfoque Estructurado, pag 551</ref>

=== 버스 기반 ===
공유 메모리가 있는 MIMD기계는 중앙에 위치한 공통의 메모리를 가지고 있는 프로세서들이 있다. 가장 간단한 형태에서, 모든 프로세서들은 메모리를 연결하는 버스에 연결되어 있다. 이러한 배치를 버스기반 점(bus-base point)이라 하며, 버스에서 많은 충돌이 생기는 지점이다.

=== 계층 ===
계층적 공유 메모리 구조의 MIMD기계는 프로세서에게 각기 다른 메모리를 사용하게 하기 위해서 계층적 버스를 사용한다. 다른 보드에 있는 프로세서들은 내부-중심 버스들을 통해서 통신을 하게 된다. 버스들은 보드간의 통신을 지원한다. 이런 형태의 구조로 기계는 구천개 이상의 프로세서들을 지원할 수 있다.

== 분산 메모리 ==
분산 메모리 MIMD기계에서는 각 프로세서는 각각의 자신만의 메모리 영역이 있으며, 각 프로세서는 다른 프로세서의 메모리에 대해서 접근할 방법이 없다. 데이터를 공유하기 위해서는 하나의 프로세서에서 다른 프로세서로 메시지로서 전달되어야 한다. 이러한 기계에서는 공유 메모리가 없기 때문에 충돌은 커다란 문제가 되지 않는다. 서로 서로 직접적으로 많은 수의 프로세서들을 연결하는 것은 경제성면에서 실현성이 없다. 이러한 많은 직접 연결을 피하기 위한 방법은 각 프로세서를 적은 수의 프로세서와 연결하는 것이다. 이러한 설계 방법은 비효율적일 수 있다. 왜냐하면 하나의 프로세서에서 다른 프로세서로 메시지 연결통로로 메시지를 전달하기 위해서는 추가적인 시간이 필요하기 때문이다. 단순한 메시지 전달에도 많은 시간이 필요하다. 이러한 시간 낭비를 줄이기 위해서 하이퍼큐브나 메시 네트워킹 방법을 사용한다.
분산 메모리의 예는 [[MPP]](massively parallel processors)와 COW (Clusters of Workstations)이다. MPP는 복잡하고 비싸다. 많은 슈퍼컴퓨터들은 [[광대역 네트워크]]에 연결되어 있다. 예를 들면 하이퍼큐브나 메시 상호연결 등이다. COW는 MPP의 몇분의 일가격밖에 안 된다.<ref>Tanenbaum, Andrew S. Organizacion de Computadoras, Un Enfoque Estructurado, pag 551</ref>

=== 초입방체 상호연결 네트워크 ===
4차원 이상에서 모든 변의 길이가 같은 도형을 [[초입방체]]라고 한다. 네개의 프로세서가 [[초입방체]]로 연결되어있는 MIMD 분산 메모리 기계에서, 각 프로세서와 메모리 모듈은 각 정사각형의 꼭짓점에 위치해 있다. '''시스템의 직경'''은 하나의 프로세서가 가장 먼 곳에 있는 프로세서로 메시지를 전달하는 데 걸리는 최소 단계 수를 말한다. 예를 들면 2-초입방체의 직경은 1이다. 여덟개의 프로세서가 있는 초입방체에서는 각각의 프로세서와 메모리는 [[정육면체]]의 각 꼭짓점에 위치해 있으며 직경은 3이다. 일반적으로 2<sup>N</sup>개의 프로세서가 있는 시스템은 N개의 다른 프로세서들과 직접 연결되어 있으며 시스템의 직경은 N이다. 하나의 단점은 2의 제곱으로 구성되어야 한다는 것이다. 따라서 기계는 응용 프로그램이 실제로 필요한 프로세서 수보다 더 많은 프로세서로 구성되어야 하는 경우가 생긴다.

=== 메시 상호연결 네트워크 ===
메시 상호연결 네트워크로 연결된 MIMD 분산 메모리 기계에서 프로세서들은 2차원 그리드에 위치한다. 각 프로세서는 4개의 바로 옆 프로세서에 연결된다. 하이퍼큐브대비 장점은 2의 제곱으로 구성되지 않아도 된다는 것이다. 단점은 시스템의 직경이 네개 이상의 프로세서가 있는 시스템에서 하이퍼큐브 시스템보다 크다는 것이다.

== 같이 보기 ==
* [[대칭형 다중 처리|SMP]]
* [[불균일 기억 장치 접근|NUMA]]
* [[멀티 코어]]
* [[슈퍼스칼라]]
* [[VLIW]]

== 각주 ==
{{각주}}

{{CPU 기술}}
{{병렬 컴퓨팅}}

{{전거 통제}}

[[분류:병렬 컴퓨팅]]
[[분류:마이크로프로세서]]
[[분류:플린 분류]]