컴퓨터구조와 운영체제

10. 빠른 CPU를 위한 설계 기법

waterclean101 2023. 11. 10. 09:01

빠른 CPU를 위한 설계 기법

  • 클럭
  • 코어 & 멀티 코어
  • 스레드 & 멀티 스레드

 

CPU의 속도를 빠르게 하기

  • 컴퓨터 부품들은 클럭 신호에 맞춰서 일사분란하게 움직인다.
  • CPU는 명령어 사이클이라는 정해진 흐름에 맞춰서 명령어들을 실행한다.

 

클럭 속도

  • 클럭 신호 자체를 빠르게 반복하면 속도가 빨라지겠네? 꼭 그런 것은 아니지만 일반적으로는 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰서 움직인다. 클럭 속도는 CPU에 속도 단위로 간주되기도 한다.
  • 헤르츠: 클럭 속도는 헤르츠라는 단위로 측정하는데 헤르츠는 1초에 클럭이 반복되는 횟수를 의미한다. 클럭이 ‘똑딱’ 하고 1초에 한 번 반복되면 1 헤르츠, 클럭이 1초에 100번 ‘똑딱’ 하면 100 헤르츠.

2.7기가 헤르츠. 클럭이 1초에 약 27억번 반복

그렇다면 클럭 신호를 계속 높이면 CPU가 계속 빨라질까? 그렇지 않다. 클럭을 필요 이상으로 높이면 발열이 심해진다. 클럭 속도를 늘리는 방법 이외에 CPU를 빠르게 동작시킬 수 있는 방법이 필요하다.

  • 코어 수를 늘리는 방법. 멀티 코어로 CPU를 설계하는 방법
  • 쓰레드 수를 늘리는 방법. 멀티 쓰레드로 CPU를 설계하는 방법

 

코어와 멀티 코어

  • 코어를 제대로 이해하기 위해서는 현대적인 관점에서 CPU를 재해석해야 한다.
  • 지금까지 CPU를 ‘명령어를 갖고 와서 해석해서 실행하는 부품’이라고 이해했다. 전통적인 관점에서 명령어를 인출하고 해석하고 실행하는 부품은 원칙적으로 하나만 있다. 전통적인 CPU 는 명령어를 가져와서 제어장치가 해석하고 실행하는 역할을 하는 부품이 원칙적으로 하나만 있었고 이게 곧 CPU였다.
  • 오늘날의 CPU에는 명령어를 해석하고 인출하고 실행하는 부품이 여러 개 존재할 수 있고 그 각각의 부품을 코어라고 부르게 되었다.
  • 코어: CPU 내에서 명령어를 실행하는 부품. CPU 즉 프로세서 안에 여러 개 있을 수 있고, 이렇게 코어를 여러 개 갖고 있는 CPU를 멀티코어라고 부른다.

  • 그렇다면 코어 수에 비례해 속도가 빨라지나? 코어마다 처리할 연산이 적절하게 분배되지가 않는다면 꼭 코어 비례해서 연산 속도가 증가하지는 않는다. 처리하고자 하는 작업량이 코어 수에 비해서 적어도 성능에는 크게 영향이 없다. → 10명의 요리사가 1000인분의 도시락을 만드는 것은 혼자 만드는 것보다 10배 빠르겠지만 4인분의 도시락을 만드는 데 10명의 요리사가 있는 것과 천 명의 요리사가 있는 게 특별히 속도 면에서 엄청난 차이를 갖고 오지 않는 것과도 같다
  • 그렇기 때문에 여러 개의 코어를 두는 설계 방식은 각각의 코어에게 명령어들을 얼마나 적절하게 분배하느냐가 중요하고 속도에 영향을 준다.

 

스레드와 멀티 스레드

  • 스레드는 실행 흐름의 단위? 스레드라는 단어는 하드웨어에서도 등장하고 추후에 운영 체제 소프트어에서도 등장
  • 스레드는 하드웨어적인 스레드가 있고 소프트웨어적인 스레드가 있다고 정리하는 것이 혼란을 줄일 수 있다.

 

하드웨어 스레드

  • 하나의 코어가 동시에 처리하는 명령어 단위
  • 한 번에 하나의 명령어를 받아들여서 한 번에 하나의 명령어를 실행할 수 있다면 1코어 1 스레드 CPU라고 볼 수 있다.
  • CPU 내에 코어가 즉 명령어를 가져와서 실행하고 해석하는 부품이 두 개가 있고 즉 2코어고 각각이 두 개씩의 명령어를 동시에 실행할 수 있다면 2코어 4스레드.

2코어 4스레드 CPU

  • 하나의 코어가 여러 개의 명령을 동시에 처리할 수 있는 이러한 종류의 CPU를 멀티스레드 프로세서, 멀티스레드 CPU라고 부른다.

 

소프트웨어 스레드

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

  • 만약 프로그램을 만들 때 사용자의 입력을 받아 화면에 출력하고, 입력한 내용을 수시로 저장하고, 입력한 내용을 맞춤법 검사하는 기능 세개를 동시에 실행하고 싶다면? 소프트웨어 스레드를 세 개 만들어서 즉, 하나의 프로그램에서 독립적으로 실행되는 단위를 세 개 만들어서 각각이 실행되도록 할 수 있다.

  • 하드웨어적 스레드 1코어 1 스레드 CPU도 여러 개의 소프트웨어적 스레드를 만들 수 있다. 즉 하드웨어적 스레드가 하나여도 소프트웨어적 스레드를 여러 개 만들 수 있다.
  • CPU는 내부적으로 스레드를 실행할 때 매우 빠르게 번갈아가면서 실행되기 때문에 마치 동시에 실행되는 것처럼 사용자 눈에 보인다.

소프트웨어적인 스레드는 나중에 운영체제 파트에서 다시 한 번 다루고 다시 하드웨어 스레드로 넘어가서

 

멀티스레드 프로세스 설계의 핵심

  • 레지스터: 하나의 명령어를 실행하기 위해서 레지스터는 꼭 필요하다.
  • 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 편의상 ‘레지스터 세트’라고 표기
  • 레지스터 세트가 하나의 코어 내부에 여러 개가 있으면 하나의 코어가 여러 명령어를 동시에 처리할 수 있다. 즉, 프로그램 카운터가 두 개 있으면 다음으로 실행할 명령어의 주소를 두 개 지정할 수 있고 스탭 포인터가 두 개 있으면 두 개의 스택을 관리할 수 있다.

  • CPU 내부에서 코어가 몇 개고 또 스레드가 몇 개인지는 CPU만 알고 있지 메모리 내의 프로그램이 알 수 없다.
  • 하드웨어 스레드는 논리적인 CPU의 개수라는 의미에서 논리 프로세스라고도 부른다.