본문 바로가기
전공/운영체제

Ch02. 컴퓨터의 구조와 성능 향상 _04) 병렬 처리

by 임 낭 만 2023. 3. 25.

<쉽게 배우는 운영체제> 교재를 참고하였습니다.

병렬 처리의 개념

  • 병렬 처리 (parallel processing)
    • 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식
  • 볶음밥 조리 예

더보기
  • CPU의 성능을 향상시키는 가장 좋은 방법은 CPU 클록을 높이거나 캐시의 크기를 늘리는 것. 그러나 CPU 클록을 높이면 발열문제가 발생하므로 현재기술로 약 5GHz 넘는 CPU 개발하기 어려움.  캐시크기를 확장하는 것도 비용문제가 있음.
  • CPU 성능향상을 위해 CPU의 핵심 기능을 가진 코어를 여러 개 만들거나, 동시에 실행 가능한 명령의 개수를 늘리는 방법을 사용함
  • 병렬처리는 동시에 여러 개의 명령을 처리하여 작업능률을 올리는 방법을 말함
  • 최근 컴퓨터용 CPU 사양을 보면 듀얼코어, 쿼드코어라고 표시되어 있는데, 이는 CPU의 주요기능을 담당하는 코어가 1개가 아니라 2개, 4개 라는 뜻임
  • 다수의 명령을 동시에 처리하는 병렬 처리는 코어가 다수인 CPU는 물론이고 코어가 하나인 CPU 에서도 가능

 

[그림 2-26 설명]

  • 볶음밥 조리과정은 총 40분이 소요된다면, 2인분은 만드는데 80분, 3인분을 조리시 120분이 필요함
  • 그런데, 볶음밥을 만드는 과정을 세분해 보면, 그림같이 네 단계로 분리해서 생각해 보면, 재료세척 10분, 손질 10분, 조리 10분, 마무리 10분 이때 서로 작업이 겹치지 않게 동시에 진행함으로써 여러 개의 볶음밥을 만드는 시간을 줄일 수 있음

 

[병렬처리]

  • 병렬 처리 : 일을 다수의 프로세서 분담, 동시 처리 기법
    • 많은 수의 프로세서들로 하나의 시스템을 구성할 수 있도록 작고 저렴
    • 고속인 프로세서 사용한 프로그램을 여러 개의 작은 부분들로 분할하는 것이 가능해야 함
    • 분할된 부분들을 병렬로 처리한 결과가 전체 프로그램을 순차적으로 처리한 경우와 동일한 결과를 얻을 수 있어야 함.

[멀티코어]

  • 멀티 코어 (Multi core) : 다이 하나에 2개 이상의 코어를 집적함
  • 멀티 쓰레드 (Multi thread) : 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험
  • 멀티 프로세스 (Multi process) : 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점
  • Context Switching : 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전 프로세스의 상태(Context)를 보관하고 새로운 프로세스의 상태를 적재하는 작업

 

  • 볶음밥 조리의 병렬 처리

3인분의 볶음밥을 동시에 만드는 과정을 나타낸 것임.

더보기

[그림 2-27 설명]

  • 볶음밥 A 재료의 세척이 끝나, 손질이 시작되면 볶음밥 B의 재료를 세척하고, 볶음밥 B의 재료손질이 시작되면, 볶음밥 C의 재료를 세척함
  • 이러한 방식으로 볶음밥을 조리하면 60분만에 3인분을 조리할 수 있음
  •  이렇게 한 주방에서 여러 개의 볶음밥을 동시에 조리하는 것을 CPU의 사양에 비유하면 하나의 코어에 여러 개의 스레드를 이용하는 방식과 같음. (참고: 스레드는 CPU의 작업단위로, 한 번에 여러 개의 스레드를 처리하는 방식을 멀티스레드라고 함)

 

[병렬처리시 고려사항 공부 후 다시 설명]

  •  A는 채소를 손질하는 것, B는 A에서 손질한 채소를 조리한다고 하면, B는 다른 재료가 다 준비되어 있어도 A가 끝날끝날 때 작업을 시작할 수 없음. 

 

  • 파이프라인 기법
    • 하나의 코어에 여러 개의 스레드(thread)를 이용하는 방식
  • 슈퍼스칼라 기법
    • 듀얼코어 CPU를 이용해 2개의 작업을 동시에 처리하는 방식


병렬 처리 시 고려 사항

  • 상호 의존성이 없어야 병렬 처리가 가능
    • 각 명령이 서로 독립적이고 앞의 결과가 뒤의 명령에 영향을 미치지 않아야 함
  • 각 단계의 시간을 일정하게 맞춰야 병렬 처리가 원만하게 이루어짐
    • 오랜 시간이 걸리는 작업 때문에 진행이 전반적으로 밀려서 전체 작업 시간이 늘어나므로 단계별 시간의 차이가 크면 병렬 처리의 효과가 떨어짐

  • 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 함
    • 병렬 처리의 깊이 N은 동시에 처리할 수 있는 작업의 개수를 의미
    • 이론적으로는 N이 커질수록 동시에 작업할 수 있는 작업의 개수가 많아져서 성능이 높아지지만, 작업을 너무 많이 나누면 각 단계마다 작업을 이동하고 새로운 작업을 불러오는 데 시간이 너무 많이 걸려서 오히려 성능이 떨어짐

병렬처리에서 작업을 N개로 나누었을 때 N을 병렬 처리의 깊이라고 함. [그림 2-30]과 같이 병렬처리의 깊이가 2인 경우 작업을 두 단계로 나눈 것, 동시에 처리 할 수 있는 작업의 개수가 최대 2개.


병렬 처리 기법

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

더보기
  • 컴퓨터에서 실제로 병렬처리가 어떻게 이루어지는지 살펴보자. CPU내에서 명령어는 제어장치가 처리함. 제어장치는 명령어를 가져와 해석한 후 실행하고 결과를 저장하는 과정을 계속 반복함
  • 런과정 전체를 하나의 스레드라 함. 스레드를 이루는 각 단계는 CPU의 클록과 연동되어 한 클록에 한 번씩 이루어짐
  • CPU에서 명령이 실행되는 과정 4단계가 일반적임
  • 병렬처리기법은 하나의 코어에서 작업을 나누어 병렬로 처리하는 파이프라인 기법과 여러 개의 코어를 사용하여 동시에 작업을 진행하는 슈퍼스칼라 기법, VLIW 기법 등이 있음

 

  • 파이프라인 기법
    • CPU의 사용을 극대화하기 위해 명령을 겹쳐서 실행하는 방법

더보기
  • 하나의 코어에 여러 개의 스레드를 사용하는 것
  • 명령어를 여러 개의 단계로 분할한 후, 각 단계를 동시에 처리하는 H/W를 독립적으로 구성. 기존방법은 한 명령어를 처리하기 위해 명령어처리 4단계를 모두 마치고 다음 명령어를 실행하지만, 파이프라인 방법은 명령어 처리의 단계마다 독립적으로 구성, 각 단계가 쉬지 않고 명령어를 처리할 수 있음. [그림 2-32]와같이 명령어 처리 4단계는 동시에 처리되는 명령어개수 최대 4개임

 

  • 파이프라인의 위험
    • 데이터 위험 (Data hazard)
      • 데이터의 의존성 때문에 발생하는 문제
      • 데이터 A를 필요로 하는 두 번째 명령어는 앞의 명령어가 끝날 때까지 동시에 실행되어서는 안 됨
      • 데이터의 위험은 파이프라인의 명령어 단계를 지연하여 해결
    • 제어 위험 (control hazard)
      • 프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험 (cf : 프로그램 카운터는 다음에 실행할 명령어의 주소를 저장)
      • 첫 명령어를 실행하고 보니 goto 문이어서 다음 문장이 아니라 다른 문장으로 이동하게 되면 현재 동시에 처리되고 있는 명령어들이 쓸모없어짐
      • 제어 위험은 분기 예측이나 분기 지연 방법으로 해결
    • 구조 위험 (structural hazard)
      • 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제
      • 명령어 A가 레지스터 RX를 사용하고 있는데 병렬 처리되는 명령어 B도 레지스터 RX를 사용해야 한다면 서로 충돌
      • 구조 위험은 해결하기 어렵다고 알려져 있음

 

  • 슈퍼스칼라 기법 (super - scalar)
    • 파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식
    • 대부분은 파이프라인 기법과 동일하지만 코어를 2개 구성하여 각 단계에서 동시에 실행되는 명령어가 2개라는 점이 다름

더보기
  • 이런 경우 전체적으로 동시에 실행되는 명령어의 개수는 8개임
  • 이 기법에서도 명령어 상호의존성이 없어야 함. 오늘날의 CPU는 대부분 슈퍼스칼라 기법 사용함

 

  • 슈퍼파이프라인 기법 (super - pipeline)
    • 파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리
    • 한 클록 내에 여러 명령어를 실행하면 다음 명령어가 빠른 시간 안에 시작될 수 있어 병렬 처리 능력이 높아짐

더보기
  • 파이프라인 기법을 강화한 방법
  • 파이라인 기법에서는 한 클록마다 하나의 명령어를 실행하지만, 슈퍼파이프라인 기법에서는 파이프라인의 각 단계를 세분하여 한 클록내에 여러 명령어를 처리할 수있음
  • 한 클록 내에 여러 명령어를 실행하면 다음 명령어가 빠른 시간 안에 시작될 수 있어 병렬 처리 능력이 높아짐 (슈퍼컴퓨터의 CPU에서 사용됨)

 

  • 슈퍼파이프라인 슈퍼스칼라 기법 (super-pipelined super-scalar)
    • 슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행하는 방식

더보기
  • 모든 병렬처리 기법들을 통합한 방법
  • 슈퍼스칼라 기법이 파이프라인 기법을 여러 개의 코어에서 동시에 수행하는 방식이라면, 슈퍼파이프라인 슈퍼스칼라 기법은 슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행하는 방식

 

  • VLIW 기법 (Very Long Instruction Word)
    • CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬 처리를 하는 방법
    • 동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행
    • CPU가 병렬 처리를 지원하지 않을 때 사용하는 방법이므로 앞의 병렬 처리 기법들에 비해 동시에 처리하는 명령어의 개수가 적음
    • 컴파일 시 병렬 처리가 이루어짐.


@심화// 무어의 법칙과 암달의 법칙

  • 무어의 법칙 (Moore's law)
    • CPU의 속도가 24개월마다 2배 빨라진다는 내용
    • 초기의 CPU에만 적용되며 지금은 그렇지 않음
  • 암달의 법칙 (Amdahl's law)
    • 컴퓨터 시스템의 일부를 개선할 때 전체 시스템에 미치는 영향과의 관계를 수식으로 나타낸 법칙
    • 이 법칙에 따르면 주변장치의 향상 없이 CPU의 속도를 2GHz에서 4GHz로 늘리더라도 컴퓨터의 성능이 2배 빨라지지 않음

댓글