컴퓨터의 원리를 밑바닥부터 설명해 줄 수 있나요?
컴퓨터를 이해하려면 먼저 하나의 물리적 현실을 받아들여야 합니다. 컴퓨터 안에는 어떤 마법도 없습니다. 오직 전기 신호만 있을 뿐입니다. 더 정확히 말하면, 높은 전압과 낮은 전압만 있습니다.
오늘날 우리가 사용하는 칩의 기본 재료는 실리콘입니다. 실리콘은 반도체입니다. 반도체에는 물리적 특성이 있습니다. 서로 다른 원소를 도핑하고 전극의 전압을 제어함으로써 전기가 통하는지 여부를 제어할 수 있습니다. 전기로 켜고 끌 수 있는 이 미세한 구조를 트랜지스터라고 합니다.
현대 CPU에는 수백억 개의 트랜지스터가 들어 있습니다. TSMC의 현재 3나노미터 공정은 이 트랜지스터가 믿을 수 없을 정도로 작게 제조되어 손톱만한 실리콘 조각에 수백억 개가 들어갈 수 있음을 의미합니다.
트랜지스터의 핵심 기능 하나만 기억하면 됩니다. 제어 단자에 높은 전압을 가하면 전도되고, 낮은 전압을 가하면 차단됩니다. 이것이 가장 밑바닥의 물리적 현실입니다. 높은 전압을 논리 1, 낮은 전압을 논리 0으로 정의합니다. 모든 컴퓨터 과학은 이 두 가지 상태 위에 구축되어 있습니다.
트랜지스터가 있으면 그것들을 결합하여 논리 게이트를 만들 수 있습니다.
두 개의 트랜지스터를 직렬로 연결했다고 가정해 봅시다. 전류가 한쪽 끝에서 다른 쪽 끝으로 흐르려면(출력이 1이 되려면) 두 제어 단자 모두 높은 전압을 받아야 합니다. 즉, 두 입력이 모두 1이어야 합니다. 하나라도 0이면 전류가 차단되고 출력은 0입니다. 이 물리적 회로를 AND 게이트라고 합니다.
같은 논리로, 두 트랜지스터를 병렬로 연결하면 적어도 하나의 입력이 1인 한 전류가 흘러 출력이 1이 됩니다. 둘 다 0일 때만 출력이 0입니다. 이것이 OR 게이트입니다.
약간 다른 연결 방식을 사용하여 1을 입력하면 0이 출력되고 0을 입력하면 1이 출력되도록 만든 것이 NOT 게이트입니다.
AND, OR, NOT 게이트가 있으면 물리 세계는 공식적으로 수학 세계로 들어갑니다. 여기서 고전적인 교과서를 추천합니다. Charles Petzold의 Code라는 책입니다. 이 책에는 군더더기가 전혀 없으며, 전신기에서 시작하여 논리 게이트를 연결하는 방법을 설명합니다. 첫 번째 물리적 직관을 구축하는 데 완벽합니다. 이 글을 읽은 후에 꼭 확인해 보세요. 분명히 큰 깨달음을 얻을 것입니다.
논리 게이트가 생겼으니, 컴퓨터가 덧셈을 하게 하려면 어떻게 해야 할까요?
이진법에서 1 더하기 1은 10입니다. 즉, 현재 비트는 0이 되고 다음 자리로 1을 올림합니다. 이것은 사실 두 가지 논리 연산입니다. 첫째, 현재 비트를 결정합니다. 두 입력이 모두 1이면 현재 비트는 0입니다. 한 입력이 1이고 다른 하나가 0이면 현재 비트는 1입니다. 이 논리는 앞서 설명한 기본 게이트를 조합하여 구현할 수 있으며, 이를 XOR 게이트라고 합니다. 둘째, 올림을 결정합니다. 두 입력이 모두 1일 때만 올림이 발생하며, 이는 정확히 AND 게이트의 기능입니다.
XOR 게이트와 AND 게이트를 함께 연결하면 하나의 이진수 덧셈을 물리적으로 구현한 것입니다. 이것을 반가산기라고 합니다. 여러 반가산기를 캐스케이드 방식으로 연결하고 올림 신호를 처리하면 전가산기가 됩니다. 이 전가산기를 64개 연결하면 64비트 이진수를 더할 수 있는 물리적 회로가 됩니다.
a = b + c라는 코드를 작성할 때, 밑바닥 수준에서는 b와 c를 나타내는 전기 신호가 수만 개의 트랜지스터로 구성된 이 가산기 회로에 동시에 쏟아져 들어가고, 극히 짧은 물리적 지연 후에 회로의 반대쪽 끝에서 결과를 나타내는 안정적인 높고 낮은 전압이 출력됩니다.
이것이 산술 논리 장치(ALU)입니다. 이것은 전혀 신비로운 핵심 부품이 아닙니다. 인간이 설계한 수학적 규칙에 따라 고정 배선된 반도체 논리 게이트의 빽빽한 그물망에 불과합니다. 덧셈 외에도 다양한 배선 구성을 통해 뺄셈, 비트 이동, 심지어 곱셈까지 수행할 수 있습니다.
하지만 단순히 계산만 할 수 있다면 소용이 없습니다. 결과는 그저 전기 신호 덩어리일 뿐이며, 전원이 꺼지거나 입력이 바뀌면 결과가 사라집니다. 컴퓨터는 데이터를 기억할 수 있어야 합니다. 이것이 메모리와 레지스터로 이어집니다.
전기 신호를 사용하여 상태를 기억하는 방법은 무엇일까요? 전자 엔지니어들은 플립플롭이라는 매우 교묘한 회로를 발명했습니다. 이것은 피드백 루프가 있는 논리 게이트 회로입니다. 간단히 말해, 출력 신호를 다시 입력으로 되돌리는 것입니다. 이 설계 덕분에 원래 입력이 제거된 후에도 회로는 내부 피드백을 통해 현재의 높거나 낮은 전압 상태를 유지할 수 있습니다.
이 플립플롭에 특정 쓰기 신호를 주면 내부 상태를 업데이트하고 잠급니다. 다시 쓰기 신호를 보내지 않는 한 그 0 또는 1을 무기한 유지합니다.
64개의 플립플롭을 한 줄로 배열하면 64비트 이진수를 저장할 수 있습니다. CPU 내부, ALU 바로 옆에 있는 플립플롭으로 만들어진 이 초고속 저장 장치를 레지스터라고 합니다. 물리적 위치가 연산 회로 바로 옆에 있기 때문에 전기 신호가 가능한 가장 짧은 거리를 이동하므로 매우 빠릅니다. 물론 제조 비용도 매우 비싸기 때문에 아주 작게만 만들 수 있습니다.
여기서 전설적인 책 하나를 강력히 추천합니다. Computer Systems: A Programmer’s Perspective, IT 업계에서 유명한 CSAPP입니다. 카네기멜론 대학교의 교재입니다. 이 책의 가장 뛰어난 점은 어셈블리 언어에서 하드웨어 아키텍처, 운영체제까지의 장벽을 허무는 것입니다. 이 책을 이해하면 어떤 코드는 빠르고 어떤 코드는 느린 이유를 알게 될 것입니다. 물리적 수준의 사고로 코드를 쓰기 시작하기 때문입니다.
더 나아가 운영체제, 컴퓨터 구조, 네트워크 등의 핵심 기초를 체계적으로 한 번에 이해하고 싶다면, 데이터 구조와 알고리즘, 컴퓨터 구조 등을涵盖하는 컬렉션을 정리했습니다.
웹 전체에서 누적 100만 회 이상 다운로드 – 여러분의 실력을 비약적으로 향상시킬 컴퓨터 기초 지식입니다.
계속 바깥으로 나가 보겠습니다. 레지스터만으로 부족하다면 어떻게 할까요? 더 큰 저장 공간이 필요합니다. 여기서 마더보드에 꽂는 메모리 모듈의出场입니다. 전문 용어로 동적 랜덤 액세스 메모리, DRAM이라고 합니다.
DRAM의 물리적 원리는 레지스터와 완전히 다릅니다. 플립플롭 대신 미세한 커패시터를 사용하여 전하를 저장합니다. 전하가 있으면 1, 없으면 0입니다. 커패시터 구조는 극도로 단순해서(1비트 데이터 저장에 트랜지스터 1개와 커패시터 1개만 필요) 용량을 매우 크게 만들 수 있습니다. 오늘날 수십에서 수백 기가바이트가 일반적입니다.
하지만 커패시터에는 치명적인 단점이 있습니다. 전하가 누설된다는 것입니다. 방치하면 1을 나타내는 전하가 수 밀리초 안에 완전히 누설되어 0이 됩니다. 따라서 마더보드에는 전용 제어 회로가 있어 극히 짧은 간격으로 메모리의 데이터를 읽고 재충전해야 합니다. 이것을 동적 리프레시라고 합니다. 컴퓨터 플러그를 뽑으면 메모리의 모든 내용이 즉시 사라지는 이유가 바로 이것입니다.
이제 계산을 수행할 수 있는 ALU와 데이터를 저장할 수 있는 레지스터와 메모리가 갖추어졌습니다. 핵심 질문은 이 무생물들이 어떻게 움직이기 시작하느냐는 것입니다. 누가 먼저 더하고, 그다음 곱하고, 마지막으로 결과를 저장하라고 명령할까요?
이것이 제어 장치의 역할이며, 컴퓨터를 기계라고 부르는 핵심 메커니즘입니다.
마더보드에는 수정 발진기가 있습니다. 전원이 공급되는 한 일정한 주파수의 펄스 신호를 생성하는 석영 결정입니다. 예를 들어 CPU가 4.0GHz로 표시되어 있다면 이 수정이 매초 40억 번의 고전압-저전압 전환을 생성한다는 의미입니다.
이것이 컴퓨터의 심장박동입니다. CPU 내부의 모든 논리 게이트와 플립플롭은 이 심장박동에 엄격하게 동기화되어 작동합니다.
CPU 내부에는 프로그램 카운터라는 매우 특별한 레지스터가 있습니다. 그 안에는 메모리 주소만 저장되어 있습니다.
심장박동의 첫 박자가 울리면 CPU는 첫 번째 일을 합니다. 명령어를 가져오는 것입니다. 마더보드의 금속 배선을 통해 프로그램 카운터에 저장된 주소를 메모리로 보냅니다. 메모리는 그 주소에 저장된 0과 1의 긴 문자열을 CPU로 반환합니다.
이 0과 1의 긴 문자열이 명령어입니다. 명령어가 CPU로 돌아오면 제어 장치로 들어갑니다. 제어 장치도 역시 고정 배선된 논리 게이트의 집합이며, 그 역할은 디코딩입니다. 예를 들어, 들어오는 0과 1의 첫 몇 자리가 1011임을 감지하면, 내부 배선 구조에 의해 이 높고 낮은 전압들이 정확히 ALU 내의 덧셈 회로로 연결되는 스위치를 활성화합니다. 동시에 명령어의 나머지 부분은 덧셈할 두 데이터 값이 어느 레지스터에 있는지 지정합니다.
다음 박자가 울리면 실행 단계가 시작됩니다. 활성화된 덧셈 회로가 데이터를 수신하고, 전기 신호가 순식간에 가산기의 논리 게이트 네트워크를 통과하여 결과가 생성됩니다.
다음 박자에서는 결과가 지정된 레지스터에 다시 쓰여집니다.
마지막으로 프로그램 카운터가 자동으로 1 증가하여 메모리의 다음 명령어를 가리킵니다. 그런 다음 사이클이 반복됩니다. 매초 수십억 번씩.
이것이 컴퓨터가 작동하는 모든 밑바닥의 진실입니다. 고급 지능은 전혀 없습니다. 단지 수정 발진기가 맹목적으로 박자를 맞추고, 프로그램 카운터가 기계적으로 주소를 증가시키며, 제어 장치가 읽어들인 0과 1에 따라 기계적으로 신호 경로를 전환하고, ALU가 들어오는 전압 레벨을 수동적으로 새로운 전압 레벨로 변환할 뿐입니다.
여러분이 평소에 작성하는 Python 코드나 Java 코드는 결국 컴파일러라는 소프트웨어에 의해 특정 CPU 아키텍처에 맞는 매우 지루한 기계 명령어 시퀀스, 즉 순수한 0과 1로 완전히 번역됩니다.
여기까지 오면 여러분은 모래(실리콘)에서 프로그램까지의 완전한 체인을 따라왔습니다. 많은 사람들이 이 단계에서 이해했다고 느끼지만, 오늘날의 실제 업계 환경에서는 전통적인 CPU 원리를 이해하는 것만으로는 합격선에조차 미치지 못합니다.
현재 가장 뜨거운 AI 대규모 모델을 고려하여, 시야를 넓혀야 합니다. 지금 실제로 컴퓨팅 파워 기반이 어떤 상황인지 살펴보겠습니다.
오늘날 대규모 모델을 다루는 어떤 팀도, 훈련이든 추론이든, CPU를 사용하여 계산하지 않습니다. 왜일까요?
CPU는 복잡한 논리 제어를 처리하도록 설계되었기 때문입니다. CPU를 보면 면적의 상당 부분이 분기 예측, 캐시 관리 및 제어 장치에 할당되어 있습니다. 순수한 숫자 계산에 실제로 사용되는 부분인 ALU는 사실 그렇게 크지 않습니다. 마치 CPU가 복잡한 관리 프로세스에 능숙한 고학력 지식인과 같습니다. 1+1을 계산해 달라고 하면 할 수 있고, 오류가 있는지 분석해 줄 수도 있지만, 한 번에 몇 개만 처리할 수 있습니다.
대규모 모델의 핵심에 있는 수학적 본질은 매우 대규모의 행렬 곱셈입니다. 예를 들어, 수천x수천 크기의 두 행렬을 곱하는 것입니다. 이 작업은 수억 번의 곱셈과 덧셈이 필요합니다. 논리는 극도로 단순합니다. 곱하고-더하고, 곱하고-더하는 반복이며, 복잡한 분기 판단은 전혀 없지만 데이터 양이 엄청납니다.
전통적인 CPU로 이를 계산하려고 하면, 초당 수십억 개의 명령어를 실행할 수 있지만 수천억 개의 파라미터 앞에서는 역부족입니다.
대규모 모델이 실제로 무엇을 계산하는지 진정으로 이해하려면, 수학적 직관이 아직 공식 암기에 머물러 있다면 3Blue1Brown의 ’선형대수의 본질’을 꼭 보시길 강력히 추천합니다. 복습과 추론을 쉽게 하기 위해 이 3Blue1Brown 중영어 노트 정리와 함께 보실 수 있습니다. 고급 행렬 곱셈과 선형 변환을 직관적으로 시각화하여, 수천 개의 파라미터에 대한 곱셈-누적 연산을 물리적 수준의 이미지로 파악할 수 있게 해줍니다.
3Blue1Brown 선형대수 노트: 아마 웹상에서 최고의 중영어 정리
이러한 대규모 행렬 연산의 특성이 GPU, 그래픽 처리 장치를 탄생시켰습니다. 이제는 범용 병렬 컴퓨팅 장치라고 불러야 할 것입니다.
GPU의 설계 철학은 CPU와 완전히 반대입니다. 복잡한 제어 회로와 큰 캐시의 대부분을 제거하고, 비워진 물리적 공간을 모두 가장 단순한 ALU로 채웁니다. 현재의 NVIDIA H100 칩에는 수만 개의 컴퓨팅 코어가 있습니다. 각 코어의 주파수는 CPU 코어보다 낮고 제어 논리도 약할 수 있지만, 모두 동시에 작업할 수 있습니다.
GPU를 오직 산수만 할 줄 아는 10만 명의 초등학생 부대라고 생각해 보세요. 그들에게 극히 간단한 명령을 내립니다. 왼쪽의 숫자와 오른쪽의 숫자를 곱하세요. 10만 명의 초등학생이 동일한 클록 박자에서 동시에 결과를 계산합니다. 대규모 모델에 필요한 대규모 병렬 행렬 연산에서 GPU의 효율은 CPU의 수백에서 수천 배입니다.
사실 AI도 CPU의 가산기와 마찬가지로 그렇게 신비롭지 않습니다. 여전히 논리와 행렬의层层입니다. 딥러닝에 대한 이해를 처음부터 구축하고 싶다면, 트위터에서 많은 사람들이 AI에 대한 환상을 완전히 깨뜨려 준 책으로 평가한 Deep Learning with Python을 추천합니다. 순전파와 역전파의 텐서 계산을 스스로 이해하고 나면 대규모 모델 안에도 어떤 마법도 없다는 것을 깨닫게 될 것입니다.
이 책을 읽고 AI에 대한 환상이 완전히 깨졌습니다!
하드웨어로 돌아가겠습니다. 저수준 알고리즘 최적화를 할 때는 대부분의 노력을 VRAM 대역폭과의 싸움에 쏟습니다. 이것은 많은 고급 프로그래머가 실수하는 지점이기도 합니다.
ALU의 계산 속도가 너무 빠르기 때문입니다. 앞서 말했듯이 메모리 모듈은 커패시터의 충전과 방전으로 데이터를 저장하며, CPU나 GPU에서 일정한 물리적 거리가 있습니다. 전기 신호가 마더보드를 통해 이동하는 데도 시간이 걸립니다. 현재 AI 칩이 직면한 가장 큰 난제는 학계에서 폰 노이만 병목 현상이라고 부르는 것입니다.
즉, 수천 개의 컴퓨팅 코어가 순간적으로 가진 데이터를 처리하고 나면 느린 메모리에서 새 데이터가 옮겨질 때까지 그저 기다려야 한다는 것입니다. 칩 내의 연산 회로를 아무리 빠르게 만들어도 데이터를 충분히 공급할 수 없다면 연산 능력은 낭비됩니다.
이 문제를 해결하기 위해 하드웨어 엔지니어들은 극한으로 내몰렸습니다. 일반 메모리 모듈이 너무 멀고 느리다면, 메모리와 GPU 칩을 동일한 기판에 직접 패키징하면 되지 않을까요? 데이터 전송의 채널 폭을 늘리기 위해 전통적인 와이어 대신 실리콘 인터포저라는 기술을 사용하여 실리콘 내부에 수천 개의 미세한 전도성 구멍을 뚫어 메모리와 컴퓨팅 코어를 직접 연결합니다. 이것이 하이 밴드위스 메모리, HBM으로 시장에서 크게 주목받고 있는 것입니다.
이 부분에 깊이 흥미를 느끼고 미래 AI 시대에 대체 불가능한 아키텍트나 저수준 개발자로서 높은 연봉을 받고 싶다면, Computer Architecture: A Quantitative Approach에 도전하시길 강력히 권합니다. 이 책은 두 명의 튜링상 수상자가 썼으며, 실리콘 밸리의 거의 모든 하드웨어 엔지니어가 한 권씩 가지고 있습니다. 방대한 실제 데이터와 공식을 사용하여 왜 칩이 특정 캐시 아키텍처로 설계되어야 하는지, 멀티코어 병렬 처리의 병목이 정확히 어디에 있는지 알려줍니다. 읽기가 매우 지루하고 일부 장은 매우 어렵지만, 저수준 이해의 인지적 격차를 극복하기 위한 필수 경로입니다.
원래 질문으로 돌아가겠습니다. 왜 이러한 용어들을 모두 배웠는데도 여전히 혼란스러울까요? 전통적인 교육이 물리적 실체와 논리적 추상화 사이의 생생한 연결을 단절시켰기 때문입니다.
CPU를 마법의 블랙박스로 취급하면, 그 용어들은 이해할 수 없는 정의처럼 느껴집니다. 하지만 물리 법칙을 따라 아래에서 위로 올라가 보면:
- 높고 낮은 전압이 논리 게이트를 구성할 수 있기 때문에, 수학을 할 수 있는 산술 유닛이 생겼습니다.
- 피드백 회로가 전압 상태를 고정할 수 있기 때문에, 데이터를 저장할 수 있는 레지스터가 생겼습니다.
- 전기 신호의 흐름을 리드미컬하게 제어할 필요가 있었기 때문에, 수정 발진기와 제어 장치가 생겼습니다.
- 이 시스템이 인간이 직접 전압 레벨을 입력하기에는 너무 복잡했기 때문에, 명령어 세트를 발명하여 0과 1을 어셈블리 언어로 포장하고, 최종적으로 C와 Python으로 포장했습니다.
이 업계에서 오랜 경험을 쌓은 실무자로서 책임지고 말씀드립니다. 현대에는 프론트엔드 프레임워크가 계속해서 바뀌고, 백엔드 마이크로서비스 아키텍처도 몇 년마다 주류가 바뀌며, AI 대규모 모델 아키텍처조차도 빠르게 진화하고 있습니다. 오늘 배운 고급 애플리케이션 개발 기술이 내년에는 쓸모없어질 수 있습니다. 실제로 많은 기본 코딩 작업은 대규모 모델 자체가 평균적인 프로그래머보다 더 잘 수행할 수 있습니다.
하지만 유일하게 변하지 않는 것은 반도체 물리학에 기반한 이 컴퓨터의 기본 작동 원리입니다. 소프트웨어가 어떻게 추상화되든, 알고리즘이 아무리 정교해지든, 모든 것은 결국 실리콘 조각 위의 전압 변동으로 귀결됩니다. 고급 성능 최적화와 최첨단 컴퓨팅 스케줄링은 더욱더 엔지니어가 모든 소프트웨어 추상화 계층을 꿰뚫어 보고 기저 하드웨어의 작동 상태를 직접 파악하는 능력을 필요로 합니다.
이러한 저수준 지식이 여러분과 동떨어져 있다고 생각하지 마세요. 성능을 극도로 소비하는 코드를 만났을 때, 캐시 라인 메커니즘을 저수준에서 이해하고 있기 때문에 메모리에서 배열의 배치 순서를 조정하여 CPU 캐시 적중률을 획기적으로 향상시켜 코드 실행 속도를 10배로 만들 수 있습니다. 그 순간, 기본 원리를掌握한 데서 오는巨大的인 제어감을 느낄 수 있을 것입니다.