CPU, 너무나도 성실한 일꾼의 한계.

2

발행일: 2025년 08월 03일

키보드 위에서 멈춘 블라디미르의 손가락은 쉽사리 움직이지 못했다. 머릿속에 그리는 청사진은 거대했지만, 현실의 벽은 두껍고 차가웠다. 그의 첫 번째 상대는 컴퓨터의 심장, 바로 CPU(Central Processing Unit)였다.

CPU. 중앙 처리 장치.
모든 명령을 해석하고 실행하는 컴퓨터의 두뇌. 사용자가 마우스를 클릭하는 순간부터 복잡한 프로그램을 실행하는 모든 과정에 관여하는 만능 해결사였다. 웹브라우저 역시 이 CPU의 통제 아래 있었다.

자바스크립트로 ‘글자를 굵게 표시하라’고 명령하면, CPU는 그 말을 알아듣고 화면에 굵은 글자를 그려냈다. ‘이미지를 보여줘’라고 하면, 이미지 파일을 해석해서 픽셀로 변환하는 것 역시 CPU의 몫이었다. 그는 한 치의 오차도 없이, 주어진 명령을 순서대로 처리하는 너무나도 성실한 일꾼이었다.

바로 그 ‘성실함’이 문제였다.

블라디미르는 머릿속으로 3D 큐브 하나를 떠올렸다. 가장 단순한 입체 도형.
그 큐브를 화면에 그리려면 컴퓨터는 무엇을 알아야 할까?

첫째, 8개의 꼭짓점(Vertex)의 위치. 3차원 공간 속 좌표 (x, y, z) 값이다.
둘째, 그 점들을 어떻게 연결해 6개의 면을 만들 것인지에 대한 정보.
셋째, 각 면을 어떤 색으로 칠할 것인지.
넷째, 조명은 어디서 비추고, 그림자는 어떻게 질 것인지.

이 모든 것을 계산해야 비로소 하나의 정지된 큐브가 화면에 나타난다. 만약 이 큐브가 1초에 60번씩 부드럽게 회전한다면? CPU는 1초에 60번, 이 모든 계산을 처음부터 다시 해야만 했다.

큐브는 시작에 불과했다. 게임 속 주인공 캐릭터는 수만 개의 꼭짓점으로 이루어져 있었다. 그 캐릭터가 달리고, 점프하고, 옷자락을 흩날리는 모든 움직임은 초당 수십 번씩 반복되는 수만, 수백만 번의 계산 결과물이었다.

CPU는 이 모든 계산을 할 수는 있었다. 하지만 그는 한 번에 하나씩, 혹은 몇 개씩 순차적으로 일을 처리하는 방식에 익숙했다. 마치 장인이 한 땀 한 땀 수를 놓는 것과 같았다.

‘5만 개의 점 위치를 계산하라’는 명령을 받으면, 그는 첫 번째 점부터 5만 번째 점까지 차례대로 계산을 시작할 것이다. 그가 5만 번째 점의 계산을 끝마칠 때쯤이면 시간은 이미 훌쩍 지나가 버려, 화면은 뚝뚝 끊기는 슬라이드 쇼처럼 보일 게 뻔했다.

‘이건… CPU가 할 일이 아니야.’

블라디미르는 확신했다. 이것은 능력의 문제가 아니라, 역할의 문제였다. 한 명의 천재적인 만능 해결사에게 수만 명의 단순 노동이 필요한 일을 맡긴 셈이었다.

해답은 이미 그의 책상 밑에서 조용히 열기를 내뿜고 있었다.

GPU. 그래픽 처리 장치.

CPU가 한 명의 천재 학자라면, GPU는 수천 개의 팔을 가진 단순 노동자의 군단과 같았다. GPU는 복잡한 논리 연산은 못 했지만, 똑같은 단순 계산을 수천 번 반복하는 데에는 타의 추종을 불허했다.

‘5만 개의 점 위치를 계산하라’는 명령을 GPU에게 내리면, GPU는 5천 명의 일꾼에게 ‘각자 점 10개씩 맡아서 동시에 계산해!’라고 일을 분배할 수 있었다. 그 결과, CPU가 몇 초에 걸려 끝낼 일을 GPU는 눈 깜짝할 사이에 해치웠다.

이것이 바로 게임이 부드럽게 돌아가는 비밀이었다.

하지만 웹브라우저는 이 강력한 군단을 어떻게 지휘해야 하는지 몰랐다. 브라우저의 언어인 자바스크립트는 오직 CPU라는 천재 학자에게만 말을 거는 법을 배웠기 때문이다. GPU 군단에게 명령을 내릴 통역사도, 방법도 존재하지 않았다.

결국, 모든 것은 하나의 질문으로 귀결되었다.

“어떻게 하면 자바스크립트가 GPU에게 직접 명령을 내리게 할 수 있을까?”

블라디미르의 손가락이 마침내 움직이기 시작했다. 그의 화면에 첫 번째 코드가 입력되었다. 그것은 아직 아무 기능도 없는 빈 껍데기에 불과했지만, 그의 머릿속에서는 이미 웹의 세계와 그래픽의 세계를 잇는 거대한 다리의 설계도가 그려지고 있었다.

성실하지만 느린 CPU의 시대를 끝내고, 강력한 GPU의 힘을 웹으로 가져오기 위한 첫 삽을 뜨는 순간이었다.