Richland Technology
Richland Technology
← Back to Blog
llmopen-sourceagentsresearchcompilers

Qwenputer compiles a 32-bit RISC-V CPU into Qwen3.5-4B's weights — the forward pass becomes byte-exact RAM

Not a fine-tune: a compiler hand-places ~1M weights so the model's Gated DeltaNet state acts as addressable memory. NUPA arithmetic goes 48.6% → 100% by construction — but every number is author-reported, and no independent reproduction exists yet.

Richland AI Desk·28 October 2026·6 min read
Qwenputer compiles a 32-bit RISC-V CPU into Qwen3.5-4B's weights — the forward pass becomes byte-exact RAM

Qwenputer, released this week by developer Divyansh Agrawal, puts a real 32-bit RISC-V core inside Qwen3.5-4B — not an emulator the model was fine-tuned to imitate, but a processor whose weights a compiler computes directly. No weights are trained. The model's Gated DeltaNet recurrent state becomes byte-exact RAM, and executing a program means generating trace tokens, one write to memory at a time.

What shipped

The checkpoint is stock Qwen3.5-4B with 11 compiler-generated "chip" layers inserted in front of the model's original 32, hidden size widened from 2560 to 3968 (per the design doc). The class stays Qwen3_5ForCausalLM; it is a config-only change, and Qwen's own weights are untouched. Agrawal frames the build as a circuit description: "the compiler turns each step into a piece of a transformer layer" (write-up).

It is a complete instruction set, not a toy. The model card claims the full RV32IM set plus the Zba extension and a small bignum coprocessor; the design doc details the custom-0/custom-1 instructions (BMAC, BMSB, BLD, BSCAN, BGET, BPRD) that drive eight 128-digit decimal registers. Memory maps to 32 KB RAM at 0x0, 128 KB read-only data at 0x20000, and 256 KB code at 0x40000; the program counter, registers, and call stack live in dedicated DeltaNet heads (rv32.md).

The trick that makes it exact is how the recurrent state is addressed. Gated DeltaNet writes a row only when the gate and write strength are both 1, so with the gate at α=1, the write strength at β=1, and a one-hot key, each generated token overwrites exactly one row of a head's state — that is RAM, byte-addressable and non-destructive to everything else. The repo README spells out the token contract: an ADDR token names the row, the VAL token that follows carries the value, and STEP ends the instruction. "Each generated trace token is one write to the computer's memory."

Gated DeltaNet state used as RAM: a one-hot key overwrites one row and a one-hot query reads it back; the CPU keeps its registers, memory and program counter in those rows

Author-reported verification is strong but single-source. The write-up and model card claim the core "passes the official riscv-tests" and "its programs match qemu", that it has "run 18 million instructions free-running without a single error", and that replaying roughly 230,000 output positions against a reference machine produced zero mismatches, with 0 lock errors and 0 head mismatches in every run. The project's bridge.Session harness checks every trace token in lockstep against a reference machine (README, docs). The compiler, the checkpoint, and the harness are all public, so the result is rerunnable — yet no independent reproduction has been published.

Arithmetic accuracy jumps to tool level. On the DeepMind arithmetic sets, base Qwen3.5-4B scores 55.0 on mul_big; Qwenputer scores 97.5, and base Qwen handed a Python tool scores 100.0. On synthetic integer arithmetic, both Qwenputer and the Python-tool variant hit 97.5 versus the base's 75.0. On the NUPA arithmetic benchmark, the author reports Qwenputer going "from 48.6% to 100%", matching what giving Qwen a Python tool achieves (write-up). Text fidelity barely moves: mean KL of 6e-4 against base Qwen versus a 5e-4 noise floor, and greedy text identical on 10 of 16 prompts.

Accuracy of base Qwen3.5-4B, Qwenputer and base Qwen with a Python tool on the NUPA and DeepMind arithmetic sets

There is also an experimental filesystem variant that adds put/append/get/list/delete across 1,024 hash slots holding about 512 files (~53,000 tokens). Multi-session recall rises from 7.8 to 83.3 (a host Python-memory tool gets 78.9) and changed-fact tracking from 3.3 to 90.0 (tool: 83.3) per the repo. Agrawal's earlier, smaller version compiled a CHIP-8 machine into the same model line.

The release is Apache-2.0 and runs on a single 24 GB GPU. The checkpoint is 18.8 GB in bf16 (model card) — about 9B parameters, "mostly... zero padding" — and the computer itself accounts for roughly 1,040,595 nonzero weights (docs). The vocabulary grows by 230,324 trace tokens to 478,656.

Why it matters

The interesting claim is architectural, not a benchmark number. In the standard agent recipe the model calls out to an interpreter or a sandbox; here the tool is the model's own forward pass. The "tool call" is orchestration over trace tokens, and the runtime is the recurrence itself. ainaews' write-up flags exactly the open question that decides how important this is: how much of the execution is really done by the model's weights versus by surrounding executor machinery. What is unambiguous is the mechanism — one-hot-addressed Gated DeltaNet state as byte-exact memory — a new way to give a recurrent model a persistent, inspectable, byte-addressable scratch space.

For people building stateful agents, the filesystem variant is the most immediately suggestive result: memory that survives sessions and is addressable by the model itself, without vector indexes. The author also argues in the write-up that RNN-hidden computation of this kind sidesteps chain-of-thought monitoring — a claim security teams will want to scrutinize rather than dismiss.

Caveats

The arithmetic gains are by construction — the model now delegates to an exact processor embedded in its own weights, so higher accuracy is not evidence the model got better at math (mlllm.io). The checkpoint is ~9B parameters despite the 4B branding. Every correctness and performance number is author-reported; mlllm.io notes there are no independent third-party reproductions, and riscv-tests is not a complete verification standard (Startup Fortune).

It is also slow and not drop-in. Each instruction costs a few generated tokens (4.1 on average for DIV), a full calc call runs 1.3k–3k chip tokens (~0.5–1 s), and the median mul_div problem takes 585 s on the plain HF path or 242 s with the Triton executor (~3,200 trace tokens/s on an L4, per the README). It does not run with a plain generate() call yet — it needs the RvChat driver. The tool-call capture window is 80 tokens, and batched decode is not bit-identical to batch-1 generation because Qwen's GEMMs round differently at batch size 1 versus B (design doc). Nobody is going to replace a CPU with this.

The open question is whether "runtime inside the weights" becomes useful as a niche — exact arithmetic, auditable persistent memory, or a reasoning scheme that lives outside the monitored text — or stays a demo. The open checkpoint and harness mean the field can decide by rerunning, not by trusting the README.

Sources

Start a Conversation

Ready to build something like this?

Tell us about your project and we'll respond with a clear plan within one business day.

Tell Us About Your Project

Takes 3 minutes. We read every submission personally.