본문 바로가기
cs기초 지식 정리/컴퓨터구조, 운영체제

빠른 cpu 설계 기법, 명령어 병렬 처리 기법

by 세용용용용 2024. 3. 20.

[ "혼자 공부하는 컴퓨터구조 + 운영체제" ] 공부한 후 정리한 내용 입니다

 


1. 빠른 cpu 설계

  • CPU를 빠르게 만든다는 건 한 번에 더 많은 일을, 더 빨리 처리하는 것을 의미 →  단순한 생각은 클럭 속도를 높이면 되지 않을까?

 

(1) 클럭만 높이면 생기는 문제

  • 전력 소모 증가 →  발열 급증

 

(2) 그럼 어떻게 빠르게 만들까? → 일을 나눠 동시에 처리하자!

  • 코어 수 늘리는 방법
  • 스레드 수 늘리는 방법

 


2. 코어(Core)

  • 코어 = 명령어를 실제 실행하는 부품 ( ALU + 제어장치 + 레지스터 )
  • 멀티코어 프로세서 : 여러 개의 코어를 가지고 있는 CPU

 

(1) 코어 수를 늘리면 무조건 빨리짐?

  • 꼭 그런 건 아님 → 항상 성능이 비례해서 증가하지는 않음..
  • 명령어를 얼마나 잘 나눠주느냐가 중요!

 

(2) 왜 코어가 많아도 느릴 수 있을까?

  • 명령어가 잘 분배되지 않는 경우 → 특정 코어만 계속 일함 → 나머지 코어 논떙이.. → 속도 향상 없음

 


3. 스레드

  • 스레드는 작업을 처리하는 흐름 단위
  • 크게 하드웨어적 스레드와 소프트웨어적 스레드로 나뉨

 

(1) 하드웨어적 스레드

  • 하나의 코어가 동시 처리할 수 있는 명령 단위 → 1개의 코어가 여러 작업을 동시에 처리하는 것처럼 보이는 기술
  • 멀티 스레드 프로세서 라고함
  • 위 그림에선 각각의 코어가 2개의 스레드를 실행할 수 있다 → 각 코어가 두 개의 작업 흐름을 동시에 처리 가능하다는 뜻

 

(2) 멀티 스레드 프로세서 설계 핵심 → 레지스터

  • 레지스터 → CPU 내부 임시 저장 공간
  • 레지스터 세트 → 하나의 명령 실행에 꼭 필요한 레지스터 묶음
  • 스레드 하나당 자신만의 레지스터 세트를 가짐 → 즉, 레지스터 세트 개수 = 동시 처리 가능한 스레드 수

 

(3) 소프트웨어적 스레드

  • 하나의 프로그램 안에서 독립적으로 실행되는 작업 단위
  • 운영체제가 관리 → 프로그래밍에서 말하는 thread

 


4. 명령어 병렬 처리 

  • CPU가 여러 명령어를 겹쳐서 동시에 처리해 속도를 높이는 방식

 

(1) 명령어 파이프라인

  • CPU는 하나의 명령어를 4단계로 처리 : ( 명령어 인출 → 명령어 해석 →  명령어 실행 → 결과 저장 )
  • 같은 단계만 겹치지 않으면 동시에 실행 가능

[ 파이프라인 위험 ]

( 데이터 위험 ) : 명령어 간 데이터 의존성에 의해

  • 2번 명령어가 1번 명령어 결과값이 있어야 실행 가능 → 2번은 1번이 끝날 떄까지 대기해야됨..
  • 파이프라인 흐름 끊김

 

( 제어 위험 ) : 프로그램 카운터의 갑작스러운 변화 ( 분기, 점프, 인터럽트 )

  • 뒤쪽 명령어들이 무효가됨..
  • 해결 아이디어 : 분기 예측 → CPU가 미리 분기 결과를 예측

 

( 구조적 위험 ) : 서로 다른 명령어가 같은 CPU 부품을 동시에 사용하려는 경우

 

 

(2) 슈퍼스칼라

  • CPU 내부에 여러 개의 명령어 파이프라인을 가진 구조

 

(3) 비순차적 명령어 처리

  • 명령어 파이프라인 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법

  • 명령어를 순차적으로 처리 시 3번 명령어에서 파이프 라인 중단이 발생( 데이터 위험 ) 
  • 3번 명령어를 맨 뒤로 바꾼다면??? 즉, (1 → 2 →  4 → 5 → 3) 문제가 없고 더 효율적인 파이프라인이 형성됨

 

But.. 명령어 순서를 바꿔도 프로그램 전체 결과가 같을 때만 순서 변경 가능