- 클럭
- 코어 & 멀티 코어
- 스레드 & 멀티 스레드
CPU의 속도를 빠르게 하기
- 컴퓨터 부품들은 클럭 신호에 맞춰서 일사분란하게 움직인다.
- CPU는 명령어 사이클이라는 정해진 흐름에 맞춰서 명령어들을 실행한다.
클럭 속도
- 클럭 신호 자체를 빠르게 반복하면 속도가 빨라지겠네? 꼭 그런 것은 아니지만 일반적으로는 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰서 움직인다. 클럭 속도는 CPU에 속도 단위로 간주되기도 한다.
- 헤르츠: 클럭 속도는 헤르츠라는 단위로 측정하는데 헤르츠는 1초에 클럭이 반복되는 횟수를 의미한다. 클럭이 ‘똑딱’ 하고 1초에 한 번 반복되면 1 헤르츠, 클럭이 1초에 100번 ‘똑딱’ 하면 100 헤르츠.
그렇다면 클럭 신호를 계속 높이면 CPU가 계속 빨라질까? 그렇지 않다. 클럭을 필요 이상으로 높이면 발열이 심해진다. 클럭 속도를 늘리는 방법 이외에 CPU를 빠르게 동작시킬 수 있는 방법이 필요하다.
- 코어 수를 늘리는 방법. 멀티 코어로 CPU를 설계하는 방법
- 쓰레드 수를 늘리는 방법. 멀티 쓰레드로 CPU를 설계하는 방법
코어와 멀티 코어
- 코어를 제대로 이해하기 위해서는 현대적인 관점에서 CPU를 재해석해야 한다.
- 지금까지 CPU를 ‘명령어를 갖고 와서 해석해서 실행하는 부품’이라고 이해했다. 전통적인 관점에서 명령어를 인출하고 해석하고 실행하는 부품은 원칙적으로 하나만 있다. 전통적인 CPU 는 명령어를 가져와서 제어장치가 해석하고 실행하는 역할을 하는 부품이 원칙적으로 하나만 있었고 이게 곧 CPU였다.
- 오늘날의 CPU에는 명령어를 해석하고 인출하고 실행하는 부품이 여러 개 존재할 수 있고 그 각각의 부품을 코어라고 부르게 되었다.
- 코어: CPU 내에서 명령어를 실행하는 부품. CPU 즉 프로세서 안에 여러 개 있을 수 있고, 이렇게 코어를 여러 개 갖고 있는 CPU를 멀티코어라고 부른다.
- 그렇다면 코어 수에 비례해 속도가 빨라지나? 코어마다 처리할 연산이 적절하게 분배되지가 않는다면 꼭 코어 비례해서 연산 속도가 증가하지는 않는다. 처리하고자 하는 작업량이 코어 수에 비해서 적어도 성능에는 크게 영향이 없다. → 10명의 요리사가 1000인분의 도시락을 만드는 것은 혼자 만드는 것보다 10배 빠르겠지만 4인분의 도시락을 만드는 데 10명의 요리사가 있는 것과 천 명의 요리사가 있는 게 특별히 속도 면에서 엄청난 차이를 갖고 오지 않는 것과도 같다
- 그렇기 때문에 여러 개의 코어를 두는 설계 방식은 각각의 코어에게 명령어들을 얼마나 적절하게 분배하느냐가 중요하고 속도에 영향을 준다.
스레드와 멀티 스레드
- 스레드는 실행 흐름의 단위? 스레드라는 단어는 하드웨어에서도 등장하고 추후에 운영 체제 소프트어에서도 등장
- 스레드는 하드웨어적인 스레드가 있고 소프트웨어적인 스레드가 있다고 정리하는 것이 혼란을 줄일 수 있다.
하드웨어 스레드
- 하나의 코어가 동시에 처리하는 명령어 단위
- 한 번에 하나의 명령어를 받아들여서 한 번에 하나의 명령어를 실행할 수 있다면 1코어 1 스레드 CPU라고 볼 수 있다.
- CPU 내에 코어가 즉 명령어를 가져와서 실행하고 해석하는 부품이 두 개가 있고 즉 2코어고 각각이 두 개씩의 명령어를 동시에 실행할 수 있다면 2코어 4스레드.
- 하나의 코어가 여러 개의 명령을 동시에 처리할 수 있는 이러한 종류의 CPU를 멀티스레드 프로세서, 멀티스레드 CPU라고 부른다.
소프트웨어 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위
- 만약 프로그램을 만들 때 사용자의 입력을 받아 화면에 출력하고, 입력한 내용을 수시로 저장하고, 입력한 내용을 맞춤법 검사하는 기능 세개를 동시에 실행하고 싶다면? 소프트웨어 스레드를 세 개 만들어서 즉, 하나의 프로그램에서 독립적으로 실행되는 단위를 세 개 만들어서 각각이 실행되도록 할 수 있다.
- 하드웨어적 스레드 1코어 1 스레드 CPU도 여러 개의 소프트웨어적 스레드를 만들 수 있다. 즉 하드웨어적 스레드가 하나여도 소프트웨어적 스레드를 여러 개 만들 수 있다.
- CPU는 내부적으로 스레드를 실행할 때 매우 빠르게 번갈아가면서 실행되기 때문에 마치 동시에 실행되는 것처럼 사용자 눈에 보인다.
소프트웨어적인 스레드는 나중에 운영체제 파트에서 다시 한 번 다루고 다시 하드웨어 스레드로 넘어가서
멀티스레드 프로세스 설계의 핵심
- 레지스터: 하나의 명령어를 실행하기 위해서 레지스터는 꼭 필요하다.
- 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 편의상 ‘레지스터 세트’라고 표기
- 레지스터 세트가 하나의 코어 내부에 여러 개가 있으면 하나의 코어가 여러 명령어를 동시에 처리할 수 있다. 즉, 프로그램 카운터가 두 개 있으면 다음으로 실행할 명령어의 주소를 두 개 지정할 수 있고 스탭 포인터가 두 개 있으면 두 개의 스택을 관리할 수 있다.
- CPU 내부에서 코어가 몇 개고 또 스레드가 몇 개인지는 CPU만 알고 있지 메모리 내의 프로그램이 알 수 없다.
- 하드웨어 스레드는 논리적인 CPU의 개수라는 의미에서 논리 프로세스라고도 부른다.
'컴퓨터구조와 운영체제' 카테고리의 다른 글
12. 명령어 집합 구조, CISC와 RISC (1) | 2023.11.13 |
---|---|
11. 명령어 병렬 처리 기법 (0) | 2023.11.13 |
9. 명령어 사이클과 인터럽트 (0) | 2023.11.09 |
8. CPU의 내부 구성 - 레지스터 (0) | 2023.11.07 |
7. ALU와 제어장치 (0) | 2023.11.07 |