최근 CPU, GPU, NPU 등 이종(heterogeneous) 컴퓨팅 환경이 보편화되면서, 각기 다른 칩을 효율적으로 프로그래밍하는 것이 중요한 과제가 되었습니다. 이러한 배경 속에서 'Vx'라는 새로운 시스템 언어가 등장했습니다. Vx는 다양한 칩을 하나의 언어로 프로그래밍할 수 있도록 설계되었으며, 특히 데이터의 물리적 위치와 칩 간의 연결 구조를 타입 시스템(type system)에 포함시켜 개발자가 하드웨어 제약을 명확히 인지하고 활용할 수 있도록 돕습니다.
Vx의 핵심 기능은 메모리 위치와 하드웨어 제약을 타입으로 검사한다는 점입니다. 예를 들어, CPU 메모리와 GPU 메모리에 있는 데이터를 서로 다른 타입으로 구분하며, 다른 메모리 영역으로 데이터를 옮길 때는 `transfer()`와 같은 명시적인 연산을 사용해야 합니다. 이를 통해 잘못된 장치 메모리 접근, 메모리 용량 초과, 전송 완료 전 버퍼 읽기 등 잠재적인 오류를 컴파일 시점에 미리 차단할 수 있습니다. 개발자는 머신 파일(machine file)에 실제 하드웨어의 메모리 용량과 칩 간 연결 경로를 선언함으로써, 컴파일러가 해당 하드웨어에서 가능한 데이터 배치와 전송을 검사하도록 할 수 있습니다. Vx는 주소 공간 타입 검사, 용량 허용 검사, 경계 계약(Seam contracts), 선형 타입, 토폴로지 도달 가능성, 자동 미분 등 여섯 종류의 제약을 타입 검사 단계에서 확인하여 안정성을 높입니다.
이러한 설계는 특히 여러 종류의 칩에서 정확하고 빠르게 실행되어야 하는 작업에 초점을 맞춥니다. 가속기(accelerator)를 불투명한 런타임에 맡기는 대신, 언어의 의미 체계(semantics) 일부로 취급하여 개발자가 데이터 지역성(data locality)을 소스 코드 수준에서 명확히 파악하고 제어할 수 있게 합니다. 이는 머신러닝(ML) 모델 추론(inference)과 같이 정적으로 구성된 고성능 컴퓨팅 작업에 매우 적합합니다. 반면, 실행 중에 모델 구조를 자유롭게 바꾸는 탐색적 개발이나 동적인 작업에는 상당한 수고가 필요할 수 있습니다.
Vx는 Apple Silicon macOS와 Linux x86_64 환경을 지원하며, GitHub를 통해 소스 코드와 학습 자료를 공개했습니다. NVIDIA GPU(NVVM), Apple AMX/ANE(CoreML), x86-64/arm64 CPU(LLVM IR) 등 다양한 백엔드를 지원하며, 공급업체는 MLIR(Multi-Level Intermediate Representation) 패스 플러그인으로 컴파일러를 확장할 수 있습니다. 이처럼 Vx는 현대 이종 컴퓨팅 환경에서 고성능 애플리케이션 개발의 복잡성을 줄이고 안정성을 높이는 새로운 접근 방식을 제시하며, 하드웨어의 잠재력을 최대한 끌어내는 데 기여할 것으로 보입니다.