컴퓨터 구조

Chapter6. 병렬 프로세서: 클라이언트~클라우드

YJ_ma 2022. 12. 12. 03:05

Introduction

client-server 컴퓨팅모델

: 클라이언트가 요청을 해서 서버가 그 요청을 받아서 자신의 자원을 처리하여 응답을 해주는 형태

목표: 여러 컴퓨터를 연결하여 성능 향상

- 멀티프로세서 또는 클러스터(컴퓨터묶음) 조직

- 성능향상

멀티 프로세서의 수를 늘리면 확장성(Scalability)이 증가,

가용성(availability), 전력 효율성(power efficiency)

 

① Task-level(프로세스 레벨) 병렬 처리(parallelism)
- 다수의 프로세스를 이용하여 독립적인 프로그램 여러개를 동시에 수행하는 것

- 프로세스마다 자신의 일을 배정받고 독립적으로 처리한다.

- 처리율을 기준으로 성능을 파악
② 병렬 처리 프로그램
- 여러 프로세서를 동시에 실행하는 단일 프로그램

- 하나의 프로그램을 여러개의 프로세스를 이용하여 1/n나누었을 때 처리한다.
③ 멀티코어 마이크로프로세서
- 여러 개의 프로세서(코어)가 있는 칩

- 하나의 칩에 여러개의 core로 나눠서 실행하면 처리시간 줄어들고 속도 향상된다.

 

Hardware and Software

하드웨어 소프트웨어
- 직렬적: 예: Pentium 4
- 병렬적: 예: 쿼드코어 Xeone5345
- 순차적: 예: 행렬 곱셈
- 동시적(병행적): 예: 운영 체제

- 순차/동시 소프트웨어가 직렬/병렬 하드웨어에서 실행 가능

 

Parallel Programming

 병렬 소프트웨어가 문제입니다.
 상당한 성능 향상 필요
- 그렇지 않으면, 더 빠른 유니프로세서를 사용 → 작업부호화 개선
어려움의 원인
- Partitioning : 하나의 일을 나눠서 처리하는데, 나누는 거 자체가 어려움

- Coordination(조정)

- 통신 오버헤드

ex, 어떠한 일을 4명이서 하는데, 4명으로는 턱없이 부족하거나 필요 없는 경우가 발생
Amdahl's Law : 자주 사용하는 것을 개선시켜서 전체 성능을 향상시키는 방법

[예제 6.2 속도개선의 어려움]
- 순차적 부품이 속도 향상을 제한할 수 있음

 

Instruction and Data Streams

병렬 처리를 위한 하드웨어(* Flynn’s Taxonomy 1966)

그림6.2 명령어 스트림과 데이터 스트림을 기반으로 한 하드웨어 분류법

SISD : 단일 명령어 데이터 스트림, 단일 프로세서

MISD : 복수 명령어 단일 데이터스트림

SIMD : 단일 명령어 복수 데이터 스트림, 벡터 프로세서처럼 동일한 명령어를 여러 데이터 스트림에 적용하는 방식.

MIMD : 복수 명령어 복수 데이터 스트림, 멀티 프로세서

 

Vector Processors

고도로 파이프라인된 기능 유닛
 데이터를 벡터 레지스터에서 단위로 스트리밍
- 메모리에서 레지스터로 수집된 데이터
- 레지스터에서 메모리로 저장된 결과
 예: MIPS에 대한 벡터 확장
- 32 x 64비트 레지스터(64비트 요소)
 벡터 명령어
- lv, sv: 로드/저장 벡터
- addv.d: 이중 벡터 추가
- addvs.d: 이중 벡터의 각 요소에 스칼라를 추가합니다.
 명령 가져오기 대역폭을 크게 줄입니다.

 

SIMD

데이터 벡터에 대한 요소별 작업
예: x86의 MMX 및 SSE 지침

- MMX : 멀티미디어 확장 명령어들의 집합

- SSE : 스트리밍 SIMD확장
- 128비트 와이드 레지스터의 여러 데이터 요소
 모든 프로세서가 동일한 명령을 동시에 실행합니다.
- 각각 다른 데이터 주소(요소별) 등을 사용합니다.
 동기화 간소화
 고도의 데이터 병렬 애플리케이션에 가장 적합합니다.

 

Hardware Multithreading (하드웨어 멀티스레딩)

: 한 스레드가 실행할 수 없게 되면 다른 스레드로 전환하도록 하여 프로세스 이용률을 높이는 방법.

 여러 실행 스레드를 병렬로 수행
- 레지스터, PC 등을 복제합니다.
- 스레드 간의 빠른 전환
 Fine-grain multithreading(작은 단위 멀티스레딩)

: 한 명령어를 실행하고 난 후에 다른 스레드로 전환하는 하드웨어 멀티스레딩의 한 방식

- 매 명령어마다 스레드를 전환하여 여러개의 스레드를 인터리빙하는 방식

- 장점: 한 스레드가 지연되고 있는 동안 다른 스레드의 명령어를 수행함으로써 지연으로 인한 처리량의 손실을 감출 수 있다.

- 단점: 개별 스레드의 수행이 느려진다. (다른 스레드의 명령어 수행 때문에 지체되기 때문)
②  Coarse-grain multithreading(큰 단위 멀티스레딩)

: 마지막 단계 캐시 실패와 같은 심각한 사건이 일어날 때에만 스레드를 전환하는 하드웨어 멀티스레딩 한 방식

- 긴 지연 시에만 전환(예: L2 캐시 누락) → 지연시간이 긴 경우에 유용

- 장점: 스레드 전환 비용이 작아야 할 필요 없음,

긴 지연이 발생하는 경우만 다른 스레드의 명령어 실행하므로 개별 스레드의 수행이 느려지는 문제 완화

- 단점: 작은 지연들로 인한 처리량의 손실 극복의 한계가 있다.

하드웨어를 단순화하면서도 단점(예: 데이터 위험)을 숨기지 않음

 

③ Simultaneous Multithreading(동시 단위 멀티스레딩, SMT)

: 다중 내보내기와 동적 스케줄링을 지원하는 마이크로 구조의 자원을 활용하여 멀티스레딩 비용을 줄이는 멀티스레딩의 한 방식

 여러 문제가 있는 동적으로 스케줄링된 경우
- 여러 스레드의 지침 예약
- 독립 스레드의 명령은 기능 단위를 사용할 수 있을 때 실행됩니다.
- 스레드 내에서 예약 및 레지스터 이름 변경에 의해 처리되는 종속성
예: Intel Pentium-4 
-두 개의 스레드: 중복된 레지스터, 공유 기능 단위 캐시

 

Multithreading Examples (Figure 6.5)

Coarse-grain multithreading(큰 단위 멀티스레딩)

: 긴 지연이 발생하면 다른 스레드로 전환하여 일부를 감추고 아무 일도 하지 않는 클럭 사이클 수를 줄일 수 있지만, 파이프라인의 초기화 오버헤드 때문에 여전히 아무 일도 하지 않는 사이클이 생기며 명령어 수준 병렬성이 부족하므로 모든 내보내기 슬롯을 사용하는 것은 불가능하다.

Fine-grain multithreading(작은 단위 멀티스레딩)

: 스레드의 인터리빙을 통하여 아무 일도 하지 않은 사이클을 대부분 없앨 수 있지만 한 클럭 사이클에서 한 스레드의 명령어만 내보내기 때문에 명령어 수준의 병렬성이 부족하여 여전히 일부 클럭 사이클에서는 노는 슬롯이 생긴다.

 Simultaneous Multithreading(동시 단위 멀티스레딩, SMT)

: 스레드 수준의 병렬성과 명령어 수준의 병렬성이 모두 활용되어, 한 클럭 사이클에서 여러 스레드가 내보내기 슬롯을 같이 사용한다. 다른 요인들의 슬롯 사용을 제약할 수 있다. 

 

Multicore and Shared Memory Multiprocessor

공유 메모리 멀티프로세서(SMP)
: 하드웨어는 모든 프로세서를 위한 단일 물리적 주소 공간을 제공합니다.
- 잠금(lock)을 사용하여 공유 변수 동기화
- 메모리 접근 시간 : 단일 주소 공간 멀티프로세서 스타일

UMA(uniform)  NUMA(nonuniform)
: 균일 메모리 접근
어떤 프로세서가 메모리에 있는 어떤 워드를 접근하든지 균일한 시간이 걸리는 멀티 프로세서
: 비균일 메모리 접근
단일 주소 공간 멀티프로세서의 일종으로 어떤 프로세서가 어떤 워드를 접근하는지에 따라 일부 메모리 접근이 다른 경우보다 훨씬 빠른 멀티 프로세서

 

대칭 멀티프로세서(Symmetric Multiprocessor, SMP)
- 시스템의 프로세서는 동일하며 동등하게 취급됩니다.

- 모든 프로세서로부터 메모리까지의 지연시간이 거의 같다.

 

Typical Chip-multiprocessor (multicore)

메모리 시스템 구조

- 패키지 내에 여러 코어와 멀티 레벨 L1, L2가 있고 bus로 연결되어 있다.

- 패키지를 공유하는 코어 간의 UMA이지만,

- 패키지가 다른 코어 간의 NUMA입니다.

- 전체적으로 NUMA 시스템입니다.

 

Memory System Issue with Multiprocessing

두 CPU 코어가 물리적 주소 공간을 공유한다고 가정
- 분산 캐시(일반적으로 L1)
- 즉시 쓰기 캐시이지만 즉시 쓰기 캐시에서도 동일한 문제가 발생함

 

캐시 일관성(Cache Coherency)
- 비공식적으로: 각 주소로 읽기는 최신 값을 반환해야 합니다.
- 복잡하고 많은 프로세서로 인해 어려움
- 일반적으로: 모든 쓰기는 어느 시점에서 적절한 순서로 표시되어야 합니다.

 

The Cache Coherency Problem (캐시 일관성 문제)

1. On-chip interconnect(코어당 캐시연결) 

- 모든 코어는 메모리 위치에 대해 자체 캐시된 복사본을 가질 수 있습니다.

2. Bus interconnect

- 하나의 코어가 자체 캐시에만 쓸 경우 복사본이 오래됨

- bus에 모니터를 둬서 CPU, Cache가 쓰기동작을 하면 쓰기동작을 하고 있다고 공유하여 확인한다.

3. Mesh interconnect :

- 캐시 업데이트를 다른 코어로 전파해야 함
- 모든 코어에 모든 쓰기를 브로드캐스트하는 모든 코어는 캐시의 목적을 훼손한다.
-  가능할 때마다 브로드캐스트 없이 쓰기를 개인적으로 캐싱한다.

- 각각이 스위치역할이고 가장 최근 값으로 바꿔서 다뤄야한다.

 

Keeping Multiple Caches Coherent(여러 캐시의 일관성 유지)

기본 아이디어

- 캐시 라인이 읽기 전용인 경우 많은 캐시에 복사본이 있을 수 있습니다.
- 캐시 라인이 기록되는 경우 한 번에 하나의 캐시만 복사본을 가질 수 있습니다.
쓰기를 계속 캐싱할 수 있으며 브로드캐스트할 수 없음
 일반적으로 이를 구현하는 두 가지 방법
- 스누핑 기반: 모든 코어는 메모리 버스에서 다른 사용자의 요청을 수신합니다.
- 디렉터리 기반: 모든 코어는 각 캐시 액세스에 대해 "디렉토리"라는 별도의 엔티티를 참조합니다.

 

Message Passing Multiprocessor

 다중 개인 주소 공간이 있는 다중 프로세서

메시지 전달방식(Message passing)

: 명시적으로 정보를 보내고 받음으로써, 프로세서 간의 통신을 수행하는 방식
- 메시지 전송 루틴(Send message routine)

: 전용 메모리 컴퓨터에서 한 프로세서가 다른 프로세서로 메시지를 전송하는 루틴
- 메시지 수신 루틴(Receive message routine)

: 전용 메모리 컴퓨터에서 한 프로세서가 다른 프로세서로부터 메시지를 수신하는 루틴

 

Loosely Coupled Clusters(느슨하게 결합된 군집)

독립 컴퓨터 네트워크
- 각각 개인 메모리 및 OS가 있습니다.
- I/O 시스템을 사용하여 연결됨
   - 이더넷/스위치, 인터넷
 독립적인 작업이 있는 애플리케이션에 적합
-  웹 서버, 데이터베이스, 시뮬레이션 등
 고가용성, 확장성, 경제성
 문제
- 관리 비용(가상 시스템 선호)
- 낮은 상호 연결 대역폭
  - c.f. SMP의 프로세서/메모리 대역폭

 

Warehouse-Scale Computers(WSC)

수만 대의 서버로 구성된 클러스터
- 검색, 소셜 네트워킹, 비디오 공유, 온라인 판매, 클라우드 컴퓨팅 서비스 및 더 많은 애플리케이션
 서버와 공통
- 원가-성능
- 에너지 효율
- 이중화를 통한 신뢰성
- 네트워크 I/O
- 대화형 및 배치 처리 워크로드
 서버와 구별됨
- WSC에서는 항상 충분한 병렬 처리를 사용할 수 있습니다.
- 운영 비용은 WSC 비용의 더 큰 부분을 차지합니다.
- WSC의 규모에 맞게 사용자 지정이 더 용이함

 

Graphics in the System

초기 비디오 카드
- 비디오 출력을 위한 주소 생성 기능이 있는 프레임 버퍼 메모리

1990년대: 비디오 게임을 위한 실시간 3D 렌더링이 일반화되었다.
3D 그래픽 처리는 계산 집약적입니다.

 3D 가속기(GPU)가 일반화되기 전에는 CPU 모든 그래픽 계산을 해야 했다.
 3D 그래픽 처리
- 원래 하이엔드 컴퓨터(예: SGI)
- 무어의 법칙 » 저비용, 고밀도
- PC 및 게임 콘솔용 3D 가속기 카드
   - 3D 프로세싱의 대부분은 많은 데이터에서 반복되는 짧은 알고리즘입니다.
   - 단순하고 대규모 병렬 컴퓨팅을 지원하는 전용 가속기

그래픽 처리 장치(GPU)

- 3D 그래픽 작업을 위한 프로세서
- 정점/픽셀 처리, 음영 처리, 텍스처 매핑

General-Purpose GPU(범용 목적 GPU)

- 높은 부동 소수점 처리 능력을 갖춘 수천 개의 단순 코어
- 그래픽 처리에 원래 사용된 매우 빠른 오프칩 메모리

 

GPU 구조

데이터 병렬 처리가 매우 용이함
- GPU는 매우 멀티 스레드이다.

  - GHz에서 동시에 실행되는 수천 개의 스레드
- 훨씬 단순한 프로세서 아키텍처
  - SIMD 방식으로 수십 개의 스레드가 함께 예약됨
- 스레드 전환을 사용하여 메모리 지연 시간 숨기기
  - 멀티 레벨 캐시에 대한 의존도 감소
- 그래픽 메모리는 넓고 대역폭이 넓다.
 범용 GPU에 대한 추세
- 이기종 CPU/GPU 시스템
- 순차 코드의 경우 CPU, 병렬 코드의 경우 GPU
 프로그래밍 언어/API
- DirectX, OpenGL
- C for Graphics(Cg), HLSL(High Level Shader Language)
- CUDA(Unified Device Architecture) 계산

 

Example : NVIDIA Tesla

[그림6.9] 멀티스레드 SIMD 프로세서의 데이터패스를 보여주는 간략화된 블록 다이어그램

Multiple SIMD processors

- 이 프로세서는 16개의 SIMD 레인을 가지고 있다.

- SIMD 스레드 스케줄러는 프로세서에서 수행할 수 있는 많은 수의 독립적인 SIMD 스레드를 가지고 있다.

- 스레드 블록 스케줄러: 스레드 블록을 멀티스레드 SIMD프로세서에 할당

- SIMD 스레드 스케줄러: SIMD프로세서 내에서 SIMD스레드를 스케줄링

 

Classifying GPUs

GPU와 CPU의 차이점

Domain Specific Architectures (DSAs)

과거의 큰 개선 사항
- 파이프라인, 캐시, 분기 예측, RISC, 슈퍼스칼라, 순서가 맞지 않는 실행, 멀티스레딩, 멀티코어
 도메인의 예
- 그래픽, 인공지능, 생물정보학, 이미지 처리 및 시뮬레이션
범용 컴퓨터와 달리 응용 프로그램 도메인에 맞게 조정된 특수 용도 컴퓨터
- 도메인별 프로세서와 함께 기존의 대형 프로그램을 실행하는 표준 프로세서
- 성능 및 에너지 효율 개선
  - 단순한 장치는 성능은 낮지만 에너지 소비량은 훨씬 적습니다.
  - 병렬 처리는 훨씬 낮은 에너지 비용으로 원하는 성능을 제공합니다.
- 수치 대수보다는 "지능" 관련 작업을 지향합니다.

 

Block Diagram of a TPUv3 TensorCore

그림6.23 TPUv3 텐서코어의 블록 다이어그램

Core Sequencer: 소프트웨어 관리 명령 메모리가 있는 VLIW
- 322비트 VLIW(8개 연산 포함): 2x 스칼라 ALU, 2x 벡터 ALU, 벡터 로드 및 저장, 매트릭스 곱셈/변환 장치를 위한 2x 대기열 연산
 벡터 처리 장치(VPU):
- 데이터 수준 병렬 처리(2D 매트릭스 및 벡터 함수 단위) 및 명령 수준 병렬 처리(명령당 8개 연산)를 사용

 

결론적으로..

 목표: 여러 프로세서를 사용하여 성능 향상
 어려움
- 병렬 소프트웨어 개발
- 적절한 구조 설계
SaaS의 중요성이 증가하고 있으며 클러스터는 양호합니다.

'컴퓨터 구조' 카테고리의 다른 글

Chapter5-5. I/O Topics and Storage  (0) 2022.12.11
Chapter5-4. 가상메모리 -2  (0) 2022.12.11
Chapter5-4. 가상메모리 -1  (0) 2022.12.11
Chapter5-3. 캐시 메모리  (0) 2022.11.23
Chapter5-2. 서로 다른 메모리 기술들  (0) 2022.11.22