parallel processing ; 병렬처리

컴퓨터에서 병렬처리란 프로그램 명령어를 여러 프로세서에 분산시켜 동시에 수행함으로써 빠른 시간 내에 원하는 답을 구하는 작업을 일컫는다. 초기의 컴퓨터에서는 한번에 오직 하나의 프로그램만 수행되었다. 예를 들어 계산 수행에 1시간 걸리는 프로그램과, 테이프에서 데이터 읽기에 1시간 걸리는 프로그램이 있다면, 이 두 프로그램을 수행시키는데는 총 2시간이 소요되었다. 초기의 병렬처리는 이 두 프로그램이 섞여서(interleaved) 수행되도록 하는 방법이었다. 즉 한 프로그램이 입출력을 시작하여 끝나기를 기다리는 동안, 다른 계산 수행을 하는 프로그램이 실행될 수 있도록 하여 1시간 조금 더 걸리는 시간에 작업을 마치는 방법이었다.

다음 단계의 병렬처리는 멀티프로그래밍이었다. 멀티프로그래밍 시스템에서는 여러 사용자가 수행시킨 여러 프로그램이 있을 때 한 프로그램이 프로세서를 짧은 시간 동안 차지하여 작업을 수행시키고, 운영체계가 그 다음 프로그램이 수행되도록 하는 방식으로 작업을 하였다. 사용자에게는 모든 프로그램이 동시에 수행되는 것처럼 보인다. 이 시스템이 처음 봉착한 문제는 여러 프로그램이 한 자원을 집중적으로 사용할 때 효율적으로 해결해주지 못해서 나타나는 데드록 현상이었다.

벡터 프로세싱은 한 번에 한 개 이상의 일을 수행하려는 또 다른 시도였다. 이런 시스템에서는 한 개의 명령어로 두 어레이의 데이터를 더하거나 뺄 수 있는 기능이 추가되었다. 이런 기능은 벡터나 매트릭스 계산이 빈번히 나타나는 많은 엔지니어링 프로그램에서 매우 유용하게 이용되었다. 하지만 이런 계산을 많이 필요로 하지 않는 프로그램에서는 큰 효용이 없었다.

그 다음에 개발된 병렬처리의 기법은 멀티프로세싱이었다. 이 시스템에서는 두 개 이상의 프로세서가 한 프로그램을 같이 수행하여 작업을 마쳤다. 초기 단계에서는 주종(master/slave)관계의 구조였다. 한 프로세서(master)가 시스템의 모든 작업을 관장하도록 설계되었고, 다른 프로세서(slave)는 주 프로세서가 부여한 일만을 수행하였다. 이런 구조로 설계된 것은 그 당시에는 여러 프로세서가 협동하여 시스템 자원을 사용하는 것에 대한 기술이 부족했었기 때문이다.

이러한 문제를 해결하면서 나온 것이 SMP이다. SMP에서는 각 프로세서가 동등하게 시스템 작업의 흐름을 제어하는 기능이 있다. 원래의 목표는 SMP를 단일 프로세서가 멀티 프로그래밍을 하는 것처럼 보이게 하는 것이었다. 하지만 엔지니어들은 어떤 명령어의 순서를 바꾸어 실행시킴으로써 성능을 10~20% 향상시킬 수 있다는 것을 알아냈고, 프로그래머들은 좀더 복잡하게 프로그램을 하도록 주문 받게 되었다 (이러한 것은 두 개 이상의 프로그램이 같은 인자에 읽기나 쓰기를 동시에 실행할 때에만 나타난다. 따라서 복잡하게 프로그램해야 되는 경우는 소수의 특정한 프로그래머에게만 필요하다).

SMP시스템의 프로세서 수가 증가함에 따라 시스템의 한 편에서 다른 모든 부분으로 데이터를 전파시키는데 걸리는 시간도 증가했다. 프로세서의 수가 수십 개를 넘어가면 프로세서 수를 증가시킴으로 얻어지는 성능 향상이 너무 적어지게 된다. 전파 속도가 길어지는 문제를 해결하기 위하여 메시지 패싱 시스템이 고안되었다. 이런 시스템에서는 데이터를 공유한 프로그램이 특정 인자에 새로운 값이 할당되었다는 것을 알리기 위해 메시지를 전송한다. 그 인자의 새로운 값을 시스템의 모든 부분에 방송하는 대신에 그 값을 필요로 하는 프로그램에게만 전송한다.

공유 메모리를 사용하는 대신 프로그램간 메시지 전송을 위해 네트웍를 이용하는 방식도 등장했다. 이렇게 함으로써 한 시스템 내에 수백 개나 수천 개의 프로세서가 효율적으로 함께 작동할 수 있게 되었다(확장성이 좋다는 표현을 쓴다). 이러한 시스템을 MPP시스템이라 부른다.

MPP에서 효율적으로 수행되는 프로그램들은 방대한 데이터를 처리할 때 프로그램을 여러 독립적인 부분으로 나누어 실행시킬 수 있는 것들이다. 예를 들어 데이터마이닝 같은 경우 정적인 데이터베이스에 대하여 여러 가지 독립적인 검색을 수행한다. 또 체스 게임 같은 인공지능에서는 여러 가지 다른 수를 분석하여 볼 필요가 있다. 많은 경우 MPP시스템은 프로세서의 클러스터로 구성된다. 각 클러스터는 SMP처럼 작동하며, 메시지 패싱은 클러스터간에서만 일어난다. 인자를 어드레싱하는 것이 메시지를 통해서나 메모리 어드레스를 통해 가능하기 때문에 어떤 MPP시스템은 NUMA 시스템이라 부른다.

SMP는 비교적 프로그래밍이 간편하지만 MPP는 그렇지 않다. SMP시스템은 다뤄야 할 데이터 량이 너무 방대하지 않다면 거의 모든 종류의 프로그램에 잘 맞는다. 하지만 방대한 데이터를 다루는 데이터마이닝은 MPP만이 다룰 수 있다.


이 정보는 1999년 6월 28일에 수정되었으며, 강성룡님께서 도움을 주셨습니다.
영어판(whatis.com)