더욱 빠른 CPU
빠른 CPU를 위한 설계 기법
클럭 - 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
1. 컴퓨터 부품들은 클럭 신호에 맞춰 일사불란하게 움직인다.
2. CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직일까? -> 일반적으로는 그렇다.
클럭 속도
- 클럭 속도: 헤르츠(Hz) 단위로 측정
- 헤르츠(Hz): 1초에 클럭이 반복되는 횟수
- 클럭이 똑-딱 하고 1초에 한 번 반복되면 1Hz
- 클럭이 1초에 100번 반복되면 100Hz
Max 4.9GHz Base 2.5GHz -> 1초에 최대 49억번, 기본적으로 25억번 반복된다
클럭 신호를 마냥 높이면 CPU가 빨라진다? -> 꼭 그렇지는 않다. 필요 이상으로 클럭을 높이면 발열이 심해진다.
코어와 멀티 코어
클럭 속도를 늘리는 방법 이외에는?
- 코어 수를 늘리는 방법 (듀얼코어, 멀티코어 등)
- 스레드 수를 늘리는 방법 (멀티 스레드 등)
- 하나의 CPU로 동시에 처리할 수 있는 연산 개수를 늘려 연산 능력 향상
코어(Core)란?
- 코어는 CPU 내에서 명령어를 실행하는 부품으로 여러 개 있을 수 있다
- 현대적인 관점에서 "CPU"라는 용어를 재해석해야 한다.
- 명령어를 실행하는 부품?
- 전통적으로 명령어를 실행하는 부품은 원칙적으로 하나만 존재
- 오늘날 CPU에는 명령어를 실행하는 부품이 여러 개 존재
- 명령어를 실행(연산 작업 실행)하는 부품을 코어라는 용어로 사용

멀티코어 프로세서란 여러 개의 코어를 포함하고 있는 CPU를 말한다.
코어 수에 비례해서 연산속도가 증가하는지? -> 한 번에 처리할 수 있는 작업량이 비례해 증가하는 것이지 속도가 비례해서 증가하지는 않는다.
스레드와 멀티 스레드
스레드란 실행 흐름의 단위

- 스레드는 하드웨어적 스레드와 소프트웨어적 스레드가 있다.
- 하드웨어 스레드: 하나의 코어가 동시에 처리하는 명령어 단위, 논리 프로세서라고도 부른다. 1개 코어에 1개 스레드가 있는 게 일반적이었으나, 하이퍼스레딩 개념 도입으로 멀티 스레드 지원이 가능하게 되었다고 한다.
- 소프트웨어 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위 (운영체제에서 자세히 다룰 주제)
ex) 워드에서 파일을 만들었을 때
1. 사용자로부터 입력받은 내용을 화면에 보여주는 기능
2. 사용자가 입력한 내용이 맞춤법에 맞는지 검사하는 기능
3. 사용자가 입력한 내용을 수시로 저장하는 기능
1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.
하드웨어 스레드
- 멀티스레드 프로세서를 실제로 설계하는 일은 매우 복잡하다. 가장 큰 핵심은 레지스터
명령어 파이프라인
명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면?
1. 명령어 인출 (instruction fetch)
2. 명령어 해석 (instruction decode)
3. 명령어 실행 (Execute Instruction)
4. 결과 저장 (write back)
명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법이다. 각 명령어의 실행시간 개선하지는 못하지만, 처리량을 개선할 수는 있다.
같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행할 수 있다.

파이프라인 위험
-명령어 파이프라인이 성능 향상에 실패하는 경우, 즉 특정한 이유로 다음 clock cycle에 명령어가 실행되지 않는 상
- 데이터 위험 (Data Hazard)
- 제어 위험 (Control Hazard)
- 구조적 위험 (Structure Hazard)
데이터 위험 (Data Hazard)
- 명령어 간의 의존성에 의해 야기
- 모든 명령어를 동시에 처리할 수는 없다.
- 이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우
ex
명령어 1: R1 ← R2 + R3 // R2 레지스터 값과 R3 레지스터 값을 더한 값을 R1 레지스터에 저장
명령어 2: R4 ← R1 + R5 // R1 레지스터 값과 R5 레지스터 값을 더한 값을 R4 레지스터에 저장
제어 위험 (Controll Hazard)
- 프로그램 카운터의 갑작스러운 변화
- 즉, 프로그램 카운터가 특정 주소로 변할 때 일어난다.
- beq 또는 J 명령어 등 분기 명령어를 통해 명령어를 건너뛰어버리면 프로그램 카운터 값이 변해버리고 중간에 있는 명령어를 실행하지 않는다. -> pipeline instruction에 영
구조 위험 (Structure Hazard)
- 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때 일어난다.
슈퍼스칼라
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조 (오늘날의 멀티스레드 프로세서)
- 이론적으로는 파이프라인 개수에 비례하여 처리 속도 증가
- 그러나 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하지는 않는다.
비순차적 명령어 처리
- 비순차적 명령어 처리 기법은 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법이다.
- 합법적인 새치기
- 아무 명령어가 순서를 바꿀 수는 없다.
- 프로그램 실행 흐름에 영향이 없는, 즉 의존성이 없는 명령어만 바꿀 수 있다.
명령어 집합 (Instruction Set Architecture, Instruction Set)
- CPU는 명령어를 실행한다.
- 명령어의 세세한 생김새, 연산, 주소 지정 방식 등은 CPU마다 다르다.
- 명령어 집합은 CPU가 이해할 수 있는 명령어들의 모음이다.
- 인텔 CPU 컴퓨터에서 만든 실행 파일을 그대로 아이폰에 옮겨 특별한 설정 없이 바로 실행하면 실행이 안된다.
- 인텔의 CPU는 일반적으로 X86 (X86-64) 명령어 집합을, 애플의 CPU는 일반적으로 ARM 명령어 집합을 따른다.
- 명령어 집합이 다르기 때문에 같은 소스 코드를 컴파일 할지라도 나오는 기계어 종류가 다를 수 있다.
- 명령어 집합(ISA, instruction set architecture)은 CPU의 언어인 셈이다.
- ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이다.
- 언어가 다르면 생활양식이 다를 수 있는 것처럼, 명령어가 달라지면 그에 대한 나비효과로 많은 것들이 달라진다.
- 명령어 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등
명령어 집합의 두 축: CISC & RISC
CISC (Complex Instruction Set Computer)
- 복잡한 명령어 집합을 활용하는 컴퓨터
- x86, x86-64 는 CISC 기반 명령어 집합 구조
- 복잡하고 다양한 명령어 활용
- 명령어의 형태와 길이가 다양한 가변 길이 명령어를 활용한다.
- 다양하고 강력한 명령어를 활용
- 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다.
- 메모리를 최대한 아끼며 개발해야했던 시절에는 인기가 높았으나 명령어 파이프라이닝이 불리하다는 치명적인 단점이 있다.
- 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
- 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기가 필요하다.
- 대다수의 복잡한 명령어는 사용 빈도가 낮다. (자주 쓰는 명령어만 사용한다.)
RISC (Reduced Instruction Set Computer)
- 명령어 종류가 적고, 짧고 규격화된 명령어 사용
- RISC는 단순하고 적은 수의 고정 길이 명령어 집합을 활용한다.
- RISC는 짧고 규격화된 명령어를 활용하기에 명령어 파이프라이닝에 유리하다.
- 메모리 접근 최소화(load, store), 레지스터 활용
- 명령어 종류가 CISC보다 적기 때문에 더 많은 명령어로 프로그램을 동작시킨다.
정리
CISC vs RISC
복잡하고 다양한 명령어 vs 단순하고 적은 명령어
가변 길이 명령어 vs 고정길이 명령어
다양한 주소 지정 방식 vs 적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음 vs 프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행 vs 1클럭 내외로 명령어 수행
파이프라이닝 어려움 vs 파이프라이닝 쉬움
현대 CPU 설계에서, CISC도 cpu 내부에서 명령어를 잘게 쪼게(마이크로 명령어) 1클럭 안에 실행할 수 있도록 하고 있다.
'컴퓨터 구조' 카테고리의 다른 글
[컴퓨터구조] 보조기억장치 (1) | 2024.03.25 |
---|---|
[컴퓨터구조] RAM (0) | 2024.03.23 |
[컴퓨터구조] CPU (1) | 2024.03.14 |
[컴퓨터구조] 소스 코드와 명령어 (1) | 2024.03.08 |
[컴퓨터구조] 컴퓨터가 0과 1로 숫자 및 문자를 표현하는 방법 (1) | 2024.03.08 |
더욱 빠른 CPU
빠른 CPU를 위한 설계 기법
클럭 - 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위
1. 컴퓨터 부품들은 클럭 신호에 맞춰 일사불란하게 움직인다.
2. CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직일까? -> 일반적으로는 그렇다.
클럭 속도
- 클럭 속도: 헤르츠(Hz) 단위로 측정
- 헤르츠(Hz): 1초에 클럭이 반복되는 횟수
- 클럭이 똑-딱 하고 1초에 한 번 반복되면 1Hz
- 클럭이 1초에 100번 반복되면 100Hz
Max 4.9GHz Base 2.5GHz -> 1초에 최대 49억번, 기본적으로 25억번 반복된다
클럭 신호를 마냥 높이면 CPU가 빨라진다? -> 꼭 그렇지는 않다. 필요 이상으로 클럭을 높이면 발열이 심해진다.
코어와 멀티 코어
클럭 속도를 늘리는 방법 이외에는?
- 코어 수를 늘리는 방법 (듀얼코어, 멀티코어 등)
- 스레드 수를 늘리는 방법 (멀티 스레드 등)
- 하나의 CPU로 동시에 처리할 수 있는 연산 개수를 늘려 연산 능력 향상
코어(Core)란?
- 코어는 CPU 내에서 명령어를 실행하는 부품으로 여러 개 있을 수 있다
- 현대적인 관점에서 "CPU"라는 용어를 재해석해야 한다.
- 명령어를 실행하는 부품?
- 전통적으로 명령어를 실행하는 부품은 원칙적으로 하나만 존재
- 오늘날 CPU에는 명령어를 실행하는 부품이 여러 개 존재
- 명령어를 실행(연산 작업 실행)하는 부품을 코어라는 용어로 사용

멀티코어 프로세서란 여러 개의 코어를 포함하고 있는 CPU를 말한다.
코어 수에 비례해서 연산속도가 증가하는지? -> 한 번에 처리할 수 있는 작업량이 비례해 증가하는 것이지 속도가 비례해서 증가하지는 않는다.
스레드와 멀티 스레드
스레드란 실행 흐름의 단위

- 스레드는 하드웨어적 스레드와 소프트웨어적 스레드가 있다.
- 하드웨어 스레드: 하나의 코어가 동시에 처리하는 명령어 단위, 논리 프로세서라고도 부른다. 1개 코어에 1개 스레드가 있는 게 일반적이었으나, 하이퍼스레딩 개념 도입으로 멀티 스레드 지원이 가능하게 되었다고 한다.
- 소프트웨어 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위 (운영체제에서 자세히 다룰 주제)
ex) 워드에서 파일을 만들었을 때
1. 사용자로부터 입력받은 내용을 화면에 보여주는 기능
2. 사용자가 입력한 내용이 맞춤법에 맞는지 검사하는 기능
3. 사용자가 입력한 내용을 수시로 저장하는 기능
1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.
하드웨어 스레드
- 멀티스레드 프로세서를 실제로 설계하는 일은 매우 복잡하다. 가장 큰 핵심은 레지스터
명령어 파이프라인
명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면?
1. 명령어 인출 (instruction fetch)
2. 명령어 해석 (instruction decode)
3. 명령어 실행 (Execute Instruction)
4. 결과 저장 (write back)
명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법이다. 각 명령어의 실행시간 개선하지는 못하지만, 처리량을 개선할 수는 있다.
같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행할 수 있다.

파이프라인 위험
-명령어 파이프라인이 성능 향상에 실패하는 경우, 즉 특정한 이유로 다음 clock cycle에 명령어가 실행되지 않는 상
- 데이터 위험 (Data Hazard)
- 제어 위험 (Control Hazard)
- 구조적 위험 (Structure Hazard)
데이터 위험 (Data Hazard)
- 명령어 간의 의존성에 의해 야기
- 모든 명령어를 동시에 처리할 수는 없다.
- 이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우
ex
명령어 1: R1 ← R2 + R3 // R2 레지스터 값과 R3 레지스터 값을 더한 값을 R1 레지스터에 저장
명령어 2: R4 ← R1 + R5 // R1 레지스터 값과 R5 레지스터 값을 더한 값을 R4 레지스터에 저장
제어 위험 (Controll Hazard)
- 프로그램 카운터의 갑작스러운 변화
- 즉, 프로그램 카운터가 특정 주소로 변할 때 일어난다.
- beq 또는 J 명령어 등 분기 명령어를 통해 명령어를 건너뛰어버리면 프로그램 카운터 값이 변해버리고 중간에 있는 명령어를 실행하지 않는다. -> pipeline instruction에 영
구조 위험 (Structure Hazard)
- 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때 일어난다.
슈퍼스칼라
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조 (오늘날의 멀티스레드 프로세서)
- 이론적으로는 파이프라인 개수에 비례하여 처리 속도 증가
- 그러나 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하지는 않는다.
비순차적 명령어 처리
- 비순차적 명령어 처리 기법은 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법이다.
- 합법적인 새치기
- 아무 명령어가 순서를 바꿀 수는 없다.
- 프로그램 실행 흐름에 영향이 없는, 즉 의존성이 없는 명령어만 바꿀 수 있다.
명령어 집합 (Instruction Set Architecture, Instruction Set)
- CPU는 명령어를 실행한다.
- 명령어의 세세한 생김새, 연산, 주소 지정 방식 등은 CPU마다 다르다.
- 명령어 집합은 CPU가 이해할 수 있는 명령어들의 모음이다.
- 인텔 CPU 컴퓨터에서 만든 실행 파일을 그대로 아이폰에 옮겨 특별한 설정 없이 바로 실행하면 실행이 안된다.
- 인텔의 CPU는 일반적으로 X86 (X86-64) 명령어 집합을, 애플의 CPU는 일반적으로 ARM 명령어 집합을 따른다.
- 명령어 집합이 다르기 때문에 같은 소스 코드를 컴파일 할지라도 나오는 기계어 종류가 다를 수 있다.
- 명령어 집합(ISA, instruction set architecture)은 CPU의 언어인 셈이다.
- ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이다.
- 언어가 다르면 생활양식이 다를 수 있는 것처럼, 명령어가 달라지면 그에 대한 나비효과로 많은 것들이 달라진다.
- 명령어 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등
명령어 집합의 두 축: CISC & RISC
CISC (Complex Instruction Set Computer)
- 복잡한 명령어 집합을 활용하는 컴퓨터
- x86, x86-64 는 CISC 기반 명령어 집합 구조
- 복잡하고 다양한 명령어 활용
- 명령어의 형태와 길이가 다양한 가변 길이 명령어를 활용한다.
- 다양하고 강력한 명령어를 활용
- 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다.
- 메모리를 최대한 아끼며 개발해야했던 시절에는 인기가 높았으나 명령어 파이프라이닝이 불리하다는 치명적인 단점이 있다.
- 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
- 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기가 필요하다.
- 대다수의 복잡한 명령어는 사용 빈도가 낮다. (자주 쓰는 명령어만 사용한다.)
RISC (Reduced Instruction Set Computer)
- 명령어 종류가 적고, 짧고 규격화된 명령어 사용
- RISC는 단순하고 적은 수의 고정 길이 명령어 집합을 활용한다.
- RISC는 짧고 규격화된 명령어를 활용하기에 명령어 파이프라이닝에 유리하다.
- 메모리 접근 최소화(load, store), 레지스터 활용
- 명령어 종류가 CISC보다 적기 때문에 더 많은 명령어로 프로그램을 동작시킨다.
정리
CISC vs RISC
복잡하고 다양한 명령어 vs 단순하고 적은 명령어
가변 길이 명령어 vs 고정길이 명령어
다양한 주소 지정 방식 vs 적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음 vs 프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행 vs 1클럭 내외로 명령어 수행
파이프라이닝 어려움 vs 파이프라이닝 쉬움
현대 CPU 설계에서, CISC도 cpu 내부에서 명령어를 잘게 쪼게(마이크로 명령어) 1클럭 안에 실행할 수 있도록 하고 있다.
'컴퓨터 구조' 카테고리의 다른 글
[컴퓨터구조] 보조기억장치 (1) | 2024.03.25 |
---|---|
[컴퓨터구조] RAM (0) | 2024.03.23 |
[컴퓨터구조] CPU (1) | 2024.03.14 |
[컴퓨터구조] 소스 코드와 명령어 (1) | 2024.03.08 |
[컴퓨터구조] 컴퓨터가 0과 1로 숫자 및 문자를 표현하는 방법 (1) | 2024.03.08 |