이번 포스팅에서는 CPU에 대해서
간단히 살펴보겠습니다.
또 컴퓨터 시스템에서 상당히
어려운 주제의 하나인 CPU의 속도에
대해서 다루어 보겠습니다.
CPU는 Central Processing Unit
- 중앙처리장치의 약자로 쉽게
설명할 때는 CPU는 컴퓨터의 두뇌이다
컴퓨터의 핵심 연산장치다 등의
방식으로 설명하는데 사실 이 CPU란 것은
굉장히 복잡한 구조로 만들어진 기계로
깊이 있게 이해하려면 대학에서
전자 공학, 컴퓨터 공학, 응용 물리학의
전공을 수년간 배워야 합니다.
인터넷에는 CPU에 대하여
설명하는 여러 문서와 동영상 등이
많이 있는데 어디까지나 교양적으로
기초적인 내용이라 보면 됩니다.
물론 기초적인 이해도만으로도
컴퓨터 기술을 활용하거나
공학적 사고로 판단하기 위해서
상당한 도움이 되기 때문에
CPU의 기초 원리에 대해서
학습하는 것을 권장할 수 있습니다.
*CPU의 속도를 이야기 하기전에,
CPU를 이해하는 것은 상당히
어려운데 왜 그럴까? 란 질문을
해보면 어떨까 합니다.
CPU를 이해하기 어려운 이유는,
어려운 과학이라서, 수학이 어려워서,
전자 공학이 어려워서,
그런 이유들이 어느정도 맞습니다.
그런데 CPU가 어려운 진짜 이유는
그 동작을 설명해도 우리 눈에는
보이지 않기 때문이기도 합니다.
(과학이란게 그렇듯이)
ARM 이나 x86 아키텍처 같은
어려운 용어부터 커다란 장벽으로
다가오지만 지금의 CPU기술은
사람의 손톱만한 칩에 트랜지스터를
100억개 이상 박아 넣을 정도로
말그대로 상상을 초월했기 때문에
우리가 그것을 머리속에 상상하려해도
잘 되지 않습니다.
애플의 시스템온칩인 M1 칩에는
5나노 공정으로 만든 160억개의
트랜지스터가 들어가고 아이폰13의
A15 바이오닉 칩은 150억개의
트랜지스터가 내장되어 있습니다.
물론 애플의 ARM 아키텍쳐는
하나의 칩 안에 CPU, GPU, 메모리 등을
통합한 SOC(System on chip) 이지만
어쨋든 외관으로 봤을 때는 M1 이건
Intel의 CPU이건 그냥 칩입니다.
그 안에 트랜지스터가 몇개가 들었는지
전원을 키면 무슨 동작이 일어나는지
우리 눈에는 보이지 않기 때문에
정확히 이해하기가 어렵습니다.
CPU에 대한 설명을 듣고
컴퓨터 구조 강의를 계속 들어도
별로 와닿지 않는다면
그것은 당연한 것 입니다.
개념적으로 CPU를 설명하는 것은
비유적인 것들이라 체감적으로
혹은 직감적으로 이해가 어렵습니다.
원래 비유적으로 설명하는 것은
어려운 내용을 쉽게 이해시키기 위한
측면이 있는데 CPU설명처럼
명확한 하나의 주제에 대하여
너무 비유의 종류가 많아지면
오히려 본질을 흐려버려서
점점 더 어려워지는 경우도 있습니다.
그래서 이 포스팅에서는 조금
다른 방식의 설명을 시도해봅니다.
CPU의 본질을 추구하다 보면
CPU의 속도는 자연스럽게
알 수 밖에 없습니다.
강조하지만 CPU는 대학의 전공교양
수준에서 다루는 내용은
깊이적으로 한계가 있습니다.
컴퓨터 공학이라는 학문도 어느날
갑자기 세상에 나타난게 아니라
전자기파를 발견한 맥스웰, 헤르츠,
부울 등 역사속 최고의 학자들의 연구가
수백년이나 쌓여서 실제 컴퓨터를
구현하고 일반에 보급된 것 입니다.
평범한 학습자가 하루아침에 이해가
어렵다면 매우 정상이라고 봅니다.
쉽게 이해하려고 하면 더욱
알 수 없는게 CPU이기 때문에
좀 더 깊이 있게 알고 싶다면,
컴퓨터 구조에 관한 공부를 하면서
CPU 관련 주제를 하나씩 찾아서
시간과 공을 들여 학습하는 것이 좋습니다.
CPU의 목적을 하나라고 한다면 연산입니다.
컴퓨터는 연산을 위해 존재합니다.
연산은 사람도 할 수 있다고 합니다.
연산을 하는데도 도구가 필요합니다.
인간은 언어능력과 추상화 능력이
뛰어나서 머리속으로도 연산을
하는게 가능합니다.
하지만 인류 역사의 초기에는
손가락, 발가락 등을 사용하거나
상형문자 등을 사용했다고도 합니다.
물론 그 분들은 다 돌아가셔서
머리속에서 연산을 했는지
물어보는 것은 불가능하지만
손가락을 사용한 연산에 대해서는
상당한 신빙성이 있어 보이죠.
지금까지 십진법을 사용하고 있으니까요.
십진법은 수를 전진시키고
분리하는 방법입니다.
1은 무엇인가 추상적인 대상입니다.
1이란 존재하지 않지만
수로 사용할 수 있습니다.
1을 10개 모아서 자리수를 더하는
방식으로 수를 세어갑니다.
이렇게 1, 10, 100, 1000 이라는
간단한 표기로도 많은 수를
쉽게 나타낼 수 있습니다.
십진법이 다 좋고 인간에게 편하지만
자세히 보면 자연은 십진법이
아닌 경우가 더 많습니다.
예를 들어 가장 강력한 진법 중 하나는
이진법입니다. 낮과 밤, 수컷과 암컷,
오른손과 왼손 이런 것은 이진법으로
셀 수가 있습니다.
하루를 그 기운에 따라 24개로 나누었고
한달은 달의 주기에 따라 30일(+1범위)입니다.
1년은 12개의 달이 있고
1년에는 365일이 있습니다.
*다시 CPU로 돌아와서 CPU는
어떤 진법을 사용하는가? 를 보면
이진법을 사용합니다.
이진법에는 사실 2가 없습니다.
십진법에서 '십' 에 해당하는 기호가
없고 그냥 자리수를 1에서 10으로
늘리는 것 처럼 이진법도
0 다음에 1 그 다음에 10 으로
자리를 늘립니다. 이것이 이진법입니다.
이진법만 가지고도 십진법에서 사용하는
모든 수를 표현할 수 있습니다.
우리가 봤을 때는 매우 불편해 보이지만
CPU에겐 가장 편한 것 입니다.
자꾸 이상한 비유하면 안좋은데
CPU를 사람이라고 하면 오른손을 0
왼손을 1로 연산을 하는 것 입니다.
수학에서 0이란 상태는 카운팅하지
않지만 CPU가 사용하는 0은 좀 특별합니다.
사람들이 주소를 만들 때는 0000 번지
이렇게 만들지는 않습니다.
한국에서는 0번지를 사람이 거주하는
지번으로 사용하지 않는다고 합니다.
웬지 0번지라고 하니까 사람이 안사는
그런 으스스한 유령주소 느낌이 나는데요.
하지만 CPU는 0000 이라는 메모리
주소를 사용합니다.
실제 x86 CPU는 메모리 주소 체계를
0x0000 0000 - 0xFFFF FFFF (16진수, 32비트)
와 같이 부여하고 있습니다.
그래서 컴퓨터 소프트웨어를 만들다 보면
0에 대한 개념이 조금 바뀌기도 합니다.
* 그래서 CPU의 목적이 연산인데
단순히 연산만 잘해서는 인간에게
별로 쓸모가 없습니다.
우리는 CPU가 연산한 결과를
어떤 출력물을 통해서 확인할
필요가 있고 또 원하는 데이터를
넣어서 연산을 시키고 싶습니다.
궁극적으로 CPU의 존재 목적은
연산의 반복입니다.
입력한 데이터에 근거해서
CPU에서 연산한 다음에
결과를 출력하고 그 출력을 보고
다시 데이터를 입력하고...
이러한 과정이 영원히 반복됩니다.
나무위키의 정의에 의하면 CPU는
컴퓨터에서 기억, 해석, 연산, 제어라는
4대 주요 기능을 관할하는 장치를 말합니다.
그러면 여기서 다 나온거지요.
- 기억 : 입출력 데이터를 기억하고
중간 연산 결과를 기억.
- 해석 : 해석은 1차적으로 코드해석
(decode)을 의미하는데 넓은 의미에서
각종 상황의 제어를 해석하는 것도 포함.
- 연산 : 산술 유닛(Arithmetic Unit)이 하는
연산입니다. 디지털 논리 회로를 사용하여
이진 연산을 합니다.
-> 이 때 회로가 이진 가산기이므로
CPU는 0과 1밖에 못알아 먹는다는 말입니다.
굳이 만들려고 하면 0부터 9까지
더할 수 있는 십진법 회로도
만들 수는 있다고 합니다.
하지만 그렇게 안하는 이유는
이진 회로 설계가 효율적이기 때문입니다.
- 제어: 제어 유니트(control unit)는 CPU내부의
장치들, 메모리와 I/O(입출력) 등을 교통정리하는
제어 장치입니다.
*한 개 정의만 보면 좀 아쉬우니까
또 다른 것을 찾아보면,
courses.lumenlearning.com의 정의에
의하면 CPU는 다음과 같습니다.
A central processing unit (CPU) is the electronic circuitry within a computer that carries out the instructions of a computer program by performing the basic arithmetic, logical, control and input/output (I/O) operations specified by the instructions.
기초 산술, 논리, 제어, 입출력 작업을 수행하여 컴퓨터 프로그램의 지시를 실행하는 컴퓨터 내의 전자 회로
순수 개념적인 정의입니다.
- 기초 산술 -> 가산기
- 논리 -> 논리게이트
- 제어 -> 제어부(CPU내부와 주변장치)
- 입출력 작업 -> 키보드나 모니터가 아니라
데이터가 들어오면 Input (입력)
데이터가 나가면 Output(출력)
으로 볼 수 있다.
그러니까 CPU는 연산을 위해 존재하지만
연산을 하기 위해서 필요한 기능이 있고
그것을 인간이 사용해야 하기 때문에
필요한 기능들(Input/Outpu)이 있어서
그냥 연산만 하도록 산술 유니트 하나만
덩그라니 있지는 않다는 것 이지요.
현대의 CPU는 이 하나하나의 기능이
또 세분화되있고 복잡합니다.
이것만으로 컴퓨터를 구성할 수 있지만
최근에 놀라운 성능의 맥북을 출시하고
있는 애플사의 경우 M1칩 이전에
애플 실리콘 T2 같은 특수한 기능을 가진
보조 프로세싱 칩을 탑재하여
보안이나 영상처리, 터치스크린 등의
특별한 기능을 강화하기도 했는데
이런 칩이 제대로 없는 다른 노트북에
비해서 성능이 좋을 수 밖에 없습니다.
즉 CPU 중앙처리장치만 으로도
컴퓨터는 잘 돌아가지만 특별한
하드웨어의 기능을 구현하기 위해
별도의 처리장치를 사용하는 경우
더 좋은 기능도 구현할 수 있습니다.
또 중앙처리장치가 하나만 있으란 법은
없습니다. 예전에 게임용 PC에
듀얼 프로세서를 박아서 사용하는게
유행하던 적도 있었는데 지금은
개인 PC에도 CPU와 그래픽 카드가
워낙 강력해져서 의미가 없다고 하지요.
CPU의 속도라는 것은 결국 컴퓨터의 속도를
의미하는 것 일텐데 어떻게 측정해야 하는가?
이게 사실 상당히 심오하고 어렵습니다.
그런데 IBM호환 PC의 시절 부터
현재까지 컴퓨터 회사들의 마케팅방식이
다소 사람들을 호도하지 않았나
그런 의문을 품을 수도 있습니다.
그런데 이유는 알 수 있습니다.
이제 애플이 만드는 맥북을 보면서
왜 그들이 그런 방식으로 밖에
컴퓨터를 홍보할 수 밖에 없었나?
한계가 있다고 봅니다.
CPU에는 클럭 속도(Clock Speed)가 있습니다.
여기서 부터 좀 용어들이
헷갈리기 시작하는데
인텔의 웹사이트를 참고하면
그래도 좀 나을 것 입니다.
윈도우의 검색에서 '시스템 정보'에
들어가보면 프로세서 항목에
클럭속도가 표시되어 있습니다.
예를 들어 i7-10700 CPU는 클럭속도가
2.90GHz 입니다. 이는 초당 29억번의
사이클을 실행합니다.
사이클, 즉 클럭 사이클(Clock Cycle)을
말하는데 기술적으로는 저 설명의
파동을 생성하는 발진기(오실리에이터)의
펄스간의 사이를 의미하는데
그렇게 원초적인 측정은 의미가 없으니까
'명령 주기'를 사용합니다.
CPU의 명령주기 3단계는 다음과 같습니다.
1. FETCH - 패치 - 데이터를 가져옴
2. DECODE - 디코드 - 명령어 해석
3. EXECUTE - 실행 - 명령어를 실행
다시 1로 반복 합니다.
이것이 하나의 사이클 (Cycle)이고
Clock(시계)에 따라서 Cycle 이
진행되므로 클록 사이클입니다.
(CPU의 시계에 맞추는 것.
CPU의 시계는 엄청 빠르다)
2.90GH 클럭 속도는 이 사이클을
1초에 29억번 실행한다는 뜻 입니다.
*정리하면...
*클럭 - CPU의 시계(Clock)
*사이클 - 명령주기
*클럭 사이클 - 클럭 속도와 동일한 뜻
그런데 명령어(instruction)는 또 다른 것입니다.
CPU는 설계된 구조에 따라
하나의 사이클에 명령어 1개를
실행시키기도 하고 여러개를 실행시키거나
혹은 더 복잡한 명령어는 여러개의
사이클이 소요되기도 합니다.
명령어는 ISA(Instruction Set Architecture)
- 명령어 집합체 - 에 들어있는
기계어 명령(instruction) 을 의미합니다.
가령 Load A 10 (ea 레지스터에 10을 로드하라)
같은 작업이 있고 1사이클이 필요로 하다면
이것은 1초에 29억번 할 수 있습니다.
2사이클이 필요한 작업이라면 14.5억번
할 수 있겠죠. 이런 식으로 명령어(instruction)에
따라 필요한 사이클이 달라지므로
CPI (Cycle Per Instruction) 의 개념이
중요합니다. 이게 절대적인 숫자가
나오지는 않습니다.
왜냐하면 CPU의 다른 주제이지만
다중 코어를 사용한 병렬화와
파이프라인 방식을 사용하기 때문에
프로그램에 따라 차이가 있습니다.
그래서 제조사에서는 CPU에 대해
가중평균치를 제시합니다.
다만 사용자 입장에서 보면
새로운 CPU가 나오면 벤치마킹을
찾아보는게 훨씬 와닿습니다.
PC 리뷰어들이 고사양 3D 게임이나
동영상 편집 프로그래밍 같이 CPU연산이
많은 프로그램을 실행하며 시간 등으로
측정하여 점수를 매기는 벤치마크를
돌리는 이유는 이 CPI와 관계가 있습니다.
때로는 특정 소프트웨어를 위해
하드웨어를 지원한 경우도 있는데
맥북의 M1칩은 ProRes 포맷의
동영상 인코딩에서 하드웨어 가속을
지원하므로 다른 CPU 환경에서 보다
월등한 성능을 기대할 수 있습니다.
그래서 CPI는 일반적인 실행시간
측정 개념이고 이것을 적용하는 것은
더 복잡한 문제이긴 한데
일반인의 입장에서는 리뷰어들의
벤치마크가 좀 더 이해가 쉽습니다.
그리고 3D 게임 등을 테스트하는 것을 보면
대충 눈으로 봐도 부드러운 것인지
버벅이는 것인지 알 수 있으니까요.
CPU는 컴퓨터에서 가장 중요한 장치로
속도나 성능에 관련한 주제 이외에도
다양한 주제가 있습니다.
사실 컴퓨터의 속도는 CPU만으로
결정되지는 않지만 일단 CPU가
모든 성능 비교의 기본입니다.
소프트웨어를 다루는 사람들에게도
도움이 되는 부분이 많이 있으니
기초 지식을 쌓아두는 것도 좋습니다.
* But how do it know - 한국어 번역판은
그래서 컴퓨터는 어떻게 동작하나요?
의 제목으로 출간되었습니다.
일반인들에게 상당히 쉽게 컴퓨터의
원리를 설명하는 책입니다.
저자는 누구나 읽으면 이해할 수
있을거라 했는데 논리게이트가
꽤 많이 나오기 때문에 그 정도는 아닙니다.
(아무리 쉽게 설명해도
컴퓨터는 어려운 것입니다)
But How Do It Know - the book. The basic principles of computers