학습 목표 
- 컴퓨터를 구성하는 하드웨어의 특성을 이해한다.
- CPU와 메모리 구성 및 동작방식을 이해한다.
- 컴퓨터의 성능을 향상하는 기술을 알아본다.
- 병렬 처리의 개념을 이해하고 병렬 처리 기법을 알아본다.

목차

  • 병렬 처리의 개념
  • 병렬 처리시 고려사항
  • 병렬 처리 기법
  • 무어의 법칙, 암달의 법칙

병렬 처리의 개념

병렬 처리(parallel processing)

동시에 여러 개의 명령을 처리해서 작업의 능률을 올리는 방식을 말한다. 듀얼 코어나 쿼드 코어등 코어가 여러개인 CPU에서 사용된다. 물론 코어가 하나인 CPU에서도 작동은 가능하다. 서로 겹치지 않는 작업을 동시에 진행함으로써 작업의 능률을 올린다.

 

스레드(thread)

스레드란 CPU가 처리할 수 있는 작업의 단위를 뜻한다.

 

파이프라인 기법

하나의 코어가 여러개의 스레드를 사용하여 작업하는 방식파이프라인 기법이라고 한다.

 

CPU 멀티스레드(multi-thread)

여러개의 스레드를 동시에 처리하는 방법을 의미한다. 운영체제가 사용하는 프로그래밍 기법을 가리키는 말이기도 하다.

 

슈퍼스칼라 기법

만약 CPU가 작업을 처리하는 코어가 2개 있고, 코어 2개를 동시에 사용하는 방식슈퍼스칼라 기법이라 한다.

 


 

병렬 처리시 고려사항

고려사항 3가지

 

  • 상호 의존성이 없어야 병렬 처리가 가능하다.
  • 각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만히 이루어진다.
    작업 시간이 들쑥날쑥하면 긴 시간이 걸리는 단계때문에 병목현상이 발생한다.
  • 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야한다.
    병렬 처리에서 작업을 n개로 쪼갰을 때 n을 병렬 처리의 깊이(depth of parallel processing)이라 한다.
    병렬 처리 깊이가 1인 경우 병렬 처리가 없는 일반적인 작업이다. 보통은 오버헤드를 고려해서 병렬 처리의 깊이를 10~20정도로 한다.

 

 


 

병렬 처리 기법

병렬 처리가 이루어지는 과정

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

 

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

 

파이프라인(pipeline) 기법

파이프라인 기법은 CPU의 사용을 극대화하기 위해 명령을 겹쳐서 실행하는 방법으로 CPU가 가진 하나의 코어에 여러개의 스레드를 사용하는 것이다. 파이프라인 기법에서는 여러 개의 단계로 분할한 후, 각 단계를 동시에 처리하는 하드웨어를 독립적으로 구성한다. 파이프라인 기법에는 여러가지 문제점이 있는데 정리하자면 아래와 같다.

 

  • 데이터 위험(data hazard)
    데이터 위험은 데이터의 의존성 때문에 발생한다. 동시에 실행되면 안되는 명령어가 실행될 때 발생한다. 데이터 위험은 명령어 단계를 지연하여 해결한다.
  • 제어 위험(control hazard)
    분기를 하는 if문, goto문 같은 명령에서 발생하는 제어 위험으로 프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험이다. 제어 위험은 분기 예측이나 분기 지연 방법으로 해결한다.
  • 구조 위험(structural hazard)
    서로 다른 명령어가 같은 자원을 접근하려할 때 발생하는 문제이며, 구조 위험은 해결하기 어렵다고 알려져있다.

 

파이프라인 기법을 인텔 계열의 CPU에서는 하이퍼스레드라고도 부른다.

 

슈퍼스칼라 기법

파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식이다. 마찬가지로 명령어가 상호 의존성이 없어야하며 컴파일러가 이에대한 처리를 해야한다. 현대의 CPU는 대부분 슈퍼스칼라 기법이다.

 

슈퍼파이프라인 기법

파이프라인에서는 한 클록마다 하나의 명령어를 수행하지만 슈퍼파이프라인 기법에서는 한 클록당 여러 명령어를 실행한다. 대표적으로 슈퍼파이프라인 기법은 크레이 슈퍼컴퓨터의 CPU에서 사용되고 있다.

 

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

앞의 병렬 처리 기법을 모두 합쳐놓은 방식이다.

 

VLIW(Very Long Instruction Word) 기법

앞의 언급한 병렬처리 기법들은 하드웨어적인 방법이라면 VLIWCPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬 처리를 하는 기법이다. VLIW기법에서는 동시에 수행할 수 있는 여러 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행한다. CPU에서 지원할 때보다 명령어의 개수는 상대적으로 적다.


 

무어의법칙, 암달의 법칙

무어의 법칙

인텔의 공동 창업자인 고든 무어(Gordon Moore) CPU의 속도가 24개월마다 2배 빨라진다무어의 법칙(Moore's law)를 주장했다. 그러나 이 주장은 초기의 CPU에만 적용되며 현재는 그렇지 않다. CPU는 자체 발열 문제로 속도를 5GHz 이상 높이기 어렵기 때문이다. 그래서 최근엔 처리 속도를 올리는 대신 멀티 코어를 장착하는 방향으로 나아가고 있다. 현재는 코어가 8개인 옥타코어가 대중화 되었다. pc용의 경우 하나의 코어에 2개의 스레드를 사용하는 4코어 8스레드 제품이 판매되고 있다.

 

암달의 법칙

진 암달(Gene Amdahl)컴퓨터 시스템의 일부를 개선할 때 전체 시스템에 미치는 영향과의 관계를 수식으로 나타낸 암달의 법칙(Amdahl's law)를 만들었다. 이 법칙은 주변장치의 향상 없이는 CPU의 속도를 2GHz에서 4GHz로 늘리더라도 컴퓨터의 성능이 2배 빨라지지 않는다. GPU의 속도를 올린다해도 메모리를 비롯한 주변장치가 CPU의 발전 속도를 따라가지못해 컴퓨터의 전반적인 성능이 하락하는 현상이다.