1. 병렬 컴퓨팅 (Parallel Computing) 이란?
ㅇ 프로세서 관점에서, (병렬성)
- `여러 프로그램들` 또는 `한 프로그램의 쪼개진 부분들`을,
- 2 이상의 프로세서들이, 동시에 분담하고 협력하면서, 병렬 수행하는 것
ㅇ 프로그램 실행 관점에서, (병행성) ☞ 병행성 (Concurrency) 참조
- 큰 문제를 작게 쪼갠 여러 문제(또는 프로그램)들을 대상으로,
- 한번에 1 이상의 작업들이 동시에 협력하여, 병행 수행이 가능토록 지원하는 것
2. 병렬성 구현 형태 例)
ㅇ 하나의 주기억장치에, 여러 프로세서들이 연결되고,
ㅇ 공통의 주기억장치를 나눠쓰며,
ㅇ 서로에게 메세지를 전달함(남김)으로써, 작업/활동/태스크가 조정되며,
ㅇ 큰 작업 중 일부를 또다른 유형의 타 프로세서에게 요청하는 등에 의해,
ㅇ 여러 밀접한 테스크들이 협력할 수 있게 함
3. 병렬성 수준에 따른 병렬 처리의 단위
ㅇ 작업 수준 병렬성 (Job Level)
ㅇ 태스크 수준 병렬성 (Task Level) 또는 프로세스 수준 병렬성
- 병렬 수행되는 태스크 하나하나가 독립적인 응용 프로그램이지만, 서로 협력함
ㅇ 데이터 수준 병렬성 (Data Level)
- 큰 데이터(워드 등) 내부에 작은 데이터에 대한 병렬 연산
ㅇ 스레드 수준 병렬성 (Thread Level)
- 멀티 스레드
ㅇ 명령어 수준 병렬성 (Instruction Level) (가장 작은 단위의 병렬 처리)
4. 병렬 컴퓨팅의 구분
ㅇ 병렬화 형태에 따른 구분
- 데이터 병렬화
. 동일한 데이터의 부분 집합들을, 다른 컴퓨팅 코어에 분산시켜, 동일 연산 수행
- 태스크 병렬화
. 여러 컴퓨팅 코어에, 데이터가 아니라 작업(태스크)을 분산시켜 수행
ㅇ 구현 규모에 따른 구분
- 소규모 : 멀티코어 프로세서 등
. 한 칩 또는 한 장치 내에 다수의 프로세서(코어)를 집적한 마이크로 프로세서를 통해 구현
- 대규모 : 클러스터, 그리드 컴퓨팅 등
. 다수의 CPU 또는 컴퓨터 등을 연결해서 분산처리 구현
ㅇ 컴퓨터 조직 상의 구분 (제어 방법에 따른 `Flynn`의 분류)
- 단일 명령어 스트림 - 단일 데이터 스트림 (SISD)
. (SISD, Single Instruction Stream - Single Data Stream)
. SISD의 병렬처리 구현 예 : 파이프라인 구조
- 단일 명령어 스트림 - 복수 데이터 스트림 (SIMD)
. (Single Instruction Stream, Multiple Data Stream)
. 여러 데이터들에 대해, 동일 연산을 동시 처리 가능
.. 개별로 지역 메모리를 갖는 n개의 동일 프로세서(프로세싱 유니트,PU)로 구성되나,
.. 하나의 제어 유니트(CU)에 의해, 전체적인 동작이 통제됨
. 즉, 모든 프로세싱 유니트(PU)들은 각 단계 마다 동일 연산을 수행하지만,
.. 각각 서로다른 데이터들을 처리하는,
.. 데이터 관점의 병렬성(data-level parallelism) 구현
- 복수 명령어 스트림 - 단일 데이터 스트림 (MISD)
. (Multiple Instruction Stream, Single Data Stream)
. 실제 병렬처리 구현 불가하여 이론적으로 만 제시됨
- 복수 명령어 스트림 - 복수 데이터 스트림 (MIMD)
. (Multiple Instruction Stream, Multiple Data Stream)
. 다수의 프로세서들이 각각 독립적으로 프로그램을 수행