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.int64GPU上) - メモリ: フラットバイトアドレス指定可能 (
torch.uint8GPU上) - フラグ: 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-metalPyO3 Python バインディングを使用します。 GPU 側のシステムコール処理、基本ブロック キャッシュ、ニューラル ディスパッチ、およびアウトオブオーダー実行が含まれます。ネイティブの DOOM ベンチマークが同梱されています。
| 命令 | 形式 | 説明 |
|---|---|---|
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 命令セット – 実際のバイナリ エンコーディング。 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