Vx - 하나의 언어로 모든 칩을

41 minutes ago 1

Vx는 CPU, GPU, NPU와 가속기 메모리를 타입 시스템에 포함하는 이기종 컴퓨팅용 시스템 프로그래밍 언어로, 호스트에서 장치 포인터를 역참조하면 런타임 오류 대신 컴파일 오류가 발생함 데이터 위치가 타입의 일부이며, 메모리 영역 사이를 이동할 때는 하드웨어상 이동 비용이 없더라도 명시적인 transfer()가 필요함 컴파일러가 메모리 용량, 비동기 전송 가시성, 버퍼 소유권, 전송 경로 등을 검사해 런타임 충돌이나 데이터 손상으로 이어질 수 있는 오류를 미리 차단함 머신 파일(machine file) 에 실제 하드웨어의 메모리 계층과 연결 구조를 선언하며, 컴파일러는 이를 기준으로 데이터 배치의 허용 여부를 판단함 정적 구성과 사전 컴파일을 중심으로 설계돼 여러 종류의 칩에서 정확성과 속도가 필요한 작업을 지향하지만, 실행 중 구조를 바꾸는 탐색적 개발에는 적합하지 않음 메모리 위치와 하드웨어 제약을 타입으로 검사 Vx는 가속기를 불투명한 런타임에 맡기지 않고 언어 의미 체계의 일부로 취급함 NPU 고대역폭 메모리에 고정한 텐서와 호스트 DRAM의 텐서는 서로 다른 타입임 경계를 넘을 때는 transfer() 를 명시해야 하며, Apple 통합 메모리에서는 이 연산이 컴파일 후 거의 아무 작업도 하지 않을 수 있음 바이너리를 프로파일링하지 않고도 소스를 읽어 데이터 지역성을 확인할 수 있도록 함 행렬 곱 예제는 Pinned 타입으로 NPU에 상주하는 4×4 f32 입력 텐서 두 개를 받고, spawn on(Topology::NPU[0])으로 연산을 실행함 결과를 Memory::NPU_HBM에 만들고 Verified<Tensor<f32, [4, 4], Memory::NPU_HBM>>으로 반환함 컴파일러는 다음 여섯 종류의 제약을 타입 검사 단계에서 확인함 주소 공간 타입 검사: 호스트의 장치 포인터 역참조나 Pinned<T, NPU_SRAM> 값이 호스트 표현식으로 빠져나오는 경우를 차단함 용량 허용 검사: 작업 데이터가 대상 메모리에 들어가지 않는 배치를 선언된 머신 기준으로 바이너리 생성 전에 거부함 경계 계약(Seam contracts): 비동기 transfer 결과의 가시성이 확보되지 않은 버퍼 읽기를 검사하며, SMT 증명기로 검증 의무를 해소함 선형 타입: 소비된 버퍼의 이동 후 사용을 막고, 변성 및 영역 추적 기능을 갖춘 대여 검사기를 함께 사용함 토폴로지 도...

Read Entire Article