고성능 컴퓨터시스템 구조
1. 병렬처리의 개념 및 필요성
병렬처리(Parallel Processing)는 정보 처리 속도를 향상시키기 위해 다수의 프로세서들이 여러 개의 프로그램들이나 한 프로그램의 분할된 부분들을 동시에 처리하는 기술입니다. 슈퍼컴퓨터 및 고성능 서버 시스템의 설계 원리에서 핵심적인 부분입니다.
병렬처리를 위한 선결 조건:
- 작고 저렴하며 고속인 프로세서의 사용 가능성:
- 반도체 기술의 발전과 VLSI 집적도 향상으로 가능해졌습니다.
- 프로그램 분할 및 결과 동일성:
- "한 프로그램을 여러 개의 작은 부분들로 분할하는 것이 가능해야 하며, 분할된 부분들을 병렬로 처리한 결과가 전체 프로그램을 순차적으로 처리한 경우와 동일한 결과를 얻을 수 있어야 함"
병렬처리로 인해 야기되는 새로운 문제들:
- 병렬 프로그램 언어와 컴파일러 개발
- 상호 배타 메커니즘(mutual exclusion mechanism) 지원
- 공유 자원에 대한 경합(contention)을 줄이고 이용률을 극대화할 수 있는 운영체제 개발
필요한 관련 기술:
- 문제 분할(Problem Partition): 문제(혹은 프로그램)를 병렬처리를 위해 여러 개로 나누는 것.
- 프로세서간 통신(Inter-processor Communication): 분할된 부분을 처리하는 프로세서 간 데이터 교환 메커니즘.
2. 병렬처리의 단위
병렬처리는 다양한 수준에서 이루어질 수 있습니다.
- 작업-단위 병렬성(Job-level parallelism):
- 독립적인 작업 프로그램(job program) 단위의 병렬처리. (예: 성적관리 프로그램과 실험 데이터 처리 프로그램)
- 태스크-단위 병렬성(Task-level parallelism):
- 하나의 큰 작업을 기능에 따라 분할한 작은 프로그램(태스크) 단위의 병렬처리. (예: 로봇 제어 프로그램)
- 스레드-단위 병렬성(Thread-level parallelism):
- 동시에 처리될 수 있는 가장 작은 크기의 독립적인 단위 프로그램인 스레드 단위의 병렬처리.
- 명령어-단위 병렬성(Instruction-level parallelism):
- 데이터 의존성이 존재하지 않는 여러 개의 명령어들을 동시에 수행하는 병렬처리.
3. 병렬 컴퓨터의 분류
3.1. Flynn의 분류 (구조적 특징에 따른 분류)
Flynn의 분류는 프로세서들이 처리하는 명령어 스트림(instruction stream)과 데이터 스트림(data stream)의 수에 따라 컴퓨터를 분류합니다.
분류 | 명령어 스트림 | 데이터 스트림 | 설명 |
---|---|---|---|
SISD | 단일 | 단일 | 한 번에 한 개씩의 명령어와 데이터를 순서대로 처리하는 단일 프로세서 시스템. 파이프라이닝, 슈퍼스칼라 구조 이용 |
SIMD | 단일 | 복수 | 여러 개의 프로세싱 유니트(PU)들이 하나의 명령어 스트림을 실행, 여러 데이터 스트림을 동시에 처리 (예: 배열 프로세서) |
MISD | 복수 | 단일 | N개의 프로세서들이 서로 다른 명령어를 실행하지만 데이터 스트림은 한 개. 실제 구현 사례는 없음 |
MIMD | 복수 | 복수 | N개의 프로세서들이 서로 다른 명령어와 데이터를 처리. 밀결합/소결합 시스템으로 분류 |
- 밀결합 시스템: 공유-기억장치 구조(shared-memory architecture), 다중프로세서 시스템(multiprocessor system)
- 소결합 시스템: 지역 기억장치(local memory)를 가진 독립적 컴퓨터 모듈, 메시지 전송(message-passing) 방식, 다중컴퓨터 시스템
3.2. 기억장치 액세스 모델에 따른 분류
- 균일 기억장치 액세스(UMA: Uniform Memory Access) 모델:
- 모든 프로세서가 상호연결망에 의해 접속된 주기억장치를 공유, 동일한 시간으로 액세스
- 하드웨어가 간단, 프로그래밍 용이, 시스템 크기에 한계
- 불균일 기억장치 액세스(NUMA: Non-uniform Memory Access) 모델:
- 다수의 UMA 모델이 상호연결망에 의해 접속, 분산 공유-기억장치 구조
- 액세스 시간은 기억장치 위치(지역/전역/원격)에 따라 다름
- 무-원격 기억장치 액세스(NORMA: No-Remote Memory Access) 모델:
- 프로세서가 원격 기억장치를 직접 액세스할 수 없음, 메시지-전송 상호연결망
- 분산-기억장치 시스템, 매시/하이퍼큐브/토러스 등 상호연결망 사용
3.3. 시스템 구성방법에 따른 분류
- 대칭적 다중프로세서(SMP):
- 64개 이하 프로세서, 완전-공유 구조(shared-everything), 하나의 OS, 동등 권한
- 대규모 병렬프로세서(MPP):
- 무공유 구조(shared-nothing), 수백~수천 개 노드, 메시지 전송 방식
- 캐시-일관성 NUMA(CC-NUMA):
- 독립 노드(UMA/NUMA)가 상호연결망으로 연결, 캐시 및 주기억장치 일관성 유지, 전역 주소공간
- 분산 시스템(Distributed System):
- 독립 노드가 네트워크로 연결, loosely-coupled system
- 클러스터 컴퓨터(Cluster Computer):
- 고속 LAN/스위치로 연결된 PC/워크스테이션 집합, 단일 시스템 이미지(SSI), 저비용/고가용성
4. 다중 프로세서 시스템 구조 (MIMD 조직)
MIMD 조직의 다중 프로세서 시스템은 여러 개의 프로세서들이 비동기적으로 프로그램을 실행하는 시스템입니다. 기억장치 모듈을 사용하는 방식에 따라 공유-기억장치 시스템과 분산-기억장치 시스템으로 분류됩니다.
4.1. 공유-기억장치 시스템 구조 (Shared-Memory System)
- 특징: 밀결합 구조, 주기억장치가 모든 프로세서에 의해 공유
- 장점: 프로그래밍 용이, 프로세서 이용률 극대화
- 단점: 통로(버스/상호연결망)상 통신량 증가로 경합 및 지연, 프로세서 수 증가 시 선형적 성능 향상 어려움
상호연결 구조:
- 버스(Bus): 공유-버스(하드웨어 간단, 버스 경합), 다중-버스(경합 완화, 계층버스)
- 크로스바 스위치(Crossbar Switch): 완전 연결성, 비용/복잡도 높음
- 다단계 상호연결망(MIN): 크로스바와 버스 중간 복잡성 (예: 오메가 네트워크)
4.2. 분산-기억장치 시스템 구조 (Distributed-Memory System)
- 특징: 소결합 구조, 각 프로세서가 자신의 지역 기억장치(local memory) 소유, 메시지 전송 이용
- 장점: 공유 자원 경합 감소
- 단점: 통신 프로토콜에 의한 지연 증가
주요 상호연결망 (네트워크 지름 고려):
- 선형 배열(Linear Array): 네트워크 지름 N-1
- 링(Ring): 양방향 N/2, 단방향 N-1, 코달 원형 변형
- 트리(Tree): 층수 k, N=(2^k-1) 노드, 지름 2(k-1), 팻 트리(fat tree)로 병목 해결
- 매시(Mesh Network): Illiac IV, MPP, DAP, CM-2, Intel Paragon 등, 토러스 네트워크(torus network)로 확장 가능
- 하이퍼큐브(Hypercube): m=log2N 차원, E-큐브 라우팅으로 자동 경로설정
요약
- 병렬처리의 개념과 필요성
- 여러 프로세서가 동시에 작업을 처리하여 정보 처리 속도 향상
- 병렬처리의 단위
- 작업 단위, 태스크 단위, 스레드 단위, 명령어 단위 병렬성
- 병렬 컴퓨터의 분류
- Flynn의 분류: SISD, SIMD, MISD, MIMD
- 기억장치 액세스 모델: UMA, NUMA, NORMA
- 시스템 구성 방식: SMP, MPP, CC-NUMA, 분산 시스템, 클러스터 컴퓨터
- MIMD 기반 다중프로세서 시스템 구조
- 공유-기억장치 구조: 프로그래밍 용이, 경합 발생 가능
- 분산-기억장치 구조: 경합 감소, 통신 지연 발생 가능
- 슈퍼컴퓨터 및 고성능 서버 설계의 기본 원리 이해에 중요