코딩하는 둥둥

[ 쉽게 배우는 운영체제 ] 2-4. 병렬 처리 본문

Computer Science/쉽게 배우는 운영체제

[ 쉽게 배우는 운영체제 ] 2-4. 병렬 처리

둥둥 2022. 7. 17. 19:30
728x90

병렬 처리의 개념

병렬 처리 parallel processing

동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식을 말한다.

듀얼코어 dual core, 쿼드코어 quad core의 경우 CPU의 주요 기능을 담당하는 코어가 1개가 아니라 2개, 4개라는 뜻이다.

코어가 여러개인 개인 CPU는 물론이고 코어가 하나인 CPU에서도 작동이 가능하다.

 

파이프라인 기법

하나의 코어에 여러 개의 스레드를 이용하는 방식을 말한다.

 

* 스레드 thread
: CPU가 처리할 수 있는 작업의 단위

* CPU 멀티스레드 multi-thread
: 여러개의 스레드를 동시에 처리하는 방법을 말한다.

 

슈퍼스칼라 기법

한 CPU에 여러 개의 작업을 동시에 하는 병렬 처리 기법을 말한다.


병렬 처리 시 고려 사항

상호 의존성이 없어야 병렬 처리가 가능하다.

각 명령이 서로 독립적이고 앞의 결과가 뒤의 명령에 영향을 미치지 않아야 한다는 뜻이다.

즉, 앞 뒤 단계간에 상호 의존적인 명령어를 사용하며 병렬 처리를 할 수 없다.

 

각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만하게 이루어진다. 

각 단계의 처리가 들쑥날쑥하면 앞의 작업이 먼저 끝나더라도 가장 긴 시간이 걸리는 단계에서 병목 현상이 발생한다.

즉, 오랜 시간이 걸리는 작업 때문에 진행이 전반적으로 밀려서 전체 작업시간이 늘어난다.

병렬 처리에서 작업을 N개로 쪼갰을때 N을 병렬 처리의 깊이라고 한다.

N은 동시에 처리할 수 있는 작업의 개수를 의미한다. 

  • 병렬 처리의 깊이가 1 : 일반적인 작업
  • 병렬 처리의 깊이가 2 : 작업을 두 단계로 나눈 것으로, 동시에 처리할 수 있는 작업의 개수가 최대 2이다.

이론적으로는 N이 커질수록(동시에 작업할수 있는 개수가 많아질수록 성능이 높아지지만, 오히려 각 작업을 이동하고 새로운 작업을 불러오는데 시간이 너무 많이 걸려서 성능이 떨어진다.


병렬 처리 기법

CPU내에서 명령어는 제어장치가 처리하고, 제어장치는 명령어를 가져와 해석한 후 실행하고 결과를 저장하는 작업을 반복한다. 이러한 과정 전체를 하나의 스레드라고 하며, 스레드를 이루는 각 단계는 CPU의 클록과 연동되어 한 클록에 한 번씩 이루어진다.

 

1. 명령어 패치 instruction Fetch; IF : 다음에 실행할 명령어를 명령어 레지스터에 저장한다.

2 명령어 해석 instruction Dedcode; ID : 명령어를 해석한다.

3. 실행 EXecution; EX : 해석한 결과를 토대로 명령어를 실행한다.

4. 쓰기 Write Back; WB : 실행한 결과를 메모리에 저장한다.

 

파이프라인 기법

CPU의 사용을 극대화하기위해 명령을 겹쳐서 실행하는 방법으로, 하나의 코어에 여러 개의 스레드를 사용하는 것이다. 

명령어를 여러 개의 단계로 분할 한 후, 명령어의 처리 단계마다 각 단계를 동시에 처리하는 하드웨어를 독립적으로 구성한다.

인텔 계열의 CPU에서는 하이퍼스레드 라고 부른다.

 

* 하이퍼스레드
CPU에 여러 개의 작업을 동시에 진행할 수 있는 부가장치를 만들어 하나의 코어에서도 여러 개의 작업(스레드)이 동시에 이루어지게 하는 기법이다.

 

  • 파이프라인의 위험 
  • 데이터 위험 data hazard : 데이터의 의존성 때문에 발생하는 문제이다. 명령어 단계를 지연하여 해결한다. 
  • 제어 위험 control hazard : 분기를 하는 if문 or 바로가기의 goto문 같은 명령에서 발생한다. 프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험이다. 분기 예측이나 분기 지연 방법으로 해결한다. 
  • 구조 위험 structural hazard : 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제이다. 해결하기 어렵다.

 

슈퍼스칼라 기법 super-scalr

파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식이다.

대부분은 파이프라인 기법과 동일하지만 코어를 2개 구성하여 각 단계에서 동시에 실행되는 명령어가 2개라는 점이 다르다.

파이프라인 기법과 마찬가지로 슈퍼스칼라 기법에서는 처리되는 명령어가 상호 의존성 없이 독립적이어야 하며, 이를 위한 처리도 컴파일러에서 이루어지도록 조정해야 하다. 오늘날의 CPU는 대부분 슈퍼스칼라 기법을 사용하고 있다.

 

슈퍼파이프라인 기법 super-pipeline

파이프라인 기법을 강화한 것으로, 파이프라인의 각 단계를 세분화하여 한 클록 내에 여러 명령어를 처리할 수 있다.

한 클록 내에 여러 명령어를 실행하면 다음 명령어가 빠른 시간 안에 시작될 수 있어 병렬 처리 능력이 높아진다.

크레이 슈퍼컴퓨터 cray super computer의 CPU에서 사용된다.

 

슈퍼 파이프라인 슈퍼스칼라 기법 super-pipelined sugar-scalar

병렬 처리 기법을 모두 합쳐놓은 것이다. 슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행하는 방식이다.

 

VLIW 기법 Very Long Instruction Word

앞의 병렬 처리 기법들은 병렬 처리를 지원하는 하드웨어적 방법이지만, VLIM 기법은 CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬처리를 하는 기법이다.

동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행한다.

CPU가 병렬 처리를 지원하지 않을때 사용하는 방법이므로 앞의 병렬처리 기법들에 비해 동시에 처리하는 명령어의 개수가 적다. 또한 컴파일 시 병렬 처리가 이루어진다. 

 

728x90