5.1 픽셀 너머를 바라보다: 범용 연산으로의 발상 전환
2000년대 초반, 전 인류의 컴퓨팅(Computing) 역사를 지탱해 오던 철옹성 같은 믿음인 무어의 법칙(Moore’s Law)이 서서히 불길한 파열음을 내기 시작했다. 실리콘 웨이퍼 위로 트랜지스터를 끝없이 욱여넣어 CPU의 클럭(Clock) 속도를 이끌어 올리는 방식이 물리적인 발열(Thermal)과 누설 전류라는 거대한 장벽에 가로막혀 서서히 둔화(Deceleration)되기 시작한 것이다. 당시 기상청의 대기 시뮬레이션이나 대학 연구소의 끔찍한 분자 배열 등을 계산하던 전 세계의 과학자들은 극도의 연산 굶주림 상태에 빠져 있었다. 단일 코어(Single Core)로 구성된 똑똑하긴 하지만 너무나 관료적인 CPU 구조에만 의존해서는, 막대한 빅데이터(Big Data) 배열의 처리를 감당할 수 없었기 때문이다.
이때, 가장 뜻밖의 장소인 모니터 화면 뒤쪽에서 한 줄기 괴상한 구원의 빛이 번뜩였다. 5.1장에서는 오직 비디오 게임(Video Game)의 입체감을 표현하기 위해 기형적으로 발전해 온 멍청하지만 부지런한 수백 개의 노동자 논리 회로, 즉 ‘GPU(Graphics Processing Unit)의 거대한 병렬(Parallel) 아키텍처’ 가 학계에 의해 완전히 새로운 시각으로 재발견(Rediscovery)되는 극적인 발상의 전환(Paradigm Shift) 과정을 살펴본다.
화면에 그저 ’색’을 칠할 뿐인 이 단순 반복에 특화된 짐승 같은 연산 능력을, 오락실이 아닌 진지한 과학 연구소의 슈퍼컴퓨터(Supercomputer) 가속 엔진으로 빼앗아 쓰고 싶어 했던 당시의 절박했던 컴퓨터 공학자들의 갈증과 지독한 열망을 파헤친다.
5.1.1 무어의 법칙의 둔화와 단일 코어 CPU 구조의 한계
20세기 후반 정보 통신 혁명의 찬란한 구원자였던 중앙처리장치(CPU)는 2000년대에 접어들며 심각한 물리적 정체, 이른바 ’클럭 속도(Clock Speed)의 감옥’에 갇히게 되었다. 당시 인텔(Intel)로 대변되던 반도체 업계는 칩셋(Chipset)의 처리 속도를 높이기 위해 무어의 법칙(Moore’s Law)에 따라 오직 칩 스케일을 미세하게 깎아내고 억지로 전압을 밀어 넣어 동작 주파수를 수 GHz(기가헤르츠) 단위로 무식하게 뽑아 올리는 데만 광적으로 혈안이 되어 있었다.
그러나 이 오만한 직렬 연산(Serial Processing)의 극한 추구는 곧 끔찍한 물리 법칙의 형벌을 받게 된다. 칩 내부의 집적도가 너무 높아지자 전자가 회로를 탈선(Leakage)하기 시작했고, 거대한 용광로처럼 치솟는 발열(Thermal Output) 현상 앞에서 기존의 단일 코어 CPU 아키텍처(Single Core Architecture) 구조는 사실상 성능 진화의 완벽한 징벌적 사형 선고를 맞이했다.
이는 한 명의 천재 슈퍼스타 수학자에게 복잡한 미분 방정식을 1초에 30억 번 풀라고 채찍질하다가 결국 그 수학자의 뇌가 과부하로 녹아내려 버린 것과 같은 이치였다. 유체 역학 모델링이나 방대한 지진파 데이터 분석, 혹은 신약 개발의 단백질 폴딩(Protein Folding) 연산과 같은, 우주적인 스케일(Scale)을 지닌 거대 데이터 덩어리를 뚫고 가야 하는 과학계의 학자들에게 이 관료주의적인 CPU 단일 회로는 극도로 답답하고 비효율적인 최악의 병목(Bottleneck) 그 자체이자 깊은 절망의 성벽이었다.
5.1.2 단순 반복 작업에 최적화된 GPU의 병렬 처리 아키텍처 재발견
CPU의 발열과 한계 앞에서 핏발 서린 눈으로 새로운 연산 돌파구를 찾던 전 세계의 대학 랩(Lab)실과 연구원들은, 자신들의 실험실 책상 구석에서 밤마다 게이머들이 화려하게 총싸움이나 즐기던 볼품없는 보조 장치인 그래픽 카드(Graphic Card) 안에서 기괴한 몬스터를 뒤늦게 재발견(Rediscovery)하게 된다.
CPU가 무거운 운영체제의 스레드(Thread)를 꼼꼼하게 관리하는 복잡한 두뇌라면, 엔비디아(NVIDIA)가 설계한 이 GPU(Graphics Processing Unit)는 수십, 수백 개의 멍청하지만 힘은 장사인 나노급 병사들이 일렬로 길게 도열해 있는 완벽한 군대, 바로 진정한 ‘병렬 처리(Parallel Processing)’ 의 화신이었다. 화면 모니터에 존재하는 수백만 개의 점(Pixel)들에 매 프레임(Frame)마다 똑같은 광학 곱셈 수식을 무식하게 때려 부어야 하는 게임의 속성 탓에, GPU 내부에는 오직 이 단순 반복 연산만을 미친 듯이 전담하기 위한 산술 논리 연산 장치(ALU, Arithmetic Logic Unit)가 개미떼처럼 촘촘히 둥지를 틀고 배수진을 치고 있었던 것이다.
graph LR
A[문제: 100만 개의 단순 계산 필요<br>1 Million Simple Computations] --> B[CPU 아키텍처<br>Serial Processing]
A --> C[GPU 아키텍처<br>Parallel Processing]
B --> D[1~4개의 강력한 코어<br>Few Powerful Cores]
D --> E[차례대로 100만 번 반복<br>끔찍한 시간 지연 / 발열 발생]
C --> F[수백 개의 단순 연산 유닛<br>Hundreds of ALUs]
F --> G[한 번에 수천 개씩 동시 연산<br>Simultaneous Execution]
G --> H[순식간에 렌더링 / 데이터 출력 완료<br>Massive Throughput]
style G fill:#f9f,stroke:#333,stroke-width:2px,color:#fff
과학자들의 머릿속에 번뜩이는 거대한 충격이 스쳐 갔다. “만약 이 수백만 개의 GPU 픽셀 코어들에게, 모니터 화면의 빨간색(Red)이나 파란색(Blue) 값 대신, 지진학의 파형 데이터(Wave Data) 수치나 복잡한 금융 파생상품의 행렬(Matrix) 숫자를 우격다짐으로 우겨넣어 한 방에 동시에 연산시킬 수만 있다면?” 그것은 1억 원짜리 거대 슈퍼컴퓨터(Supercomputer)의 전유물이라 여겨지던 고성능 수치 해석을 고작 몇십만 원짜리 싸구려 게임용 보드판에서 구현해 낼 수 있다는, 학계를 발칵 뒤집어 놓을 미치광이 같은 마법의 발상(Paradigm Shift)이었다.
5.1.3 그래픽 카드를 ’계산기’로 쓰고자 했던 학계의 초기 열망
비디오 게임용으로만 치부되던 GPU 아키텍처(Architecture) 내부에 도사리고 있는 폭력적인 병렬 연산(Parallel Computing)의 막대한 화력을 깨달은 학계 연구자들의 눈빛은 서서히 광기에 물들기 시작했다. 2000년대 초반, 전 세계의 수많은 랩(Lab)실과 해커(Hacker) 공학도들 사이에서는 일종의 비밀스럽고도 거친 연대감이 형성되었다. 바로 এই 닫혀버린 게임용 비디오 깡통 장치를 어떻게든 강제로 비틀어 열어젖혀, 자신들의 ’복잡하고 위대한 과학 계산기(Scientific Calculator)’로 강제 개조해 보려는 원초적이고 이단적인 열망(Aspiration)이었다.
하지만 이들의 선구적인 열망 앞을 가로막은 가장 끔찍하고 견고한 장벽은, 바로 이 그래픽 보드가 오로지 모니터 화면에 그림만을 그리기 위한 목적으로 지독하게 꽁꽁 묶여 설계된 하드웨어라는 치명적인 사실이었다. 일반적인 C 기계어나 C++ 코드를 치듯 편하게 데이터를 입력할 수 있는 통로나 언어 환경(Compiler) 따위는 눈을 씻고 찾아봐도 애초에 존재하지 않았다. 오직 마이크로소프트의 다이렉트X(DirectX)나 그래픽 전용인 OpenGL이라는 다닥다닥 닫힌 권위적인 그래픽 언어의 파이프라인(Graphic Pipeline) 틈새만을 통해서 한정적으로 명령을 밀어 넣어야만 했다.
아무리 뛰어난 입자물리학자나 재무 모델링 코더(Coder)라고 할지라도, 자신들의 고상한 수학 행렬 방정식을 GPU 하드웨어에 연산시키기 위해서는 울며 겨자 먹기로 3D 그래픽의 원근법이나 광원 텍스처(Texture Mapping) 매핑 같은 전공과 전혀 무관한 엉뚱하고 기괴한 그래픽 렌더링 논리 구조를 억지로 처음부터 다시 배워야만 했다. 이것은 마치 복잡한 세금 계산을 하기 위해 전자계산기 대신 그림물감과 붓의 사용법을 배워버려야 하는 것만큼이나 황당하고도 극악무도한, 소프트웨어의 거대한 단절(Disconnection)이자 장벽(Barrier)에 다름 아니었다.