본문 바로가기

CS/CA, OS

컴퓨터의 CPU (1)

메인 메모리를 알아봤으니 다음은 CPU이다.

구매한 CPU는 가장 보급, 엔트리 급으로 많이 팔리는 라이젠 7500f이다.

 

개요

CPU는 명령어 처리를 위해 메모리에 저장된 명령어를 읽고(Fetch) 해석하고(Decode) 실행한다(Execute) + (Write-back)

이를 명령어 사이클이라고 부른다.

 

이 명령어 사이클은 클럭 신호에 동기화되어 동작하며 라이젠 7500f는 CPU는 3.7Ghz의 클럭, 최대 5.0Ghz 클럭을 가진다.

 

CPU에는 부품들이 많은데 ALU(연산장치), 제어 장치, 레지스터, 캐시 메모리 등이 있다.

이 대부분의 부품들은 CPU 코어에 존재한다.

 

코어는 독립적으로 명령을 처리하며 대부분의 CPU는 여러 개의 코어를 포함해 병렬 처리를 한다.

이를 통해 동시에 많은 작업을 처리할 수 있다.

7500f의 경우 6코어(헥사코어) 프로세서이다.

 

또한 SMT를 통해서 내 CPU는 1코어당 논리 프로세서 2개를 사용해 총 12 스레드를 운용한다.

 

pc에서 캡쳐한 내 cpu 정보

 

 

이제부터 CPU의 여러 측면에 대해 알아보자


CPU의 코어

SMT(Simultaneous Multithreading), HT(Hyper Threading)

7500f에서 SMT는 하드웨어적 멀티스레딩을 통해 CPU의 성능을 개선하는 방법이다.  https://en.wikipedia.org/wiki/Simultaneous_multithreading

IBM의 ACS에서부터 시작해 2002년 Intel의 Hyper Threading 이라는 이름으로 상용화되었다고 한다. (이전에는 서버 등 초고성능 컴퓨터에 사용)

 

물리적으로 존재하는 코어에 대해 운영체제는 두 개의 가상의 코어에게 작업을 분담시키는 방법이다.

운영체제의 도움이 필요하기 때문에 Windows XP부터 잘 지원되었다고 한다. 

또한 당시의 한계로 성능이 크게 향상되지 않거나 오히려 자원 충돌로 인해 저하되는 사례도 있었다고한다.

(현재는 약 20~30퍼의 성능 증가 기대)

 

연산 장치, 캐시 메모리, 파이프라인을 공유하며, 레지스터 파일, PC(Program Counter)를 전용으로 사용한다.

 

SMT의 CPU 명령어 사이클은 다음과 SMT의 동작 원리는 다음과 같다.

1. Fetch: 여러 스레드의 명령어를 동시에 가져옴

2. Decode: 스케쥴러가 각 스레드의 명령어를 디코딩하고 자원을 할당함 (공유 자원 충돌 방지하도록 설계)

3. Execute: 스레드가 공유 자원을 사용해 명령어를 실행함

 

 

멀티코어 프로세서

기존 싱글코어의 CPU의 클럭이 높아졌고, 이로 인해 발열, 전력 소모가 심해졌다. 

마이크로프로세서의 물리적 한계에 도달하자, 코어를 더 달아 성능을 높이는 방법을 만들어냈다.

https://en.wikipedia.org/wiki/POWER4#cite_ref-1 이전에 POWER4 같은 멀티코어 프로세서도 있었지만 

https://en.wikipedia.org/wiki/Athlon_64_X2 2005년 AMD의 애슬론 64 x2를 통해 멀티코어가 사용화되었다고 한다.

 

멀티코어는 CPU 다이에 여러 코어를 집적시켜 사용하는 방식으로 전부 병렬 처리가 가능하다면 코어의 개수만큼 배로 늘어나는 성능을 기대할 수 있을 것이다.

하지만 유명한 암달의 법칙같이 작업은 항상 병렬처리 가능하지는 않고 순차적 처리가 필요한 부분이 있기 때문에 코어가 아무리 많아지더라도 성능의 한계는 존재한다.

 

SMT와 멀티코어가 같이 존재했음에도 초기에는 하드웨어적 한계로 인해 같이 사용되지 못했다고 한다.

 

이후 공정이 개선되며 https://ko.wikipedia.org/wiki/%EB%84%A4%ED%95%A0%EB%A0%98_(%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98) 멀티코어, 하이퍼스레딩을 병행한 프로세서를 출시했다고 한다.

 

 

멀티스레드 프로그래밍

위의 작업관리자 이미지에서 보면 프로세스는 263개 스레드는 5973개나 되는데 CPU가 어떻게 실행시키는걸까?

일단 소프트웨어적 스레드와 하드웨어적 스레드가 다르다. 

 

프로그래머가 프로그램을 멀티스레드 프로그래밍을 통해 병렬적으로 실행가능한 항목을 나누고 실행시키면 OS가 이를 스케쥴링을 통해 분배해 하드웨어적 스레드가 프로그램을 실행시키도록 하는 것이다.

 


너무 길어지니 레지스터와 캐시 등 다른 항목은 다른 글에 작성해야겠다

'CS > CA, OS' 카테고리의 다른 글

컴퓨터의 시간측정  (0) 2025.04.29
컴퓨터의 CPU (2) - 레지스터  (0) 2025.04.19
컴퓨터의 프로세스  (0) 2025.04.05
컴퓨터의 RAM  (0) 2024.12.26
컴퓨터가 음수를 표현할 때 (보수)  (0) 2024.12.13