모든 주요 브라우저가 WebGPU를 품에 안자, 웹은 조용한 혁명의 시기를 맞이했다. 이전에는 불가능하다고 여겨졌던 아이디어들이 현실이 되어 쏟아져 나왔다. 그 정점에 있었던 것은 한 기상학 연구소와 데이터 시각화 스튜디오가 협력하여 만든 ‘실시간 지구(Living Earth)’ 프로젝트였다.
그것은 단순한 3D 지구가 아니었다. 전 세계의 기상 위성으로부터 받은 데이터를 실시간으로 시각화하여, 구름의 움직임, 해류의 흐름, 그리고 제트 기류의 역동적인 모습을 브라우저 안에서 구현해 냈다. 사용자들은 지구를 돌려보며, 지금 이 순간 일본 남쪽에서 형성되고 있는 태풍의 소용돌이를 직접 확인할 수 있었다.
이 프로젝트는 WebGPU의 모든 힘을 남김없이 사용했다. 수억 개의 데이터 포인트를 처리하는 컴퓨트 셰이더, 그리고 그 결과를 아름다운 지구 위에 그려내는 렌더 파이프라인. 이 모든 것이 완벽한 조화를 이루고 있었다.
Dawn 팀 역시 이 프로젝트를 보며 깊은 자부심을 느꼈다. 그들이 만든 플랫폼 위에서, 인류의 지식이 이토록 아름답게 피어나는 것을 목격하는 것은 더없는 보상이었다.
문제는 예상치 못한 곳에서 시작되었다.
그것은 버그 리포트가 아니었다. 크롬북(Chromebook) 개발팀으로부터 온 한 통의 정중하지만 단호한 메일이었다.
“드미트리, 저희는 최근 크롬북 사용자들의 배터리 사용 시간 데이터를 분석하던 중, 우려스러운 패턴을 발견했습니다. 특정 WebGPU 기반 웹사이트들을 방문한 사용자들의 평균 배터리 소모율이, 다른 사이트들에 비해 월등히 높게 나타나고 있습니다. 특히 ‘실시간 지구’와 같은 사이트는, 기기의 배터리 수명을 거의 절반으로 단축시키고 있습니다.”
메일은 이렇게 끝맺고 있었다.
“WebGPU가 가져온 성능 향상은 놀랍습니다. 하지만 그 성능의 대가로 사용자의 기기를 벽돌로 만들고 있다면, 우리는 뭔가 근본적으로 잘못된 길을 가고 있는 건지도 모릅니다.”
그 메일은 Dawn 팀에게 찬물을 끼얹었다.
그들은 즉시 최신 크롬북을 가져와 ‘실시간 지구’ 사이트를 열었다. 화면 속 지구는 완벽하게 부드럽게 회전했다. CPU 사용률은 낮았고, 메모리 사용량도 안정적이었다. 겉보기에는 아무런 문제가 없었다.
“도대체 뭐가 문제라는 거지? 모든 게 완벽한데.”
벤이 의아해하며 말했다.
드미트리는 고개를 저었다. 그는 크롬북 개발팀의 집요함을 잘 알고 있었다. 그들은 배터리 수명에 거의 병적으로 집착하는 이들이었다.
그는 크롬북의 개발자 모드를 활성화하고, 시스템의 가장 깊은 곳을 들여다볼 수 있는 저수준 성능 모니터링 도구를 실행했다.
그리고 그는 문제의 원인을 발견했다.
화면 한쪽에 표시된 ‘GPU 클럭 속도(GPU Clock Speed)’와 ‘전력 소모(Power Draw)’ 수치.
두 개의 막대는 모두 붉은색의 최대치를 가리키며 미동도 하지 않았다.
“이럴 수가…”
드미트리가 나지막이 탄식했다.
“우리는 GPU를 잠재우는 법을 잊고 있었어.”
문제의 본질은 이러했다.
‘실시간 지구’ 사이트는 화면에 보이는 것이 거의 변하지 않을 때조차, 매초 60번씩 GPU를 100% 성능으로 구동시키고 있었다. 구름이 아주 천천히 움직이고 있을 뿐인데도, 셰이더는 마치 격렬한 액션 게임을 렌더링하듯 쉴 새 없이 돌아가고 있었다.
WebGL 시절에는 CPU 병목이라는 ‘자연적인 브레이크’가 있었다. CPU가 힘겨워했기 때문에, GPU가 무한정 폭주하는 일은 드물었다.
하지만 WebGPU는 그 브레이크를 제거해버렸다. 이제 개발자들은 아무런 방해 없이 GPU의 힘을 끝까지 쥐어짤 수 있게 되었다. 그리고 그들은 정말로 그렇게 하고 있었다. 그 결과, GPU는 엄청난 양의 전기를 소모하며 사용자의 배터리를 집어삼키고 있었다.
드미트리는 깨달았다.
그들은 ‘최대 성능’이라는 하나의 목표에만 매몰되어 있었다. 하지만 실제 세상에서 중요한 것은, 최대 성능이 아니라 ‘와트당 성능(Performance per Watt)’, 즉 전력 효율성이었다.
그는 팀원들을 모았다.
“우리는 개발자들에게 새로운 개념을 가르쳐야 해. 그리고 새로운 도구를 주어야 한다. 바로 ‘절제’의 기술이다.”
그는 새로운 API 기능을 제안했다.
navigator.gpu.requestAdapter({ powerPreference: "low-power" });
개발자가 어댑터를 요청할 때, ‘고성능’이 아니라 ‘저전력’을 우선시하겠다고 명시적으로 선언하는 것이다. 이 옵션을 선택하면, 브라우저는 통합 그래픽 카드와 같은, 전기를 덜 소모하는 GPU를 우선적으로 할당해준다.
또한 그는 개발자 도구 팀과 협력하여, 크롬 개발자 도구에 ‘GPU 전력 소모’를 시각적으로 보여주는 기능을 추가하기로 했다. 개발자들이 자신들의 코드가 얼마나 많은 전기를 사용하고 있는지 직접 눈으로 확인하게 만드는 것이다.
WebGPU의 첫 번째 전쟁은 ‘병목’과의 싸움이었다.
하지만 이제 드미트리는 두 번째 전쟁이 시작되었음을 직감했다. 그것은 ‘전력계’와의 보이지 않는 싸움이었다.
그의 임무는 이제 단순히 가장 빠른 엔진을 만드는 것을 넘어, 가장 ‘현명한’ 엔진을 만드는 것으로 진화하고 있었다. 무한한 힘을 휘두르는 법을 알려주는 것을 넘어, 그 힘을 언제, 어떻게 사용해야 하는지를 가르쳐주는 지혜로운 안내자가 되어야 했다.