🎈 병렬처리 하는 방법
🚨 실행 할 수 있는 코어를 여러 개를 두는 방법
🚨 쓰레드를 여러 개 하는 방법
🚨 그리고 기본 명령어를 여러 개를 수행시키는 방법
CPU가 하나의 명령(Operation)을 처리하는 과정은 다음과 같다.
1) Fetch Instruction : 메모리에서 명령을 가져온다
2) Decode Instruction : 명령을 해석한다
3) Execute Instruction : 명령을 수행한다
4) Write Back : 수행한 결과를 기록한다
이 과정에서 각각 하나의 클럭을 소비하므로 하나의 명령을 수행 하는 데는 4Clock이 필요하다.
하나의 명령을 처리하는 데는 다음과 같이 계산할 수 있다.
단위 시간에 하나의 명령만 처리할 수 있다. 즉, 읽기(FI)에서 읽어온 명령을 해석(DI)단계로 넘겨주면 FI를 처리하는 유닛은 DI, EI, WB를 진행하는 동안 놀게 된다!!
기본적인 구조에서 비효율적인 부분을 극복하기 위한 한가지 방법을 제시한다.
한 명령어를 처리하는 기본 유닛들의 효율성을 높이는 방법으로 하나의 클럭에 유닛의 동작을 중첩시키는 기술로써 아래의 그림과 같이 표현된다.
이렇게 한 명령의 처리 시간 동안에 다른 명령들을 중첩시켜서 수행하는 것을 파이프 라이닝이라고 한다.
아래는 파이프 라이닝의 성능을 높이는 방법을 정리한 것이다.
특징 | 설명 |
---|---|
분기 예측(Branch Prediction) | 프로그램 실행 도중 "GoTo"와 같은 분기 명령이 발생할 경우 메모리 상이 분기할 곳을 추측하는 기능 |
추측 실행(Speculative Execution) | 메모리 상의 분기된 곳으로 직접 이동하지 않고, 그곳에 있을 것을 예측하여 처리하고 계속 다른 명령을 실행하는 기능 |
다중 명령 스케쥴링 | 다수개의 명령어 수행 시 사전예약에 의해 충돌을 회피하여 실행하는 기능 |
동시에 수행될 수 있는 명령어들을 컴파일 수준에서 추출하여 하나의 명령어로 압축하여 실행은 여러 개의 기능유니트(ALU)에 의해 분산되어 실행하는 방식이다.
VLIW 방식은 컴파일러가 동시실행 가능 명령어들을 검출해 하나의 명령어로 압축하여 동시수행한다.
일정 크기의 VLIW명령어로 압축되므로 기존 H/W, S/W와의 호환성 결여 발생 가능하다. 예측이 상대적으로 쉬운 과학 계산 분야, 3차원 그래픽 처리, 멀티미디어 가속 등의 단순 자료의 반복처리에 활용된다. VLIW 프로세서는 덜 복잡하고 더 작고 높은 클럭 속도를 낸다. VLIW 특징과 Superscalar의 비교는 아래와 같다.
Pipelining 기법의 문제점은 병렬수행의 동작이 서로 독립적이어야 한다는 점이다.
분기나 점프 명령어의 오동작 우려가 있고, 명령어 수행결과가 다음 명령어에 영향을 미칠 시 처리가 어렵다.
이러한 문제점에 대해서 아래와 같은 보완책이 있다.
보완책 | 내용 |
---|---|
하드웨어적 중복 | 프로그램 흐름상의 명령어를 모두 인출 |
분기 목적지 선인출 | 조건분기 명령어와 분기 목적지 명령어를 모두 인출 |
분기 예측 | 분기 발생빈도의 확률적인 추측에 의해 명령어 인출 |
지연 분기 | 분기 명령어를 지연시키는 방법 |
Cache 분리 | 메모리 참조시간을 줄이기 위해 명령어 Cache와 Data Cache 분리 |
000000 여기까지 정리함
EPIC는 컴파일러가 소스 코드로부터 명시적 병렬성을 찾아 병렬처리가 가능하도록 기계어 코드 생성 병렬 수행된다.
대용량 처리 및 분산 컴퓨팅 환경이 계속해서 필요함에 따라서 적용이 되고 있고, 범용성 응용분야에서의 연구가 되고 있다. 과학 계산의 분야에서는 좋은 성능을 발휘한다.
병렬컴퓨터 기술의 핵심으로 프로세스 내 Pipeline 기능 세분화 다수의 동기화된 프로세서(Array Processor)이용 기술은 계속 발전 될 것이다.
1) SISD(Single Instruction Single Data)
2) SIMD(Single Instruction Multi Data)
3) MISD(Multiple Instruction stream Single Data Stream)
4) MIMD(Multiple Instruction Multiple Data)
1) SMP(Symmetric Multi Processing)
2) MPP(Massively Parallel Processing)
3) NUMA
NUMA 는 멀티 프로세싱 시스템에서 지역적으로는 메모리를 공유하며, 성능을 향상시키고,
시스템 확장성이 있도록 마이크로프로세서 클러스터를 구성하기 위한 방법이다. NUMA 는
SMP 시스템에서 사용된다.
SMP 시스템은 서로 밀접하게 결합되어, 모든 것을 공유하는 시스템으로서, 다중
프로세서들이 하나의 단일 운영체계 하에서 공통의 버스를 통해 각자의 메모리를 액세스한다.
SMP 의 한계는 마이크로프로세서가 추가됨에 따라, 공유 버스나 데이터 경로가 과중한
부하가 생기게 되어, 성능에 병목현상이 일어나는데 있다. NUMA 는 몇 개의
마이크로프로세서들 간에 중간 단계의 공유메모리를 추가함으로써, 모든 데이터 액세스가 주
버스 상에서 움직이지 않아도 되도록 한다.
NUMA 시스템은 MPP 의 Node 와 유사한 하나 이상의 Quad 로 구성된다. CC(Cache
Coherent) – NUMA : 하나의 운영체제가 탑재되는 단일 노드 개념으로 캐시 Coherence 를
하드웨어적으로 구현하여 메모리 접근 지연 시간을 단축시킬 수 있다. 분산된 메모리들이
결합하여 하나의 메모리를 구성하므로 데이터나 페이지의 복사본이 메모리들 사이에
존재하지 않는 구조이다
4) RMC(Reflective Memory Cluster)
RMC 방식은 Quad 마다 하나의 운영체제 복사본을 갖는 다수 Quad 로 구성된다. Quad
사이에 데이터의 복사나 이동 메커니즘이 있으며, Lock Traffic 연결망을 갖는 클러스터
시스템, 메모리 이동은 소프트웨어적이 일관성 기법을 이용하며, 운영체제의 간섭없이
데이터가 전송되어 메모리 접근 시간이 빠른다.
5) COMA(Cache-Only Memory Architecture)
CC-NUMA 구조처럼 단일 노드 개념에 하드웨어적 캐시 일치성을 갖지만 각 보드 내에
메모리를 갖지 않고 단지 큰 캐시로 구성된다. 장점은 확장성이 뛰어나고 1 개 이상의
Quad 로 구성된 NUMA 시스템을 대상으로 Clustering 기법을 적용하여 수평적으로 확장
가능하다. 지원되는 Application 및 시스템 소프트웨어가 적다는 단점을 가지고 있다.