ferrotherm workbench ← explainer · graph
Model the same JSON the API and the MCP tools take — a graph to sample, or a problem to solve
loading sampler…
State
energy
energy / node
magnetization
sweeps
0
node updates
0
device joules
0
Take this model to an agent

The box on the left is a request body. The same model runs three ways, and all three give the same answer for the same seed.


          

          

Or as a .ftp program, which carries the schedule and the coloring as well as the model. This is written here in the browser and parses unchanged on the CPU.


          

Install with cargo install ferrotherm-serve, then run ferrotherm-serve for the HTTP endpoint or point an MCP client at ferrotherm-mcp.

Run the same sweep on your GPU

The shader is emitted by the Rust crate and read out of the wasm module, so the arithmetic the GPU runs is the arithmetic the test suite pins. Nodes of one colour share no edge, so a whole colour class updates in one dispatch.

The check that matters is the first line of the output: the local field each GPU lane computed, against the field this crate computes on the CPU for the same state. On a 32×32 lattice that agreement is exact. The two final states still differ, and are supposed to — every lane draws from its own counter-based stream rather than one sequential one, so the backends agree in distribution, not byte for byte.

On throughput, expect the GPU to lose here. A thousand nodes is far too small: two dispatches per sweep carry a fixed cost that dominates the work. The crossover needs a much larger model, and quoting this figure as a GPU benchmark would be dishonest.

not run
Check the sampler against exact enumeration

For a model small enough to enumerate, every state's Boltzmann weight can be computed directly and compared against what the sampler actually produced. Judge the result against the noise floor printed with it, not against zero.

not run