GPU専用で動作するCPU
45日前原文(github.com)
概要
- NeuralCPUは、全てのCPU構成要素(レジスタ、メモリ、フラグ、プログラムカウンタ)をGPU上のPyTorchテンソルで管理
- 全算術演算が訓練済みニューラルネットワークによって実行
- Kogge-Stoneキャリー先読み加算器やバイトペアルックアップ乗算など、従来のハードウェア設計をNNに適用
- ARM64命令セットを完全サポートし、全ての状態遷移がGPU上で完結
- 性能・精度検証済み、DOOMレイキャスターなどのデモや347の自動テストを搭載
NeuralCPU:GPU上で動作するニューラルネットワークCPUの概要
- CPUの全構成要素(レジスタ、メモリ、フラグ、プログラムカウンタ)をPyTorchテンソルとしてGPU上に常駐
- ALU演算は全て訓練済み.ptモデル(PyTorchモデル)を経由して実行
- 命令デコード、ALUディスパッチ、状態更新も全てGPU上で完結、CPU⇔GPU間の往復通信なし
- 加算・減算はKogge-Stoneキャリー先読み(8パス)、乗算はバイトペアルックアップ、ビット演算はNN真理値表、シフトはアテンションベースのビットルーティング
- 算術関数(sin, cos, sqrt, exp, log, atan2)も全てNN経由
- 整数演算は100%精度、347件の自動テストで検証済み
ALU演算と対応モデル
- ADD/SUB/INC/DEC:Kogge-Stone CLA(carry_combine + full adderモデル)
- MUL:バイトペアルックアップテーブル(256×256×16)
- AND/OR/XOR:ベクトル化NN真理値表(7×4)
- SHL/SHR:アテンション型シフトネットワーク
- CMP:ニューラル減算
- sin/cos, sqrt, exp, log, atan2:それぞれ専用の深層NN
- 全23モデル(約135MB)、うち13モデルが実際のCPU実装に直結
性能とベンチマーク
- **Apple Silicon(MPS, PyTorch 2.10.0)**で各演算1000回の平均レイテンシ計測
- exp, log, mul, and, or, xor:21μs(O(1)単一パス)
- add, sub, cmp:248μs(O(log n)キャリー先読み)
- shl, shr:434μs(3バッチパス, アテンション)
- sqrt:522μs(2パス+バッチパッド)
- atan2:935μs(6パス+バッチパッド)
- 全モデルのロード時間は60ms
- 1命令あたり136~262μs(命令ミックス依存)、約4,975 IPS
- 乗算は加算の12倍高速(従来CPUと逆転現象)
アーキテクチャの特徴
- NeuralCPUはシミュレータでなく、GPUネイティブなCPU
- 全状態(レジスタ、メモリ、フラグ、PC)はGPU上テンソル
- 命令フェッチ、デコード、実行、書き戻しまで全てGPU内で完結
- ALUは訓練済みNNバンクとして動作
- ホストCPU側での演算は一切行わない
実行モード
- Neuralモード(標準):全ALU演算を.ptモデル推論で実行
- 例:
cpu = CPU(neural_execution=True)
- 例:
- Fastモード(--fast):ALU演算をPyTorchのネイティブ演算(torch.add等)で実行し、最大1.35M IPS(バッチサイズ32768時)
Metal Computeカーネル
- kernels/mlx/:Apple MLX用Metalシェーダー(Pythonインターフェース)
- kernels/rust_metal/:Rust+objc2-metal+PyO3によるMetal API直実装
- GPU側でシステムコール処理、基本ブロックキャッシュ、ニューラルディスパッチ、アウトオブオーダー実行も対応
- DOOMベンチマーク付属
命令セット(ISA)
- テキストアセンブリ(ncpu.model)
- MOV, ADD, SUB, MUL, DIV, AND, OR, XOR, SHL, SHR, INC, DEC, CMP, JMP, JZ/JNZ, JS/JNS, HALT
- ARM64バイナリ(ncpu.neural)
- ARM64実バイナリエンコーディングにも対応
プロジェクト構成
- ncpu/neural/:完全GPUニューラルCPU(ARM64, 12K行)
- ncpu/model/:モデルベースCPU(テキストアセンブリ用)
- ncpu/tensor/:テンソルベースARM64カーネル
- kernels/:Metal Computeカーネル(Python+Metal, Rust+Metal)
- models/:23種の訓練済み.ptモデル
- demos/:DOOMレイキャスター等デモ
- programs/:アセンブリプログラム
- tests/:347件のテスト
- benchmarks/:性能ベンチマーク
- paper/:研究論文
- main.py:CLIエントリーポイント
DOOMレイキャスターデモ
- 全演算を訓練済みNN経由で実行するDDAレイキャスター
- Neuralモード:約2.5FPS、Fastモード:約5,000FPS
- 両モードでアルゴリズム・出力は完全一致(違いは演算経路のみ)
- **固定小数点演算(スケール1024)**で32ビット整数のみ使用
テスト・ライセンス
- pytest tests/ -vで全347件のテストを実行可能
- MITライセンス
まとめ・ポイント
- 従来のハードウェア設計手法をNNへ直接転用可能であることを実証
- キャリー先読みやベクトル化による大幅な高速化
- 全CPU状態がGPU上に常駐、真のGPUネイティブCPUを実現
- **演算ごとの計算量階層(O(1), O(log n), O(n))**が明確
- 研究論文・詳細ドキュメント・デモ・テストが充実した先進的プロジェクト