
2026/10/04 2:23
Vx – 一つの言語、すべてのチップ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Vx は、型システム内でのメモリ階層規則の強制を通じて、多様な計算ハードウェア上でクラッシュフリーな実行を確保するために設計されたシステムプログラミング言語です。PyTorch のように動的なランタイム動作を許可するフレームワークとは異なり、Vx はコンパイル時正しさを最優先し、明示的なデータ移動を要求し、ループ中のアーキテクチャやテンソルの形状の変更を禁止します。このアプローチにより、コードが実行される前にセグメンテーションフォールトなどの一般的なクラッシュを防ぎます。本言語は、フラットな 256 ビットの識別子を使用してロックフリーな並列コンパイルを実現する専用コンパイラ、そして推測ベースのパフォーマンスモデルではなく実際のハードウェアインタコネクトを記述した検証済みの機械ファイルを読み取ることで、このアプローチを達成しています。これらの入力ファイルは仕様に関する出典を引用し、未検証データをマークします。現在、出荷前に用意されたファイルでは、NVIDIA H100/B200 シリーズ、AMD MI300X、Apple M4 スイリコンなど特定のデバイスをサポートしており、x86-64 CPU から高度な GPU までをカバーする LLVM IR ベンダバックエンドに対応します。アクセラレータを独自のデータ局所性特性を持つファーストクラスのセマンティック実体として扱うことで、Vx は多様なスイリコンタイプを超えた保証された速度と信頼性が不可欠で明確に定義された問題に対して、実験的なデバッグや危険なメモリアクセスパターンを必要としない堅牢なソリューションを提供します。
本文
Vx: 異種コンピューティングのための次世代システム言語
Vx は、CPU、GPU、NPU、アクセラレータメモリを型システムの一部として統合したシステムプログラミング言語です。これにより、ホストスレッドがデバイスポインタに不正アクセスしようとした場合、深夜のセグメンテーション・フォルトではなくコンパイル時エラーとして検出されます。
インストール方法
公式ドキュメントで macOS (Apple Silicon) や Linux x86_64 へのインストール手順を確認してください。
curl -fsSL https://vxlang.org/install.sh | sh
注釈: 「異種性」はランタイムの概念ではなく、型システムに属するべきものです。データが存在する場所は、その型の一部分となります。
アクセラレータをセマンティクスとして扱う
多くの言語ではアクセラレータを不透明なインフラストラクチャと見なしますが、Vx ではそれを意味論(セマンティクス)の一部として扱います。
- 明示的な転送関数: NPU の高速メモリにピン留めされたテンソトとホストの DRAM にあるテンソトは異なる型を持ちます。ハードウェア上の境界を跨ぐコストが実質ゼロであっても、両者の間を行き来するには明示的な
関数を呼び出す必要があります。transfer() - データ局在性の証明: Apple の統一メモリ上ではデータ転送のコードはコンパイルで最適化されますが、ソースコードに書式を残すことで、データの局在性を直接読み込むことで証明できるようにしています。
実装例: NPU メモリ上の行列積計算
// NPU メモリにすでに resident な 2 つの行列。 fn custom_matmul( a: Pinned<Tensor<f32, [4, 4]>, Topology::NPU[0]>, b: Pinned<Tensor<f32, [4, 4]>, Topology::NPU[0]>) -> Verified<Tensor<f32, [4, 4], Memory::NPU_HBM>> { let mut result = Tensor<f32, [4, 4], Memory::NPU_HBM>::uninit(); // 計算をアクセラレータにディスパッチする。 spawn on(Topology::NPU[0]) { for i in 0..4 { for j in 0..4 { result[i][j] = 0.0; for k in 0..4 { result[i][j] += a[i][k] * b[k][j]; } } } } Verified(result) }
コンパイラによって排除される問題点
Vx の型システムは以下の課題をコンパイル時点で解決します。
- アドレス空間タイピング: デバイスポインタをホスト側から参照する際の型安全性を確保し、
タイプのデータがホストの型システムに流出することを防ぎます。Pinned<T, NPU_SRAM> - キャパシティ承認 (Capacity admission): 宣言されたマシンの仕様に照らし合わせ、作業セットが入りそうなメモリ領域への配置を事前に検証します。不適切なケースはバイナリ実行前に拒否されます。
- シーム契約 (Seam contracts): 非同期転送中にバッファの内容を読み取る行為が、SMT プロバーによって論理的に不可能であることを証明し、コンパイル時点で除外します。
- 線形型 (Linear types): 消費されたバッファの使用禁止と借用チェックャーによる領域追跡を組み合わせた、安全なデータフロー制御を実現します。
- トポロジー到達可能性: 宣言された経路が存在しない二つのメモリ空間間での転送を試みた場合、コンパイルエラーとなります。
- オートディファ (Autodiff): 副変数が定義されていない領域を通じて微分計算を行う試みを、型システム上で排除します。
マシンは宣言され、仮定されるものではない
既存のコンパイラがコストモデルをハードコーディングする一方、Vx は実際のハードウェア定義ファイルを参照して読み込みます。
- 厳密な単位の扱い: 単位表現は常に厳密な整数変換です(SI 接頭辞 $10^9$、IEC 系 $2^{30}$)。ベンダー資料の記載を厳格に尊重します。
- 多様なハードウェア対応: H100, H200, B200, A100, MI300X, Apple M4 などのマシンファイルが含まれています。未検証の数値は明示的にマークされます。
マシン定義の例
Memory HBM { capacity: 80 GiB, bandwidth: 3.35 TB/s, managed: explicit, scope: device } Memory L2 { within: Memory::HBM, capacity: 50 MiB, bandwidth: 12 TB/s, managed: cached } Memory SMEM { within: Memory::L2, capacity: 228 KiB, bandwidth: 128 B/cyc, clock: 1.98 GHz, replicas: 132, granule: 1 KiB, scope: sm } Topology Device { arch: nvptx64, memory: Memory::HBM, transfer Memory::CPU_DRAM -> Memory::HBM : 63 GB/s, }
コンパイルの仕組み
データ指向並列フロントエンド
すべてのシンボル、ノミナル型、バリアントは256 ビットのフラットな識別子として表現されます。
- ロックフリー並列化: 再帰型への必須ボックスリングにより結合度が低減され、クエリエンジンがコア間で並列に動作します。
- MLIR バイトコードの同一性: 同じソースコードを単一スレッドでも並列でもビルドした場合、生成される MLIR は完全に同一となります(ハッシュシードで検証)。
バックエンド対応
対応するバックエンドには以下が含まれます:
- CPU (x86-64, arm64):
→MLIR
→ ネイティブコード(AOT/JIT)LLVM IR - NVIDIA GPU:
→MLIR
→NVVM
→PTXSASS - Apple AMX / ANE: プラグイン経由で CoreML 基本命令へのディスパッチ
- 分散管理: Manifest に基づくワイヤプロトコルによるリモートリージョン管理
- 拡張性: ベンダーはコンパイラをパッチングせず、MLIR パスプラグインを通じて拡張します。
Vx が不適切なツールになる場所
Vx は特定のユースケースには向いていません。
- 動的なアーキテクチャ変更: PyTorch ユーザーがループ内でテンソルの形状を変えたり分岐を行ったりする「ダイナミズム」は、Vx の静的なリージョン化環境では実装に多大な労力を要します。
- 仕様未定のシステム: シリコンの仕様がまだ模索中であれば、Vx が最適とは限りません。
まとめ
Vx は 10 種類の異なるシリコン上で正しくかつ高速に動作するタスクに適した言語です。異種コンピューティングを型で保証することで、ランタイムエラーを防ぎ、ハードウェアの詳細をコード内に記述可能にします。