1부. 왜 계산기는 둘인가: ALU와 FPU
컴퓨터 안의 이상한 중복
Section titled “컴퓨터 안의 이상한 중복”먼저 컴퓨터의 이상한 사실을 알아보자. 컴퓨터는 숫자를 계산하는 기계인데, 막상 그 안을 들여다보면 계산기가 하나가 아니라 둘이다. 이 장은 그 분리를 가장 직관적인 수준에서 설명한다. 핵심은 ALU와 FPU가 단순히 역할 분담을 한 것이 아니라, 합치고 싶어도 쉽게 합칠 수 없는 서로 다른 계산 문제를 떠안고 있었다는 점이다.
처음 이 이야기를 들으면 약간 이상하다.
컴퓨터는 결국 숫자를 더하고 빼는 기계 아닌가.
그렇다면 큰 계산기 하나를 넣어두고 모든 숫자를 처리하게 하면 될 것 같다.
그런데 실제 CPU 프로세서 안에는 보통 정수 연산을 담당하는 ALU와, 부동소수점 연산을 담당하는 FPU가 따로 있다.
이 분리는 단순한 역사의 잔재가 아니다. ALU와 FPU는 둘 다 숫자를 다루지만, 서로 다른 책임을 지고 있다.
[](간단한 ALU/FPU 비교 사진)
ALU는 무엇을 맡는가
Section titled “ALU는 무엇을 맡는가”ALU(Arithmetic Logic Unit, 산술 논리 장치)는 정수 연산 쪽에 맞춰진 계산기다.
정수의 덧셈, 뺄셈 같은 산술 연산과 비교, 참/거짓 등의 논리 연산 작업이 여기에 들어간다.
정수는 논리적 참/거짓 패턴과 비교적 자연스럽게 맞물린다.
7 + 5 = 12 같은 계산은 표현 방식(같다)과 계산 방식(덧셈)이 단단하게 이어져 있다.
물론 정수 계산도 실제 회로 수준에서는 단순하지 않지만, 그래도 큰 틀에서는 ALU가 다루는 세계가 비교적 명확하다. 정수는 개수를 정확하게 세고, 그 정확한 패턴 위에서 논리 회로를 조직한다.
FPU는 왜 따로 필요했는가
Section titled “FPU는 왜 따로 필요했는가”문제는 현실의 많은 값이 정수처럼 딱 떨어지지 않는다는 데 있다. 길이, 속도, 압력, 온도, 질량, 확률처럼 실제 계산이 다뤄야 하는 값은 소수점 아래를 끌고 가는 경우가 대부분이다. 이런 값들을 실수라고 부른다. 그리고 당연히, 이런 실수 값들은 정수로 완전하게 표현하는 것이 불가능하다.
여기서 등장한 것이 부동소수점이다. 부동소수점은 실수를 정확하게 저장하는 기술이 아니라, 제한된 비트 안에서 매우 넓은 범위의 값을 그럴듯하게 근사하기 위한 타협이다. FPU(Floating Point Unit, 부동소숫점 연산 장치)는 바로 그 타협을 전담하는 계산기다.
즉 FPU가 생긴 이유를 가장 짧게 말하자면,
- 현실의 물리량과 연속적인 수학 표현을 그대로 버릴 수는 없었다.
- 하지만 컴퓨터 자원은 이들을 담기에는 유한했다.
- 그래서 실수를 정확하게 담는 대신, 실수 근사 표현을 계산 가능한 형태로 관리하는 전용 장치가 필요했다.
이 점에서 FPU는 ALU의 상위 호환이 아니라, 표현력과 성능을 위해 만들어진 절충 장치에 가깝다.
왜 둘은 하나로 합쳐지지 않았는가
Section titled “왜 둘은 하나로 합쳐지지 않았는가”ALU와 FPU의 차이는 속도 차이만이 아니다. 더 중요한 차이는 내부 절차의 복잡도다.
정수 연산은 상대적으로 직접적이다. 반면 부동소수점 연산은 같은 덧셈 하나를 하더라도 부호, 지수, 가수 정렬, 정규화, 반올림 같은 절차를 거쳐야 한다. 다시 말해 FPU는 숫자를 계산하기 전에 숫자의 형태를 먼저 맞추는 일부터 해야 한다.
그래서 하드웨어 수준에서도 둘은 성격이 달라진다.
- ALU는 정확한 비트 조작에 최적화된다.
- FPU는 근사 표현을 유지하기 위해 별도 규칙과 회로를 필요로 한다.
- 둘을 하나의 회로 철학으로 통합하려 하면, 오히려 어느 한쪽에 비효율이 생긴다.
이 때문에 ALU와 FPU의 분리는 서로 다른 표현 체계를 감당하기 위한 구조적 분기라고 볼 수 있다.
타협의 대가
Section titled “타협의 대가”하지만 여기서 중요한 점이 하나 더 있다. FPU는 분명 유용하다. 없었으면 현대 과학 계산과 공학 계산의 상당 부분은 지금 같은 형태로 발전하기 어려웠을 것이다. 문제는 이 타협이 공짜가 아니라는 점이다.
부동소수점은 처음부터 근사 표현 위에 서 있기 때문에 본질적으로 다음과 같은 비용을 동반한다.
- 정확히 같은 수학식도 계산 순서에 따라 결과가 달라질 수 있다. 특히 병렬 합산이나 직렬화에서 두드러진다.
- 작은 반올림 오차가 반복 계산에서 점점 누적된다. 즉, 시간에 따라 오차가 쌓인다.
- 그 결과, “같은 계산을 했는데 결과가 미세하게 다르다”는 문제가 구조적으로 발생한다.
즉 FPU는 실수를 계산 가능하게 만들어 준 대신, 오차라는 시한폭탄을 내부에 함께 넣었다.
다음 장으로 넘어가기 위한 질문
Section titled “다음 장으로 넘어가기 위한 질문”그렇다면 이 문제는 단지 FPU가 덜 정교해서 생긴 것일까. 더 빠른 회로, 더 넓은 비트폭, 더 많은 자원을 주면 사라지는 문제일까.
문제는 단순히 구현 기술이 부족해서가 아니다. 더 깊은 층위에서는 세는 수와 재는 수, 다시 말해 이산적인 기계와 연속적인 수학 언어의 충돌이 놓여 있다.
ALU와 FPU의 분리는 우연한 중복이 아니라, 정확한 카운팅과 근사 표현이라는 서로 다른 문제를 감당하기 위해 생긴 구조적 분기다.