병렬 처리/컴퓨터 기초
병렬처리 개요 멀티프로세서/병렬컴퓨터 (Multiprocessor) : Parallel processors with a single shared address. 병렬처리 프로그램 (parallel processing program) : A single program that runs on multiple processors simultaneously. 클러스터 (cluster) : A set of computers connected over a local area network (LAN) that function as a single large multiprocessor. 멀티프로세서와 클러스터를 설계/구성할 때 생각해야할 중요한 이슈는 : 1) How do parallel processors share data? 2) How do parallel processors coordinate? 3) How many processors?
슈퍼컴퓨터가 채용한 멀티프로세서 형태 상황
How do parallel processors share data? 어떻게 데이터를 공유하고 관리하는 가에 따라 병렬프로세서는 2 형태로 나뉜다. 1) Shared Memory 2) Message Passing Shared Memory Processor (Single Address Space) : 여러 프로세서들이 서로 공유하고 있는 메모리(변수)를 통해서 데이터를 공유한다. (이를 이해하기 위해서 프로그램에서 전역변수 (Global Variable) 또는 객체지향 프로그램에서 Static Variable 을 연상하기 바란다) 1) SMP/UMA (Symmetric MultiProcessor, Uniform Memory Access) : same time to access main memory no matter which processor requests it and no matter which word is requested. 2) NUMA (Non Uniform Memory Access) : 프로세서의 위치와 요구하는 데이터에 따라 메모리 액세스 시간 차이가 있는 것 Message Passing Multiprocessor (프로세서들이 각기 고유의 메모리 지님) : Cluster에서와 같이 각 프로세서들이 send 및 receive 메시지를 주고 받으면서 교신을 하면 보조를 맞춤.
Shared Memory 멀티프로세서의 메모리 액세스 시간 및 통신방식의 따른 멀티프로세서 구분
멀티프로세서 확산의 걸림돌 : 프로그래밍 멀티프로세서가 제 성능을 보이려면 멀티프로세서의 특성을 잘 활용하는 프로그램이 선행되어야 한다. 그런데, 이런 프로그램을 구현하는 것이 간단하지 않다. 1) 통신 오베헤드: 다수의 프로세서들이 서로 필요로 하는 데이터를 교환하고 통제하는 것 2) 멀티프로세서의 하드웨어/아키텍쳐에 대한 이해 필요 : 단일 프로세서에서는 이 일은 대부분 컴파일러가 알아서 해결해 주므로 프로그래머는 신경 쓰지 않음. 3) 병렬처리 알고리즘 설계 : 매우 까다로움
버스방식의 멀티 프로세서 각 프로세서들이 고유의 캐시를 갖고 있으면서 메모리 액세스가 대부분 캐시에서 처리된다. 고유한 별도의 (Private) 캐시를 갖는 멀티프로세서에서와 같이 버스 방식의 멀티프로세서들은 각 캐시에 있는 데이터들의 일치성 (Cache Coherence) 을 제공해야 한다. - Snooping : 버스를 모니터하면서 캐시에 있는 데이터가 유효한지… - Semaphore : 프로그램에서 프로세스 통제
네트워크로 연결된 멀티프로세서
멀티 프로세서 구분
현재 가장 일반적으로 쓰이고 있는 멀티프로세서 형태 SMP 는 shared memory 멀티프로세서로 대부분 같은 컴퓨터 본체에 구현된다. 데이터 교환은 버스나 네트워크를 활용. - The most critical problem in SMP design is cache coherency. Cluster is a group of interconnected, whole computers working as a unified computing resource. A NUMA system is a shared-memory multiprocessor in which the access time from a given processor to a memory word varies with the location of the memory word.