[7] 빠른 CPU를 위한 기법

hyunsooo·2023년 4월 6일
0

클럭

이번 시간에는 CPU의 속도를 빠르게 만들 수 있는 여러가지 방법에 대해서 알아보겠습니다.
컴퓨터의 부품들은 일종의 파장인 클럭 신호에 맞춰 동작하며, CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어를 실행한다고 했습니다.
가장 단순한 방법으로 클럭 신호를 빠르게 만들면 컴퓨터 부품들이 더 빠르게 움직일 것 입니다. 무조건 속도가 증가한다고 할 수 없지만, 일반적으로 클럭 신호가 빠르면 컴퓨터의 성능이 증가합니다.

클럭 속도는 헤르츠(Hz)단위로 측정됩니다. 여기서 헤르츠(Hz)는 1초에 클럭이 반복되는 횟수를 의미하는 단위입니다. 예를들어 1초에 클럭 주기가 1번 반복된다면 1Hz가 되는 것 입니다. 실제 CPU의 제품 사진을 보게 되면 Base 2.5GHz, Max 4.9GHz와 같은 정보를 볼 수 있습니다. 이 정보는 기본적으로 1초에 25 클럭 속도는 기본적으로 25억번, 최대 49억번 반복되게 된다는 의미입니다.

하지만 마냥 클럭 신호를 올리게 된다면 어느 수준부터 발열로 인해 컴퓨터 자체에 무리가 갈 수 있습니다. 따라서 일정 클럭 신호를 유지하며 다른 방법을 생각해보는게 효율적일 수 있습니다.

코어 & 멀티 코어

클럭 신호를 올리는 방법 이외에 코어 수를 늘리는 방법이 존재합니다.
CPU(프로세서)의 제품에는 클럭 수 말고도 Core와 Thread에 대한 정보도 같이 존재합니다. 이 코어란 무엇일까요?

지금까지 배운 CPU는 결국 명령어를 실행하는 부품으로 이해할 수 있습니다. 전통적으로 명령어를 이해하고 실행하는 부품은 하나만 존재했지만 오늘날 CPU는 명령어를 실행하는 부품이 여러개 존재할 수 있습니다. 결국 현대에서는 CPU안에서 명령어를 실행하는 부품을 코어라는 용어로 사용하고 있습니다.
직관적으로 ALU, 제어장치, 레지스터들이 하나의 코어이며, 이런 코어들이 여러개 존재하는 것으로 이해할 수 있습니다.

이렇게 코어를 여러개 가지고 있는 CPU를 멀티코어라고 표현하고 있습니다. 전통적인 CPU는 싱글 코어이며, 듀얼, 트리플 등으로 발전되어 왔습니다.

클럭과 마찬가지로 코어수를 무작정 늘린다고 하여 성능이 계속 증가할까요? 꼭 그렇지는 않습니다. 하나의 작업을 처리할때 혼자 처리하는것 보다 여러명이서 처리하는게 더 높은 생산성을 보일 수 있지만 작업이 적절히 분배되지 않는다면 코어수에 비례하여 속도가 증가되지 않습니다. 또한 처리할 작업량이 적다면 코어수가 많다고 해서 성능이 증가되지 않습니다.

스레드 & 멀티 스레드

스레드는 하드웨어, 운영체제(소프트웨어)에서도 등장하기 때문에 정의를 제대로 하는게 중요합니다.

스레드

하드웨어적 스레드(논리 프로세서)

하드웨어적 스레드는 하나의 코어가 동시에 처리하는 명령어 단위입니다. 예를들어 하나의 코어가 한번에 하나의 명령어를 받아들이고 실행할 수 있다면 1코어 1스레드라고 표현할 수 있습니다. 만약 코어가 2개가 있으며 각각의 코어가 2개씩의 명령어를 동시에 실행할 수 있다면 2코어 4스레드라고 표현할 수 있습니다. 이처럼 하나의 코어가 여러개의 명령어를 처리할 수 있는 CPU를 멀티 스레드 프로세서(CPU)라고 표현합니다. 만약 CPU제품에 8코어 16스레드라고 적혀있다면 이 제품은 8개의 명령어를 실행할 수 있는 부품이 존재하며, 한 부품마다 2개의 명령어를 동시에 실행할 수 있다는 의미입니다.
하드웨어적 스레드는 메모리입장에서 현재 CPU가 몇코어 몇스레드인지 알지는 못하지만 동시에 4개의 명령어를 가져간다면 4코어라고 짐작할 수 있습니다. 따라서 하드웨어적 스레드를 논리 프로세서라는 표현을 하기도 하며 실제 윈도우의 컴퓨터 정보를 찾아보면 코어 수와 논리 프로세서 수로 확인할 수 있습니다.

소프트웨어적 스레드

소프트웨어적 스레드는 하나의 프로그램에서 독립적으로 실행되는 단위를 의미합니다. 운영체제에서 자세히 배울거기 때문에 간단히 알아보자면 싱글스레드는 하나의 프로그램이 하나의 실행 흐름만 가지고 실행되는것을 의미하고, 멀티스레드는 하나의 프로그램이 동시에 2개 이상의 영역이 실행되는 것을 의미합니다. 예를들어 프로그램에서 순차적으로 실행하는것이 아닌 동시에 실행하고 싶다면 멀티스레드로 실행할 수 있습니다.

두개의 스레드로 나누어 정의를 한 이유는 다음과 같은 상황이 있기 때문입니다.

하드웨어적 스레드는 하나의 코어가 동시에 처리하는 명령어의 단위로 정의되기 때문에 1코어 1스레드이더라도 여러개의 소프트웨어적 스레드를 만들 수 있습니다.

profile
지식 공유

0개의 댓글