CS/컴퓨터 구조론
컴퓨터 구조론 8장 [고성능 컴퓨터시스템 구조 / 병렬처리의 개념 및 필요성, 병렬처리의 단위]
devrabbit22
2025. 4. 22. 10:41
병렬처리의 개념 및 필요성
- 반도체 소자의 물리적인 특성에 의한 프로세서 속도 상의 한계를 극복할 수 있게 해주는 기술이 병렬처리이다.
병렬처리(parallel processing)
- 다수의 프로세서들을 이용하여 여러 프로그램들을 분담하여 동시에 처리하는 기술
- 실제로 대부분의 고성능 컴퓨터 시스템의 설계에서는 성능 향상을 위한 방법으로서 벼렬처리 기술이 널리 사용되고 있다.
병렬 처리를 실제 구현하기 위해 만족해야 하는 조건
- 많은 수의 프로세서들로 하나의 시스템을 구성할 수 있도록, 작고 저렴하며 고속인 프로세서들의 사용이 가능해야 한다.
- 한 프로그램을 여러 개의 작은 부분들로 분할하는 것이 가능해야 하며, 분할된 부분들을 병렬로 처리한 결과가 전체 프로그램을 순차적으로 처리한 경우와 동일한 결과를 얻을 수 있어야 한다.
첫 번째 조건은 반도체 기술의 발전과 더불어 VLSI의 집적도가 크게 증가함에 따라 만족되고 있다. 즉, 작은 크기의 칩 상에 수천만 개의 트랜지스터들이 집적될 수 있고, 이러한 칩들을 이용하면 저렴한 가격으로 수백 개 이상의 프로세서들을 한 시스템 내에 통합할 수 있게 되었다.
두 번째 조건을 만족시키기 위해 해결해야 하는 문제
- 문제 분할(problem partition)
- 프로세서 간 통신9interprocessor communication)
문제 분할
- 병렬처리를 위하여 하나의 문제를 여러 개로 나누는 작업
- 그러나 프로그램 중에는 반드시 순차적으로 처리되어야 하는 것들도 있기 때문에, 근본적으로 불가능한 경우도 있다. 또한 많은 수의 프로세서들이 제공되더라도 프로그램을 그 수만큼 분할할 수 없거나 균등한 크기로 분할할 수 없는 경우에는, 프로세서의 이용률이 낮아져서 원하는 만큼의 성능 향상을 얻을 수 없기 때문에 문제 분할은 매우 중요하다.
- 이러한 경우 병렬 처리 효과를 높이기 위해 순차적ㅇ로 처리해야 하는 부분을 최소화할 수 있는 병렬 알고리즘의 개바이 필요하게 된다.
- 하나의 프로그램이 여러 개의 작은 부분들로 나누어져서 서로 다른 프로세서들에 으해 처리되는 경우에는 프로세서들 간에 데이터 교환을 위한 통신이 필요하게 된다.
- 그런데 프로세서의 수가 증가하면 통신 선로의 수도 그만큼 더 많아지고, 인터페이스를 위한 하드웨어도 복잡해진다. 그에 따라 프로세서 간 통신을 제어하기 위한 소프트웨어 오버헤드와 하드웨어상의 지연 시간 때문에 통신에 소모되는 시간이 길어져 시스템 성능 향상에 한계가 있게 된다.
여기서 프로세서 간 통신은 프로세서들이 서로 필요한 데이터를 교환하기 위한 통신이다.
- 그 외에도 알고리즘의 병렬서을 표현해줄 수 있는 병렬 프로그램 언어와 컴파일러의 개발도 요구된다. 또한 프로세서들이 각종 하드웨어 자원들(기억장치 및 I/O 장치)을 공유할 수 있도록 상호 배타 매커니즘이 설계되야 하고, 공유 자원들에 대한 경합을 줄이고 이용률을 극대화할 수 있도록 운영체제에 특별한 기능도 추가되어야 한다.
- 고성능 병렬처리 시스템을 개발하기 위해서는 하드웨어 구조, 운영체제, 알고리즘, 프로그래밍 언어, 컴파일러 등 거의 모든 컴퓨터 기술들이 통합되어야 한다.
병렬 처리의 단위
병렬처리에 참여하는 각 프로세서에 분담되는 단위 프로그램의 크기에 따라 다양한 수준의 병렬성(parallelism)들이 존재할 수 있다. 즉, 병렬처리는 다양한 크기의 단위에 대하여 이루어질 수 있다.
- 작업-단위 병렬성(job-level parallelism)
- 이것은 서로 다른 사용자들에 의해 제출된 작업 프로그램들 혹은 한 사용자에 의해 제출된 여러 개의 독립적인 작업 프로그램 단위로 병렬처리를 수행하는 것을 의미한다.
- ex) 성적 관리 프로그램과 실험 데이터 통계 프로그램을 동시에 처리하려 한다면, 그 프로그램은 서로 독립적으로 처리될 수 있다. 만약 컴퓨터 시스템 내에 두 개 이상의 프로세서들이 있다면, 이 두 작업 프로그램들은 각 프로세서에 의하여 병렬로 처리될 수 있다.
- 이러한 단위나 병렬처리는 주로 다수의 사용자 요구를 처리해주는 서버급 시스템이나 슈퍼컴퓨터에서 채택하는 형태이다.
- 이 분류의 시스템들은 대부분 다중 프로세서 구조를 가지고 있으며, 수십 개 혹은 그 이상의 프로세서들로 구성된다.
- 태스크-단위 병렬성(task-level parallelism)
- 하나의 큰 작업 프로그램은 내부적으로 서로 다른 기능을 수행하는 더 작은 프로그램들로 분리될 수 있다.
- ex) 팔과 다리를 가진 로봇이 있다고 가정, 이 로봇을 움직이기 위해 팔 다리에 부착된 여러개의 센서들로부터 정보를 입력받아 파로가 다리를 적절히 제어하도록 명령하는 컴퓨터 프로그램이 필요하다. 그 프로그램은 하나의 작업 프로그램이지만, 여러 개의 태스크(혹은 프로세스)들로 분할될 수 있다. 즉, 두뇌 기능을 처리하는 태스크, 팔의 움직임을 제어하기 위한 태스크 등으로 나누어질 수 있으며, 그들은 병렬로 처리될 수 있다.
- 그 태스크들은 처리되는 도중에 상호 연관되는 정보를 교환해야 할 필요도 있을 것이다.
- 이와 같은 병렬처리도 다중프로세서 시스템이나 대규모 계싼을 분할하여 처리하는 슈퍼컴퓨터에 의해 지원되는 유형이며, 최근에는 멀티-코어 프로세서들도 이 단위의 병렬처리를 칩 내부에서 지원하고 있다.
- 스레드-단위 병렬성(thread-level parallelism)
- 사용자 프로그램 혹은 OS 프로그램은 여러 개의 스레드들로 분할될 수 있다.
- 여기서 스레드란 동시에 처리될 수 있는 가장 작은 크기의 독립적인 단위 프로그램을 말한다.
- 이 단위의 병렬 처리를 멀티-스레딩(multi-threading)이라고 부르며, 주로 동적 실행(dynamic execution) 능력을 가진 멀티코어 프로세서에서 처리될 수 있다.
- 멀티-스레딩이란?
- 가장 작은 크기의 독립적인 단위프로그램인 스레드들을 여러 프로세서 코어들이 병렬로 처리하는 기술이다.
- 명령어-단위 병렬성(instruction-level parallelism)
- 컴퓨터 프로그램은 여러 개의 어셈블리 명령어들로 이루어지는데, 각 명령어는 필요한 입력 데이터를 받아서 연산을 수행한 후에 출력 값을 생성한다.
- 만약 명령어들이 사용할 데이터들 간에 의존관계가 존재하지 않는다면, 여러 명령어들을 동시에 수행하는 것이 가능해진다.
- 그것을 명령어-단위 병렬성이라고 부르며, 슈퍼스칼라 구조를 가진 프로세서들은 이 병렬성을 이용하여 처리 속도를 높일 수 있다.
병렬 컴퓨터의 성능과 효율을 높이기 위해 이와 같은 다양한 수준의 병렬성을 최대한 이용할 수 있어야 하며, 그를 위해서는 시스템 구조와 프로세서 구조가 적절히 설계 및 구현되어야 한다.
Reference
컴퓨터 구조론 개정 5판