병렬 컴퓨팅(parallel computing) 또는 병렬 연산은 동시에 많은 계산을 하는 연산의 한 방법이다. 크고 복잡한 문제를 작게 나눠 동시에 병렬적으로 해결하는 데에 주로 사용되며, 병렬 컴퓨팅에는 여러 방법과 종류가 존재한다. 그 예로, 비트 수준, 명령어 수준, 데이터, 작업 병렬 처리 방식 등이 있다.
병렬 컴퓨팅은 오래전부터 주로 고성능 연산에 이용되어 왔으며, 프로세서 주파수의 물리적인 한계에 다가가면서 문제 의식이 높아진 이후에 주목받기 시작했다.
최근 컴퓨터 이용에서 발열과 전력 소모에 대한 관심이 높아지는 것과 더불어 멀티 코어 프로세서를 핵심으로 컴퓨터 구조에서 강력한 패러다임으로 더욱 주목받게 되었다.
마이클 J. 플린은 가장 쉬운 컴퓨터와 프로그램 병렬(과 순차) 분류 시스템 중에 하나를 만들었는데, 이것이 바로
플린의 분류학
(영어: Flynn's taxonomy)이다.
스탠퍼드 대학교의 전기공학과 교수인 마이클 J.플린(Michael J. Flynn)이 1966년에 제안하고 1972년에 확장한 컴퓨터 아키텍처(구조) 분류이며, 현재 널리 사용되고 있는 분류법이다.
플린 분류는 단일 명령어(Single Instruction), 다중 데이터(Multiple Data; SIMD) 처리 방식을 사용하며, 플린이 정의한 네 가지 분류는 아키텍처에서 사용 가능한 동시 명령어 수와 데이터 * 스트림에 기초한다.
단일 명령어 스트림 (Single instruction stream) | 다중 명령어 스트림 Multiple instruction streams) | |
---|---|---|
단일 데이터 스트림 (Single data stream) | SISD(Single Instruction, Single Data stream) | MISD(Multiple Instruction, Single Data stream) |
다중 데이터 스트림 (Multiple data streams) | SIMD(Single Instruction, Multiple Data streams) | MIMD (Multiple Instruction, Multiple Data streams) |
SISD(Single Instruction, Single Data stream)
- 한 번에 데이터 하나를 명령어 하나로 처리하는 기법. 폰 노이만 구조의 컴퓨터는 기본적으로 이 기법을 따른다.
- 현재 대부분의 프로그램은 SISD 방식으로 동작한다. 즉 하나의 명령으로 하나의 데이터를 처리하는 것이고 2개의 데이터를 처리하려면 2번 연산한다.
- 가장 기본적이고 간단한 구조이지만 명령어를 실행할 때마다 명령어와 데이터를 읽어와 처리해야 하기 때문에 효율이 떨어지며 CPU의 성능을 100% 활용하지 못한다.
SIMD(Single Instruction, Multiple Data streams)
- 한 번에 데이터 여러 개를 명령어 하나로 처리하는 기법.
- 보통 벡터 컴퓨터, 배열 처리기에 사용된다.
MISD(Multiple Instruction, Single Data stream)
- 한 번에 데이터 한 개를 여러 명령어로 처리하는 기법.
- CPU에서 흔히 사용하는 파이프라인 기법에 사용된다.
- CPU 밖에서 보자면 데이터 한 개를 넣어 결과 한 개를 얻어내므로 SISD와 크게 구별하지 않는다.
MIMD (Multiple Instruction, Multiple Data streams)
- 한 번에 데이터 여러 개를 여러 명령어로 처리하는 기법.
- SIMD는 여러 데이터를 같은 인스트럭션으로 한꺼번에 처리하지만, MIMD는 여러 데이터를 다른 인스트럭션으로 한꺼번에 처리한다.
- 현대의 동시적 멀티스레드 프로그램들은 모두 MIMD라고 볼 수 있다.
- 인텔 제온 파이, 슈퍼스칼라를 지원하는 모든 멀티코어 프로세서와 대부분의 슈퍼컴퓨터에 사용된다.
출처 :