728x90
반응형

CPU성능 향상 방법은 CPU의 클럭을 높이거나 캐시의 크기를 늘리는 것이다. 그러나 CPU 클럭을 높이면 발열문제가 있기때문에 현재의 기술로서는 5Hz가 넘는 CPU개발은 힘들다. 캐시의 크기를 늘리는 것도 비용문제 때문에 한계가 있다. 그래서 CPU 개발사들은 CPU의 성능 향상을 위해 CPU의 핵심 기능을 가진 코어를 여러개 만들거나, 동시에 실행 가능한 명령의 개수를 늘리는 방법을 사용한다. 

 

1. 병렬 처리의 기법

 병렬처리 parallel processing는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식이다. 요즘 컴퓨터용 CPU나 스마트폰용 CPU의 사양을 보면 듀얼 코어duel core, 쿼드 코어 quad core라고 쓰여 있는데, 이는 CPU의 주요 기능을 담당하는 코어가 1개가 아니라 2개, 4개 라는 뜻이다. 

 

 여러 개의 명령을 동시에 처리하는 병렬처리는 코어가 여러 개인 CPU는 물론, 코어가 하나인 CPU에서도 작동가능하다. 서로 겹치지 않는 작업을 동시에 진행함으로써 여러 개의 작업을 하는 시간을 줄일 수 있다. 하나의 코어가 여러 개의 스레드thread를 이용한다. 병렬 처리에서는 이러한 방식을 파이프라인 기법 이라고 한다. 여기서 스레드는 CPU가 처리할 수 있는 작업의 단위를 나타내며, 여러 개의 스레드를 동시에 처리하는 방법을 CPU멀티 스레드 라고 한다. 

 

 병렬 처리에는 파이프인 기법 말고도 슈퍼스칼라 기법이 있다. 예를 들면 듀얼 코어 CPU는 한 CPU에 작업을 처리하는 코어가 2개씩 있고, 슈퍼스칼라 기법을 활용하여 2개의 작업을 동시에 처리할 수 있다.

 

**CPU의 멀티 스레드**

 스레드는 CPU의 작업 단위로, 한 번에 여러 개의 스레드를 처리하는 방식을 멀티스레드 라고 한다. 스레드는 운영체제가 사용하는 프로그래밍 기법을 가리키는 말이기도 하다. 

 

2. 병렬 처리 시 고려 사항

  1. 상호의존성이 없어야 병렬처리가 가능하다 : 각 명령이 서로 독립적이고 앞의 결과가 뒤의 명령에 영향을 미치지 않아야 한다는 뜻이다.
  2. 각 단계의 시간을 거의 일정하게 맞춰야 병렬처리가 원만하게 이루어진다.
  3. 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 한다 

 병렬 처리에서 작업을 N개로 쪼개었을 때 N을 병렬처리의 깊이 depth of parallel processing 이라고 한다. 병렬처리의 깊이가 1인 경우는 병렬처리가 없는 일반적인 작업이다. 병렬처리의 깊이가 2인 경우는 작업을 2단계로 나눈 것으로 동시에 처리할 수 있는 작업의 개수가 최대 2개이다.

 

이론적으로는 N이 커질수록 성능이 높아진다. 하지만 작업을 너무 많이 나누면 각 단계마다 작업을 이동하고 새로운 작업을 불러오는데 시간이 너무 많이 걸려서 오히려 성능이 떨어진다. 이러한 오버헤드를 고려하여 보통은 병렬 처리의 깊이를 10~20으로 한다.

 

3. 병렬 처리 기법

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

  1. 명령어 패치 Instruction Fetch IF : 다음에 실행할 명령어를 명령어 레지스터에 저장
  2. 명령어 해석 Instruction Decode ID 
  3. 실행 EXecution EX
  4. 쓰기 WriteBack WB : 실행된 결과 메모리에 저장

3.1 파이프라인 기법

 하나의 코어에는 여러 개의 스레드가 겹쳐서 실행된다. 명령을 겹쳐서 실행하는 것을 파이프라인 기법이라고 한다.

파이프라인 기법

 파이프라인 기법에서는 명령어를 여러개의 단계로 분할한 후, 각 단계를 동시에 처리하는 하드웨어를 독립적으로 구성한다. 파이프라인 기법에서는 명령어 처리의 단계마다 독립적으로 구성하여 각 단계가 쉬지 않고 명령어를 처리할 수 있게 한다.

 

 파이프라인 기법에는 여러가지 문제가 있는데, 이를 파이프라인의 위험이라고 일컫는다. 파이프라인 위험에는 다음과 같은 것들이 있다. 

 *데이터 위험 Data Hazard

 데이터의 의존성 때문에 발생하는 문제이다. 예를 들어 A=C+D , E=A*2 와 같은 식을 순차적으로 실행해야 된다고 할 때, 데이터 A를 필요로 하는 두번째 명령어는 앞의 명령어가 끝날때까지 동시에 실행되어선 안된다. 데이터 위험은 파이프라인의 명령어 단계를 지연하여 해결한다.

 

*제어 위험 Control Hazard

 분기를 하는 if문 혹은 바로가기의 goto문 같은 명령에서 발생한다. 프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험이다. 보통 순차적으로 실행되는데 goto문 때문에 다른 문장으로 이동하게 되면 현재 동시에 처리되고 있는 명령어들이 쓸모없어진다. 제어 위험은 분기 예측이나 분기 지연으로 해결한다. 

 

*구조 위험 Structural Hazard

 서로 다른 명령어가 같은 자원에 접근하려 할 때 생긴다. 예를 들어 명령어 A가 레지스터 RX를 사용하고 있는데 병렬 처리되는 명령어B도 RX를 사용해야 한다면 충돌한다. 이 문제는 해결하기 어렵다고 알려져 있다. 

 

파이프라인 기법을 intel CPU에서는 하이퍼스레드라고 부른다. 하이퍼스레드는 CPU에 여러개의 작업을 동시에 진행할 수 있는 부가장치를 만들어 하나의 코어에서도 여러 개의 스레드를 동시에 진행할 수 있게 한다. 

 

3.2 슈퍼스칼라 기법

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

 

이 외에도 슈퍼파이프라인 기법, 슈퍼파이프라인 슈퍼스칼라 기법이 있는데 모두 슈퍼스칼라 기법과 파이프라인의 결합이라고 보면 된다. 

 

3.3 VLIW 기법

 Very Long Instruction Word 이 기법은 파이프라인과 슈퍼스칼라 기법같은 병렬처리 기법과는 다르다. VLIW기법은 CPU가 병렬처리를 지원하지 않는 경우 소프트웨어적으로 병렬처리하는 방법이다. 동시에 수행할 수 있는 명령어들을 컴파일러가 추루하고 하나의 명령어로 압축하여 실행한다. 병렬처리 기법들에 비해 동시에 처리되는 명령어가 작다(CPU가 병렬처리 지원 안할때만 사용하기 때문임) 또한 앞의 병렬처리 기법들은 명령어 실행 시 이루어지지만 VLIW는 컴파일 시 병렬처리가 이루어진다. 

728x90
반응형

'CS > 운영체제' 카테고리의 다른 글

프로세스 제어블록(Process Control Block)  (0) 2020.10.29
프로세스의 개요  (0) 2020.10.29
인터럽트  (0) 2020.10.26
[운영체제] 컴퓨터 기본 구성  (0) 2020.10.13
[운영체제] 운영체제의 구조  (0) 2020.10.11

+ Recent posts