日本語版
最新ニュース
科学&テクノロジー

robertcprice/nCPU: nCPU: 整理されたワークロード、ツール、ドキュメントを備えたモデルネイティブおよびテンソル最適化された CPU 研究ランタイム · GitHub

完全に GPU 上で実行される CPU — レジスタ、メモリ、フラグ、プログラム カウンターはすべてテンソルです。すべての ALU 演算は訓練されたニューラル ネットワークです。加算には Kogge-Stone キャリー先読みを使用します。乗算では、学習されたバイトペア ルックアップ テーブルを使用します。ビット単位の演算ではニューラル真理値表を使用します。シフトではアテンションベースのビットルーティングが使用されます。ハードコードされた演算はありません。 pip install -e ".[dev]" # Run a program — all arithmetic through trained neural networks python main.py --program programs/sum_1_to_10.asm # Run with execution trace…

robertcprice/nCPU: nCPU: 整理されたワークロード、ツール、ドキュメントを備えたモデルネイティブおよびテンソル最適化された CPU 研究ランタイム · GitHub

1772624717
2026-03-04 04:30:00

完全に GPU 上で実行される CPU — レジスタ、メモリ、フラグ、プログラム カウンターはすべてテンソルです。
すべての ALU 演算は訓練されたニューラル ネットワークです。

加算には Kogge-Stone キャリー先読みを使用します。乗算では、学習されたバイトペア ルックアップ テーブルを使用します。
ビット単位の演算ではニューラル真理値表を使用します。シフトではアテンションベースのビットルーティングが使用されます。ハードコードされた演算はありません。

テスト
モデル
正確さ
ライセンス

pip install -e ".[dev]"

# Run a program — all arithmetic through trained neural networks
python main.py --program programs/sum_1_to_10.asm

# Run with execution trace
python main.py --program programs/fibonacci.asm --trace

# Inline assembly
python main.py --inline "MOV R0, 42; HALT"

# GPU tensor mode (maximum speed, native tensor ops)
python main.py --binary firmware.bin --fast

CPU 全体が GPU 上で動作します。レジスタ、メモリ、フラグ、プログラム カウンターは PyTorch テンソルです。命令のデコード、ALU ディスパッチ、および状態の更新はすべてデバイス上で行われ、ホスト CPU との間で何もやり取りされません。すべての ALU 操作はトレーニング済みのルーティングを介してルーティングされます。 .pt モデル:

命令 神経モデル 仕組み
ADD R0, R1, R2 arithmetic.pt + carry_combine.pt Kogge-Stone CLA (8 ニューラル パス)
SUB R0, R1, R2 arithmetic.pt + carry_combine.pt 2の補数 + CLA
MUL R0, R1, R2 乗算.pt バイトペア LUT ルックアップ (64 ビットの場合は最大 64 ペア)
DIV R0, R1, R2 算術.pt 神経減算による割り算の復元
AND R0, R1, R2 論理.pt ベクトル化された真理値表 (すべての 32 ビットを一度に)
OR R0, R1, R2 論理.pt ベクトル化された真理値表
XOR R0, R1, R2 論理.pt ベクトル化された真理値表
SHL R0, R1, 4 lsl.pt 出力位置ごとのアテンションベースのビットルーティング
SHR R0, R1, 2 lsr.pt アテンションベースのビットルーティング
CMP R0, R1 算術.pt ニューラルサブトラクション → N/Z/Cフラグを導出
INC R0 算術.pt ニューラルアド1
DEC R0 算術.pt ニューラル サブトラクト 1

数学関数 (sin、cos、sqrt、exp、log、atan2) もトレーニング済みモデルを通じて接続されています。

結果: 347 の自動テストによって検証された整数演算の精度 100%。

23 モデル (合計約 135 MB)、13 モデルがアクティブに接続:

成分 モデル 正確さ 有線
追加/サブ/増加/減少 Kogge-Stone CLA (carry_combine + 全加算器) 100% はい
MUL バイトペアLUT [256×256×16] 100% はい
AND/OR/XOR ニューラル真理値表 [7×4] 100% はい
LSL 分解されたシフトネットワーク 100% はい
LSR 分解されたシフトネットワーク 100% はい
CMP 神経サブトラクション 100% はい
罪/余弦 サイン波で作動するディープネットワーク 訓練を受けた はい
平方メートル ニュートン精密化による 2 段階 訓練を受けた はい
経験値/対数 4層MLP 訓練を受けた はい
あたん2 BatchNorm による 6 層残差 訓練を受けた はい
LLM をデコードする Qwen2.5-Coder-1.5B LoRA 100% はい (リアルモード)

見る models/MODEL_INDEX.md 詳細については、

Apple Silicon (MPS バックエンド、PyTorch 2.10.0) でのベンチマーク、操作ごとに 1,000 回の反復:

手術 レイテンシ (平均) シーケンシャルパス 戦略
経験値、ログ 21人 1 シングルパスMLP
マル 21人 1 バッチ化されたバイトペア LUT 収集
そして、または、xor 21人 1 ベクトル化された真理値表ルックアップ
罪、コス 48 私たち 2 サイン波で作動するディープネットワーク
追加、サブ、cmp 248 私たち 8 (CLA) Kogge-Stone キャリー先読み
シュル、シュル 434 私たち 3 (バッチ) ベクトル化されたアテンション ルーティング
平方メートル 522 私たち 2 + バッチパッド 2 段階の BatchNorm MLP
あたん2 935us 6 + バッチパッド 残りの BatchNorm ネットワーク

すべてのモデルがロードされます 60ミリ秒。プログラムは次の場所で実行されます。 136–262us/サイクル 命令の組み合わせによって異なります (~4,975 IPS)。

# Run benchmarks
python benchmarks/benchmark_neural.py

乗算は加算より 12 倍高速です、キャリー先読みがあっても。従来の CPU では、MUL は ADD よりも遅くなります。ニューラル CPU ではこれが逆転します。バイト ペア LUT (21 us) には逐次依存性がありませんが、CLA 加算器 (248 us) には O(log n) 個のキャリー結合ステージが必要です。 CLA以前は、その差は38倍(リップルキャリーパス32回で826人)でした。

キャリー先読みはニューラル ネットワークで機能します。 Kogge-Stone 並列プレフィックス アルゴリズムは、訓練されたキャリー結合ネットワーク (16 入力すべてで 100% の精度) を使用して、ADD/SUB/CMP を ~826 us から ~248 us に削減しました。 3.3倍のスピードアップ。古典的なハードウェア設計原則は、ニューラル アーキテクチャに直接適用されます。

ベクトル化により、注意コストのほとんどが回収されます。 シフト操作は ~2,833 us (64 回の連続パス) から ~434 us (3 回のバッチ パス) になりました — a 6.5倍のスピードアップ

O(1) / O(log n) / O(n) 階層。 操作は、O(1) シングルパス ルックアップ (約 21 us)、O(log n) パラレル プレフィックス キャリー (約 248 us)、O(n) シーケンシャル パス (sqrt ~522 us、atan2 ~935 us) の 3 層に分類されます。

を参照してください。 研究論文 詳細な分析のために。

NeuralCPU は、たまたま GPU を使用するシミュレータではありません。 GPU プログラム。すべての CPU 状態は、PyTorch テンソルとしてデバイス上に永続的に存在します。

  • レジスター: 31 × 64 ビット (torch.int64 GPU上)
  • メモリ: フラットバイトアドレス指定可能 (torch.uint8 GPU上)
  • フラグ: GPU 常駐テンソルとしての N、Z、C、V
  • プログラムカウンター: GPU テンソル、デバイス上で増加

CPUは64ビットARM64です。レジスタ、アドレス、データ パスはすべて 64 ビットです。命令のフェッチ、デコード、実行、ライトバックはすべて GPU 上で行われます。 ALU は、GPU 推論として実行されるトレーニング済みニューラル ネットワークのバンクです。実行ループ内にホスト CPU の演算はありません。

ニューラルモード (デフォルト) — すべての ALU 演算は、トレーニング済みの ALU 演算を通過する前方パスです。 .pt モデル:

from ncpu.model import CPU
cpu = CPU(neural_execution=True)
cpu.load_program("MOV R0, 7nMOV R1, 6nMUL R2, R0, R1nHALT")
cpu.run()
print(cpu.get_register("R2"))  # 42 (computed by neural byte-pair LUT)

高速モード (--fast) — 同じ GPU 常駐アーキテクチャですが、ALU は torch.add/torch.mul
モデル推論の代わりに。ターゲット 135万IPS Apple Silicon MPS のbatch_size=32768:

from ncpu.neural import NeuralCPU
cpu = NeuralCPU(fast_mode=True)  # Native GPU tensor ops
cpu.load_binary(arm64_binary)

スループットを最大化するには、 kernels/ ディレクトリには、GPU 上で ARM64 フェッチ、デコード、実行ループ全体を実行するネイティブ Metal GPU 実装が含まれています。 CPU-GPU同期ゼロ:

  • MLXメタル (kernels/mlx/): Apple MLX を介したカスタム Metal コンピューティング カーネルへの Python インターフェイス。完全な ARM64 デコードとメタル シェーディング言語での実行。
  • 錆びた金属 (kernels/rust_metal/): ダイレクトメタル API 経由 objc2-metal PyO3 Python バインディングを使用します。 GPU 側のシステムコール処理、基本ブロック キャッシュ、ニューラル ディスパッチ、およびアウトオブオーダー実行が含まれます。ネイティブの DOOM ベンチマークが同梱されています。

テキストアセンブリ (ncpu.model)

命令 形式 説明
MOV MOV Rd, imm/Rs 即時ロードまたはレジスタのコピー
ADD ADD Rd, Rs1, Rs2 ニューラル加算
SUB SUB Rd, Rs1, Rs2 神経サブトラクション
MUL MUL Rd, Rs1, Rs2 神経増殖
DIV DIV Rd, Rs1, Rs2 神経分裂(復元アルゴリズム)
AND AND Rd, Rs1, Rs2 ニューラルのビットごとの AND
OR OR Rd, Rs1, Rs2 ニューラルのビットごとの OR
XOR XOR Rd, Rs1, Rs2 ニューラルのビットごとの XOR
SHL SHL Rd, Rs, imm/Rn ニューラルシフト左
SHR SHR Rd, Rs, imm/Rn ニューラルシフト右
INC INC Rd ニューラルインクリメント
DEC DEC Rd 神経衰弱
CMP CMP Rs1, Rs2 ニューラル比較 (フラグを設定)
JMP JMP label 無条件ジャンプ
JZ/JNZ JZ/JNZ label ゼロ/ゼロでない場合にジャンプ
JS/JNS JS/JNS label 負の場合/負でない場合にジャンプ
HALT HALT 実行の停止

ARM64 バイナリ (ncpu.neural)

完全な ARM64 命令セット – 実際のバイナリ エンコーディング。 NeuralCPU は、GPU 常駐状態で実際の ARM64 命令をデコードして実行します。

nCPU/
├── ncpu/
│   ├── neural/           # Full GPU neural CPU (ARM64, 12K lines)
│   │   ├── cpu.py        # NeuralCPU — all state on GPU as tensors
│   │   └── neural_alu_bridge.py  # Routes ops through trained models
│   ├── model/            # Model-based CPU (text assembly)
│   │   ├── cpu.py        # CPU orchestrator
│   │   ├── neural_ops.py # Loads and runs .pt models
│   │   └── architectures.py  # All model class definitions
│   └── tensor/           # Tensor-based ARM64 kernel
├── kernels/
│   ├── mlx/              # MLX Metal compute kernels (Python + Metal Shading Language)
│   └── rust_metal/       # Rust Metal GPU kernel (objc2-metal + PyO3 bindings)
│       └── src/          # Full ARM64 execute loop in Metal, zero GPU-CPU sync
├── models/               # 23 trained .pt models
│   ├── alu/              # arithmetic, carry_combine, multiply, divide, logical, compare
│   ├── shifts/           # lsl, lsr, asr, rol
│   ├── math/             # sincos, sqrt, exp, log, atan2, doom_trig
│   ├── decode_llm/       # Qwen2.5 LoRA adapter
│   └── MODEL_INDEX.md    # Complete model status
├── demos/                # DOOM raycaster and other demos
├── programs/             # Assembly programs (.asm)
├── tests/                # 347 tests
├── docs/                 # Architecture docs (neural mode + tensor mode)
├── benchmarks/           # Performance benchmarks
├── paper/                # Research paper
└── main.py               # CLI entry point

実行する DDA レイキャスター 訓練されたニューラルネットワークによるすべての算術。すべての ADD、SUB、MUL、および CMP は、実際の .pt モデル。

# Neural mode — every op through trained models (~2.5 FPS)
python demos/doom_raycaster.py

# Fast mode — native Python arithmetic (~5,000 FPS)
python demos/doom_raycaster.py --fast

# Side-by-side comparison (verifies identical output)
python demos/doom_raycaster.py --both

固定小数点演算 (スケール 1024) は、すべてを 32 ビット整数に保持し、nCPU の整数専用 ISA に一致します。どちらのモードも同一のアルゴリズムを実行し、同一のフレーム出力を生成します。唯一の違いは、算術ルーティングがニューラル ネットワークを経由するかどうかです。

pytest tests/ -v
# 347 tests: decode, programs, registry, state, neural ops (incl. CLA + batch),
#            neural bridge, math ops, architecture forward-pass, division

#robertcpricenCPU #nCPU #整理されたワークロードツールドキュメントを備えたモデルネイティブおよびテンソル最適化された #CPU #研究ランタイム #GitHub

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。