게으른 나에게

[혼자 공부하는 컴퓨터구조+운영체제] "chapter5. CPU 성능 향상 기법" 본문

My Study/서적 공부

[혼자 공부하는 컴퓨터구조+운영체제] "chapter5. CPU 성능 향상 기법"

handbefore 2024. 8. 3. 18:41

5-1 빠른 CPU를 위한 설계 기법

클럭

클럭 속도가 높아지면 CPU 명령어 사이클을 더 빠르게 반복, 다른 부품들도 더 빠르게 작동.

클럭속도: 헤르츠(Hz) 단위로 측정. 1초에 클럭이 몇번 반복되는지.

클럭이 1초에 한번 반복되면 CPU 클럭속도는 1Hz, 클럭이 1초에 100번 반복되면 CPU 클럭 속도는 100Hz.

오버클럭킹: CPU는 계속 일정한 클럭속도를 유지하기보다 고성능을 요하는 순간에 순간적으로 클럭 속도 높임. 그렇지 않을떈 속도 낮춤.

클럭 속도를 무작정 높이는 것은 발열 문제.

 

코어와 멀티코어

CPU 성능 높이는 법: CPU의 코어와 스레드 수 늘리는 방법.

코어: 명령어를 실행하는 부품.

CPU는 명령어를 실행하는 부품을 여러개 포함하는 부품으로 명칭의 범위 확장.

코어는 명령어를 실행하는 부품 여덟개 포함 의미.

멀티코어 CPU(=멀티코어 프로세서)

코어를 여러개 포함하고 있는 CPU. CPU내 명령어 처리 기능 여러개.

클럭 속도가 2.4GHz인 단일 코어 CPU      <      클럭 속도가 1.9GHz인 멀티코어 CPU

CPU의 연산 속도가 꼭 코어 수에 비례하지 않음. 코어마다 처리할 연산이 적절히 분배되지 않는다면 코어 수에 비례하여 연산 속도 증가x.

처리하고자 하는 작업량보다 코어수가 지나치게 많아도 성능에 크게 영향 x.

※코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐. 그에 따라 연산속도 크게 달라짐.

 

스레드와 멀티스레드

스레드: 실행흐름의 단위

-하드웨어적 스레드: CPU에 사용됨.

-소프트웨어적 스레드: 프로그램에 사용됨.

 

 

하드웨어적 스레드(=멀티스레드 프로세서, 멀티스레드 CPU)

하나의 코어가 동시에 처리하는 명령어 단위.

여러 스레드를 지원하는 CPU는 하나의 코어로도 여러개 명령어 동시에 실행.

하이퍼스레딩: 인텔의 멀티스레드 기술

 

소프트웨어적 스레드

하나의 프로그램에서 독립적으로 실행되는 단위.

하나의 프로그램은 실행되는 과정에서 한 부분만 실행. 프로그램의 여러 부분이 동시에 실행.

 

멀티스레드 프로세서

가장 큰 핵심은 레지스터.

하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터 여러개 가지고 있으면 됨.

하드웨어 스레드   =    논리프로세서

 

 

 


 

 

5-2 명령어 병렬 처리 기법

CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하게 만드는 것 중요.

 

명령어 파이프라인

명령어 처리 과정을 클럭 단위로 나눔.

1. 명령어 인출 (Instruction Fetch)

2. 명령어 해석 (Instruction Decode)

3. 명령어 실행 (Execute Instruction)

4. 결과 저장 (Write Back)

 

같은 단계가 겹치지 않는다면 CPU는 각 단계를 동시에 실행할 수 있음. 효율적

 

명령어 파이프라인: 공장 생산라인과 같이 명령어들을 넣는 곳.

명령어 파이프라이닝: 명령어 파이프라인에 넣고 동시에 처리하는 기법.

이프라인 위험: 특정 상황에서는 성능 향상에 실패하는 경우.

데이터위험: 명령어 간 데이터 의존성에 의해 발생. 모든 명령어를 동시에 처리 x. 어떤 명령어는 이전 명령어를 끝까지 실행해야만 실행 가능.

명령어 2는 명령어 1의 데이터에 의존.

데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 하면 파이프라인이 제대로 작동하지 않음.

 

제어위험: 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생.

기본적으로 프로그램 카운터는 현재 실행중인 명령어 다음 주소로 갱신.

프로그램 실행 흐름이 바뀌어 명령어가 실행되면서 프로그램 카운터 값에 갑작스러운 변화 생기면 명령어 파이프 라인에 미리 처리중인 명령어들 쓸모 x.

 

분기예측: 제어 위험을 위해 사용하는 기술. 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술.

 

구조적 위험(=자원 위험): 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레이스터 등과 같은 CPU부품을 사용하려고 할 때 발생.

 

슈퍼스칼라

CPU 내부에 여러개의 명령어 파이프라인을 포함한 구조.

슈퍼스칼라 프로세서(=슈퍼스칼라 CPU): 슈퍼스칼라 구조로 처리가 가능한 CPU.

슈퍼스칼라 프로세서는 매 클럭 주기마다 동시에 여러 명령어를 인출할 수도, 실행할 수도 있어야 함.

멀티스레드 프로세서는 슈퍼스칼라 구조 사용 가능.

슈퍼스칼라 프로세서는 파이프라인 개수에 비례하여 프로그램 처리 속도 빨라짐.

하지만 파이프라인 위험 등의 예상치 못한 문제로 반드시 파이프라인 개수에 비례하여 빨라지지x.

위험을 방지하기 위해 고도 설계 필요.

 

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

명령어들은 순차적으로 처리하지 않는 기법.

서로 데이터 의존성이 전혀 없는, 순서를 바꿔 처리해도 수행결과에 영향을 미치지 않는 명령어들을 먼저 실행하며 명령어 파이프라인이 멈추는 것을 방지하는 기법.

하지만 아무 명령어나 순서를 바꿔서 수행x.

어떤 명령어와 데이터 의존성을 가지고 있는지, 순서를 바꿔 실행할 수 있는 명령어에는 어떤 것들이 있는지 판단 필요.

 

 


 

5-3 CISC와 RISC

CPU가 파이프라이닝과 슈퍼스칼라 기법을 효과적으로 사용하려면 CPU가 인출하고 해석하고 실행하는 명령어가 파이프라닝 하기 쉽게 생겨야 함.

'파이프라이닝 하기 쉬운 명령어' 필요.

 

명령어 집합

명령어의 세세한 생김새, 명령어로 할 수 있는 연산, 주소 지정방식 등은 CPU마다 차이 존재.

명령어 집합(=명령어 집합 구조(ISA)): CPU가 이해할 수 있는 명령어들의 모음.

CPU마다 ISA가 다를 수 있다는 것.

 

ISA가 다르다는 건 CPU가 이해할 수 있는 명령어가 다르다는 뜻. 명령어가 달라지면 어셈블리어도 달라짐.

 

ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만, ISA가 다르면 서로의 명령어 이해 X.

ISA는 일종의 CPU의 언어인 셈.

ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속.

 

명령어 파이프라인, 슈퍼스칼라, 비순차적 명령어 처리를 사용하기에 유리한 명령어 집합이 있고, 그렇지 못한 명령어 집합도 존재.

 

CISC(Complex Instruction Set Computer)

복잡한 명령어 집합을 활용하는 컴퓨터.

다양하고 강력한 기능의 명령어 집합을 활용.

가변길이 명령어: 명령어의 형태와 크기가 다양한 활용 방법.

상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다는 것 의미. 명령어 몇 개 만으로도 수행 가능.

 

단점

명령어가 워낙 복잡하고 다양한 기능 제공. 명령어의 크기와 실행되기까지의 시간 일정하지 않음.

복잡한 명령어 때문에 명령어 하나를 실행하는데에 여러 클럭 주기 필요.

규격화 X.

대다수 복잡한 명령어 사용 적음.

 

① 빠른 처리를 위해 명령어 파이프라인 활용 필요. 원활한 파이프라니잉을 위해 명령어 길이와 수행시간이 짧고 규격화되어 있어야 함.

자주 쓰이는 명령어만 줄곧 사용 됨. 복잡한 기능을 지원하는 명령어 추가보단, 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것 중요.

 

RISC(Reduced Instruction Set Computer) (=load-store 구조)

명령어의 종류 적음.

짧고 규격화된 명령어. 1클럭 내외로 실행되는 명령어 지향. 고정 명령어 활용.

명령어 파이프라이닝에 최적화.

메모리에 직접 접근하는 명령어 load, store 두개로 제한. 메모리 접근 단순화. 최소화 추구. 레지스터 적극적 활용.

레지스터 이용하는 연산 많고, 범용 레지스터 개수도 더 많음.

많은 명령으로 프로그램 작동.

 

CISC 와 RISC 차이

CISC RISC
복잡하고 다양한 명령어 단순하고 적은 명령어
가변 길이 명령어 고정 길이 명령어
다양한 주소 지정 방식 적은 주소 지정 방식
프로그램을 이루는 명령어 수 적음 프로그램 이루는 명령어 수 많음
여러 클럭에 걸쳐 명령어 수행 1클럭 내외로 명령어 수행
파이프라이닝 하기 어려움  파이프라이닝하기 쉬움

 

 

 

 


출처

https://hongong.hanbit.co.kr/%ec%bb%b4%ed%93%a8%ed%84%b0-%ea%b5%ac%ec%a1%b0-%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9c/

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr