클럭, 멀티코어, 멀티스레드가 무엇이길래
CPU 성능 향상에 사용될까?
클럭 (Clock)
--
클럭은
CPU의 제어장치와 전체 CPU가 동작하는 데 중요한 역할을 하는 신호로,
해당 신호를 이용하여 CPU 내의 모든 동작을 동기화하는 데 사용된다.
조금 더 설명하자면
일정한 주기로 반복되는 신호를 클럭이라고 부르며
해당 신호의 각 주기는 CPU가 한 명령어를 처리하는 데 필요한 클럭의 단위로 구분 짓는 데 사용된다.
간단하게 컴퓨터의 모든 부품을 알맞게 동작할 수 있도록 하는 시간 단위라고도 할 수 있다.
그래서 CPU의 동작 속도를 나타내는 척도로
CPU 내부에서 발생하는 전기적 펄스의 빈도를 의미한다.
(해당 펄스는 CPU가 명령어를 처리하는 속도를 결정하게 된다.)
정리
- 컴퓨터 부품들은 정해진 "클럭 신호"에 맞춰서 움직인다.
- CPU는 "명령어 사이클" 흐름에 맞춰 명령어들을 실행한다.
클럭 신호에 따라 속도가 변하는 이유
- 클럭 신호가 빨라짐
- 클럭 신호가 빨라진 만큼 CPU는 명령어 사이클을 더 빠르게 반복 진행
- 명령어 사이클이 빠르게 반복하므로 해당 속도에 맞춰서 다른 부품들도 그에 발맞춰 빠르게 동작
즉, 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다.
그래서 클럭 속도는 CPU의 속도 단위로 간주되기도 한다.
클럭 속도는
헤르츠(Hz) 단위로 측정하며, 이는 1초에 클럭이 몇 번 반복되는지를 의미하며
일반적으로 기가헤르츠(GHz) 단위로 측정된다.
(1GHz = 10억Hz)
다만, 클럭은
시계처럼 일정한 속도로 유지되는 것이 아니라
빨라질 수도 있고, 느려질 수도 있다.
그래서 판매하는 CPU를 살펴보면
기본 클럭 속도(Base)와 최대 클럭 속도(Max)가 같이 표기되어 있는 것을 볼 수 있는데
이는 대부분 상황에서 Base 클럭 속도(최소 보장 속도)로 안정적인 동작을 수행하도록 설계되어 있으며,
특정 조건 하에서 일시적으로 Max 클럭 속도까지 도달할 수 있다는 있다는 표기다.
하지만 클럭 속도만 무지막지하게 높다고 무조건 CPU가 빨라지는 것은 아니다.
그래픽이 많이 요구되는 동작을 수행하는 경우에
클럭 속도가 높을수록 발열 문제가 더 심각해질 수도 있다.
이러한 현상에 대해 일부 원인
- 클럭 속도 상승 -> 전력 소모 증가 -> 발열 발생 (성능은 향상되지만 효율성은 감소)
- 클럭 속도 상승 -> CPU or GPU 내부의 수많은 트랜지스터의 스위칭이 빈번하게 발생 -> 발열 발생
결과적으로
클럭 속도를 높이는 것은 분명 CPU의 속도를 빠르게 만들지만,
클럭 속도만으로는 한계가 존재한다.
클럭 속도 외에 CPU 성능을 높이는 대표적인 방법
- 코어 수 늘리기
- 스레드 수 늘리기
--
코어(Core), 멀티코어(Multi-Core)
--
코어는
기본적으로 알고 있던 CPU 형태를 의미한다.
예전의 CPU는 "명령어를 실행하는 부품"이라고 정의했다.
이는 CPU 내부에 "명령어를 실행하는 부품"이 하나만 존재했기 때문이다.
다만 점점 기술이 발전하면서 CPU 내부에 해당 부품을 얼마든지 만들 수 있게 되면서
예전에 CPU로 정의한 "명령어를 실행하는 부품"을 "코어(Core)"라는 용어로 사용하게 된다.
즉, 코어는 "명령어를 실행하는 부품"을 의미한다.
코어를 2개 이상 포함하고 있는 CPU를 통틀어서 "멀티코어 CPU"라고 부른다.
또는 "멀티코어 프로세서"라고도 부른다.
CPU와 프로세서(Processor)
위에서 두 용어를 같은 의미로 사용했지만,
사실 두 용어의 정의로만 생각하면 정확히 같은 의미는 아니다.
CPU : 중앙 처리 장치로 컴퓨터의 두뇌에서 데이터를 처리하는 장치
프로세서 : 데이터를 처리하는 장치를 지칭하는 포괄적인 용어
간단하게 CPU는 프로세서의 한 유형이라고 할 수 있다.
각 코어 수에 따라 CPU 명칭
- 1core : 싱글코어 (Single-core)
- 2core : 듀얼코어 (dual-core)
- 3core : 트리플코어 (triple-core)
- 4core : 쿼드코어 (quad-core)
- 6core : 헥사코어 (hexa-core)
- 8core : 옥타코어 (octa-core)
- 10core : 데카코어 (deca-core)
- 12core : 도데카코어 (dodeca-core)
코어는 "명령어를 실행(처리)하는 부품"이므로
코어 수가 증가할수록 CPU 내에서 명령어를 처리하는 일꾼들도 많아지는 것이다.
즉, [클럭 속도 = 2.4GHz, 단일코어]보다 [클럭 속도 = 1.9GHz, 멀티코어]가 더 성능이 좋을 것이다.
그러면 코어 수를 100개로 늘리면 일꾼도 100인 셈이니까 처리 속도도 100배 빨라지는 건가?
아쉽게도 CPU의 연산 속도는 꼭 코어 수에 비례하여 증가하지 않는다.
코어가 4개 있다고 가정하면 무조건 코어 4개가 전부 명령어 처리를 수행하지는 않는다.
즉, 작업이 각 코어들에게 균등한 분배가 되지 않는 경우가 있거나 특정 코어만 계속 명령어 처리를 수행할 경우가 존재하기 때문이다.
그래서 각 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐에 따라 연산 속도가 크게 달라진다.
--
스레드(Thread), 멀티스레트(Multi-Thread)
--
스레드는
실행 흐름의 단위를 의미한다.
(실행할 수 있는 길(경로)의 수)
CPU에서 사용하는 스레드와
프로그래밍에서 사용하는 스레드는
사용되는 목적이 다르다.
CPU에서 사용되는 스레드 : 하드웨어적 스레드
프로그래밍에서 사용되는 스레드 : 소프트웨어적 스레드
하드웨어적 스레드는
하나의 코어가 동시에 처리하는 명령어 단위(개수)를 의미한다.
(물리적인 CPU 코어에서 동시에 실행할 수 있는 스레드)
보통 기본적인 CPU를 설명하는 경우 1코어/1스레드인 CPU를 기준으로 설명을 한다.
즉, "명령어를 실행하는 부품"이 하나 있고(1코어), 한 번에 하나씩 명령어를 실행(1스레드)한다.
다만 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다.
위 그림처럼 2코어/4스레드인 경우 동시에 2개의 코어를 동작할 수 있으며
각 코어는 2개씩 스레드를 가지고 있으며 각 코어는 명령어를 동시에 2개씩 실행할 수 있다.
즉, 동시에 총 4개의 명령어까지 처리할 수 있다는 의미다.
이렇게 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를
"멀티스레드 프로세서" 또는 "멀티스레드 CPU"라고 부른다.
Tip.
CPU 회사인 인텔에서는 자신들이 만든 멀티스레드 기술을 "하이퍼스레드"라고 지칭하기도 한다.
스프트웨어적 스레드는
하나의 프로그램에서 독립적으로 실행되는 단위(개수)를 의미한다.
(운영체제와 애플리케이션에서 관리하는 스레드)
하나의 프로그램은
실행되는 과정에서 한 부분만 실행될 수도 있지만,
여러 부분이 동시에 실행될 수도 있다.
구현하고 싶은 기능이 3가지 있다고 가정하자.
1. 입출력장치(키보드)를 통해 입력받은 내용을 화면에 보여주기
2. 맞춤법 검사
3. 현재 상황을 수시로 저장
각 기능을 동작시키는 코드를
각각의 스레드로 만들면 동시에 실행할 수 있게 된다.
정리
하드웨어적 스레드는
하나의 코어가 동시에 처리하는 명령어 단위를 의미하여
스레드 개수만큼까지만 동시에 명령어 처리가 가능하지만
소프트웨어적 스레드는
CPU에 1스레드만 존재한다고 해도 프로그램의 여러 부분을 동시에 실행할 수 있다.
(소프트웨어에서 말하는 스레드는 CPU의 스레드를 가리키는 것이 아니기 때문)
즉, 하드웨어 기준에서 말하는 스레드와 소프트웨어 기준에서 말하는 스레드는 서로 다른 기준을 가지고 있다.
--
'CS > 컴퓨터 구조' 카테고리의 다른 글
[CPU 성능 향상] ISA (+ CISC, RISC) (0) | 2024.08.28 |
---|---|
[CPU 성능 향상] 명령어 병렬 처리 기법 (0) | 2024.08.27 |
[CPU 작동 원리] 명령어 사이클과 인터럽트 (0) | 2024.08.25 |
[CPU 동작 원리] 레지스터 종류 (0) | 2024.08.24 |
[CPU 작동 원리] ALU와 제어장치 (0) | 2024.08.23 |