[Computer Architecture] Multiprocessor

impala·2023년 2월 2일
0
post-thumbnail

Multiprocessor

다중 프로세서란 컴퓨터 시스템 한 대에 둘 이상의 CPU를 이용하여 병렬로 처리하는 것을 가리킨다

다중 프로세서를 사용하는 이유는 여러대의 CPU를 연결하여 더 높은 성능을 내기 위함이다. 구체적으로는 프로세스나 쓰레드 레벨의 병렬화를 통해 각각의 CPU에서 다른 프로그램들이 동시에 실행되는 것을 목표로 한다

Processor의 종류

프로세서의 종류는 instruction과 data stream에 따라 4가지로 나눌 수 있다.

  • SISD : Single Instruction Single Data stream. 하나의 명령이 하나의 프로세서에서 실행되고 하나의 데이터를 처리하는 경우
    • 하나의 제어장치와 프로세서로 구성
    • Uniprocessor
  • MISD : Multiple Instruction Single Data stream. 여러 명령이 여러 프로세서에서 실행되지만 모든 프로세서가 하나의 데이터를 처리하는 경우
    • 여러개의 제어장치와 프로세서로 구성
  • SIMD : Single Instruction Multiple Data stream. 하나의 명령이 여러 프로세서에서 처리되고, 각 프로세서는 서로 다른 데이터를 처리하는 경우
    • 하나의 제어장치와 여러개의 프로세서로 구성
    • GPU
  • MIMD : Multiple Instruction Multiple Data stream. 여러 명령이 여러 프로세서에서 처리되고, 각 프로세서는 서로 다른 데이터를 처리하는 경우
    • 여러개의 제어장치와 프로세서로 구성
    • Multiprocessor

Shared Memory Multiprocessor

다중 프로세서 환경에서 각 프로세서는 하나의 물리적 메모리를 공유한다. 일반적으로 각 프로세서는 자신만 사용하는 캐시를 가지고, 각 프로세서의 캐시가 Interconnection network를 통해 메모리와 I/O장치에 접근하는 구조를 가진다

Parrallel Programming

다중 프로세서를 활용하여 최적의 성능을 내기 위해서는 병렬 프로그래밍이 필요한데, 이는 순차적 프로그래밍에 비해 여러가지 경우를 고려해야 한다.

  • 작업을 어떻게 분산시킬 것인지
  • worker간 부하를 어떻게 분산시킬 것인지
  • 데이터를 어떻게 동기화할 것인지
  • worker사이에 소통은 어떻게 할 것인지

이러한 문제들을 처리하기 위한 방법으로는 크게 프로그래머가 명시적으로 병렬처리를 지시하거나, 하드웨어와 OS에서 병렬처리를 지원하는 방법이 있다

  1. OpenMP와 같이 병렬처리를 지원하는 API를 사용하여 코드상에서 명시적으로 병렬처리를 지시하는 방법
  2. OS와 하드웨어를 통해 병렬처리를 지원하는 방법
    • 다중프로세서 환경에서 OS는 쓰레드를 스케줄링하여 각 프로세서에게 부여되는 부하를 관리한다
    • 메모리가 공유되는 다중프로세서 환경에서 write invalidate protocol과 lock을 이용하여 공유변수를 동기화한다
      • write invalidate protocol : 캐시 일관성을 유지하는 기술로 한 프로세서의 캐시에서 write가 일어나면 브로드캐스팅을 통해 다른 캐시에 저장된 데이터를 무효화하는 방법
    • 하드웨어는 interconnection network를 통해 프로세서 사이에 메세지를 주고받을 수 있도록 지원한다

0개의 댓글