본문 바로가기
컴퓨터 공학/운영체제

[운영체제] 병렬 처리 기법

by tempus 2021. 8. 30.
반응형

컴퓨터에서 병렬 처리는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식을 말합니다. 이번 글에서는 이러한 컴퓨터의 병렬 처리에 있어서 어떠한 기법을 사용하는지 알아봅시다.


CPU 내에서 명령어는 제어장치가 처리합니다. 제어장치는 명령어를 가져와 해석 후 실행하고 결과를 저장하는 과정을 계속 반복합니다. 이러한 한 사이클을 스레드(thread)라고 합니다. 스레드를 이루는 각 단계는 CPU의 한 Clock에 한 번씩 이루어집니다. CPU에서 명령어 실행되는 과정은 아래와 같이 4단계로 나눕니다. (경우에 따라 더 세분화하기도 합니다.)


  1. 명령어 패치 (IF) : 다음에 실행할 명령어를 명령어 레지스터에 저장
  2. 명령어 해석 (ID) : 명령어를 해석
  3. 실행 (EX) : 해석한 결과를 토애도 명령어 실행
  4. 쓰기 (WB) : 실행된 결과를 메모리에 저장

 


instructor_img
명령어 처리 단계



🔷 파이프라인 기법

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

일반적으로는 한 명령어를 처리하기 위해서는 처리 4단계를 모두 마치고 다음 명령어를 실행하지만, 파이프라인 기법에서는 명령어 처리 단계마다 독립적 구성을 통해 각 단계가 쉬지 않고 명령어를 처리할 수 있습니다.

 


파이프라인 기법


위와 같이 명령어 처리 단계를 4단계로 나누면 동시에 처리되는 명령어 최대 개수는 4개입니다.


하지만, 이러한 파이프라인 기법에는 여러 가지 문제가 있습니다.



🔴 데이터 위험

데이터 의존성 때문에 생기는 문제입니다. 데이터 A를 필요로 하는 2번째 명령어는 앞의 명령어가 끝날 때까지 실행되면 안 됩니다.

➡ 그래서 이 문제를 해결하기 위해 파이프라인의 명령어 단계를 지연합니다.

 

data_danger



🔴 제어 위험

분기를 하는 if문이나 바로 가는 goto 문 같은 명령에서 발생하는 제어 위험은 프로그램 카운터 값을 갑자기 변화시켜 발생하는 문제입니다. 보통 모든 프로그램이 순차적으로 실행한다고 가정하는데 goto 문이 다음 문장이 아닌 다른 문장으로 이동하면 현재 동시에 처리되고 있는 명령어들은 필요가 없어집니다.

➡ 이 문제 해결을 위해 분기 예측이나 분기 지연 방법으로 해결합니다.


control_danger



🔴 구조 위험

서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제입니다. 이때 충돌이 발생하여 프로그램 비정상 작동하거나 종료될 수 있습니다.

➡ 해결하기 어렵다고 알려져 있습니다.

 

structure_danger


🔷 슈퍼스칼라 기법

파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식입니다. 파이프라인 기법과 마찬가지로 처리되는 명령어가 상호 의존성 없이 독립적이어야 합니다. 오늘날의 CPU는 대부분 슈퍼스칼라 기법을 사용합니다.


superscalar
슈퍼스칼라 기법 (CPU 코어 2개)


🔷 슈퍼파이프라인 기법

파이프라인 기법을 강화한 것입니다. 파이프라인 기법에서는 한 클록마다 하나의 명령어를 실행하지만, 슈퍼파이프라인 기법에서는 파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리할 수 있습니다. 이를 통해 병렬 처리 능력을 높입니다.


superPipeline
슈퍼파이프라인 기법



🔷 슈퍼파이프라인 슈퍼스칼라 기법

위 2개의 기법을 합쳐 놓은 것입니다. 슈퍼파이프라인 기법을 여러 코어에서 실행한다고 이해하면 됩니다.

 


spsc_img
슈퍼파이프라인 슈퍼스칼라 기법



🔷 VLIW 기법

위의 병렬 처리와는 다르게 소프트웨어적으로 병렬 처리를 하는 방법입니다. 동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행합니다.


보통 CPU가 병렬 처리를 지원하지 않을 때 사용하는 방법이라 위의 기법들 보다는 성능이 떨어집니다.

반응형

댓글


loading