2-4.[os] 병렬 처리
CPU의 성능 향상 : CPU의 클록(작업속도), 캐시 크기 늘리기
- -> 단점: 클록을 높이면 발열문제가 생김, 캐시 키우면 비용문제가 생김
- -> 코어와 스레드를 여러개 만듦
병렬 처리
- 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식
- 코어: CPU의 핵심기능을 가짐
ex) 듀얼코어, 쿼드코어
스레드: CPU가 처리할 수 있는 작업의 단위
- CPU멀티스레드: 여러 개의 스레드를 동시에 처리하는 방법
파이프라인 기법:하나의 코어에 여러 개의 스레드를 이용하는 방식
슈퍼스칼라 기법: 여러 개의 코어를 사용하여 동시에 작업
병렬처리 시 고려사항
상호 의존성이 없어야 병렬 처리가 가능하다
- 각 명령이 서로 독립적이고 앞의 결과가 뒤의 명령에 영힘을 미치지 않아야 한다
각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만하게 이루어진다
- 각 단계의 처리 시간이 들쑥날쑥하면 앞의 작업이 먼저 끝나더라도 가장 긴 시간이 걸리는 단계에서 병목 현상이 발생
- 오랜 시간이 걸리는 작업 때문에 진행이 전반적으로 밀려서 전체 작업 시간이 늘어난다
- 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 한다
- 병렬 처리의 깊이: 작업을 N개로 쪼겠을 때의 N, 동시에 처리할 수 있는 작업의 개수
- 이론적으로는 N이 커질수록 동시에 작업할 수 있는 작업의 개수가 많아져서 성능이 높아짐
- 작업을 너무 많이 나누면 각 단계마다 작업을 이동하고 새로운 작업을
불러오는 데 시간이 너무 많이 걸림
- 오버헤드를 고려하여 보통 병렬 처리의 깊이: 10〜 20
병렬 처리 기법
CPU에서 명령어가 실행되는 과정 4단계
- 명령어 패치 (Instruction Fectch, IF): 다음에 실행할 명령어를 명령어 레지스터에 저장
- 명령어 해석 (Instruction Decode, ID): 명령어를 해석
- 실행 (EXecution, EX): 해석한 결과를 토대로 명령어를 실행
- 쓰기 (Write Back, WB): 실행된 결과를 메모리에 저장
- IF > ID > EX > WB
파이프라인 기법
- CPU의 사용을 극대화하기 위해 명령을 겹쳐서 실행하는 방법
- 하나의 코어에 여러 개의 스레드를 사용
- 명령어를 여러 개의 단계로 분할 > 각 단계를 동시에 처리하는 하드웨어를 독립적으로 구성
- 명령어 처리를 4단계로 나누면 동시에 처리되는 명령어의 개수가 최대 4개
기존: 4단계를 모두 마치고 다음 명령어를 실행 파이프라인: 각 단계가 쉬지 않고 명령어를 처리
파이프라인 위험
데이터 위험 : 데이터의 의존성
- 데이터 a 를 필요로 하는 두 번째 명령어는 앞의 명령어가 끝날 때까지 동시에 실행되어서는 안 된다
- 명령어 단계를 지연하여 해결
제어 위험
- 다음 문장이 아니라 다른 문장으로 이동하게 되면 현재 동시에 처리되고 있는 명령어들이 쓸모없어진다
- ex) if문, goto문
구조 위험
- 서로 다른 명령어가 같은 자원에 접근하려 할 때
- 해결하기 어렵다
슈퍼스칼라 기법(super-scalar)
- 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식
슈퍼파이프라인 기법(super-pipeline)
- 파이프라인 기법을 강화
- (기존: 파이프라인 기법에서는 한 클록마다 하나의 명령어를 실행)
- 한 클록 내에 여러 명령어를 처리
- 한 클록 내에 여러 명령어를 실행하면 다음 명령어가 빠른 시간 안에 시작될 수 있어 병렬 처리 능력이 높아진다
슈퍼파이프라인슈퍼스칼라 기법(super-pipelined super-scalar)
- 슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행
공통 특징:
- 하드웨어적인 방법
- 실행 시 병렬 처리가 이루어짐
VLIW 기법 (Very Long Instruction Word)
- VLIW 기법:
- CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬 처리
- CPU가 병렬 처리를 지원하지 않을 때 사용하는 방법이므로 앞의 병렬 처리 기법들에 비해 동시에 처리하는 명령어의 개수가 적다
- 컴파일 시 병렬 처리가 이루어짐