Expand description
The Plasticine report — P4 of the Plasticine lane: the artifact an RDU engineer reads, generated from the model so no number in it is typed by hand.
One row per (workload, target): PCU/PMU used vs total, FU utilization, the initiation interval of every metapipeline stage with the critical stage flagged, the pipeline II, N-buffer depths and PMU counts, hop counts and static-routing occupancy against the Spade link budget, iterations, fill + steady-state cycles, the DRAM roofline (bytes moved, channel bandwidth, the bound), throughput at the II, and for GEMM GFLOPS and % of the published fp32 peak. A counted-loop row also carries its VM anchor (the VM’s answer == the fabric’s == the cycle-timed pipelined run at the modeled II, hazards one cycle below) and, for an ALU-only body, the re-checkable SAT certificate of its routed datapath.
Provenance is modeled on every row: the numbers are the paper-parameterized descriptors’ (PlasticineTarget)
under Spatial’s II definition (super::metapipeline), the PMU banking model (super::pmu) and the
checkerboard placer (super::plasticine_place). Nothing here ran on a Plasticine simulator or silicon;
a Tungsten run lands beside these rows under its own provenance (P5).
benchmarks/silicon/plasticine_report.json is written ONLY by the private place-and-route engine’s report
emitter (emit_plasticine_report), which installs the engine’s certified negotiated router before placing
anything, and pinned byte-equal by plasticine_report_lock.
Structs§
- Buffer
Row - Certificate
Row - Channel
Row - One channel’s control plane: the credit solve beside Spatial’s N-buffer rule, and which one binds.
- Control
Row - The control plane as a whole: two nets per channel, budgeted on the scalar network.
- GemmRow
- Operand
Row - One operand of a GEMM and how the compiler decided to feed the unrolled instances.
- Plasticine
Artifact - The placed, certified artifact of one counted loop on a Plasticine target — what
largo emit plasticinewrites andcrate::compile::compile_to_plasticinereturns. - Stage
Row - VmAnchor
- Workload
- Workload
Row - One (workload, target) row of the report.
Enums§
- Workload
Kind - What a workload is.
Constants§
- CALIBRATION_
PATH - The calibration file joining each toolchain row with our MODELED counterpart (generated with the report).
- CALIBRATION_
TOLERANCE_ PCT - The per-cent difference the calibration lock allows between modeled and simulated cycles.
- CERTIFICATE_
WIDTH - The bit width the routed-datapath certificate is proven at (the bounded fragment).
- PROVENANCE_
MODELED - The provenance every row carries: a paper-parameterized model, never a simulation or silicon.
- PROVENANCE_
SIMULATED - The provenance of a toolchain-simulated row.
- REPORT_
PATH - Where the generated report lives (repo-relative).
- TOOLCHAIN_
LEDGER_ PATH - The public toolchain’s ledger (written only by
scripts/accel/plasticine-gate-ledger.py): Tungsten simulations. - UNMODELED_
KINDS - The kinds of toolchain row the model has no counterpart for, each with the reason — listed in the calibration as uncalibrated, never dropped and never joined with a model that does not describe them.
Functions§
- blackscholes_
query - The option price of Spatial’s
BlackScholesregression app (pir/regression/BlackScholes.scala,BlkSchlsEqEuroNoDiv, with the Taylor approximations ofspatial.lang.api.MathAPIitsCNDFand the pricing call), transcribed: over the columnsprices,strikes,rates,vols,times(Real) andtypes(Int), read in that order. Spatial’s-xis LOGOS’s0 - x. - calibration
- The calibration document: every toolchain row on a mesh we model, joined with the model, and every row of a kind the model does not describe, or whose routed run did not finish clean, listed as uncalibrated with the reason.
- calibration_
row - One toolchain row joined with our model: the same app shape, tile (
ts) and a single instance (its loop pars are 1), on the same mesh — modeled cycles vs Tungsten’s, the per-cent difference, and the unit counts side by side (PIR’s PCU count includes the control/address units its partitioner splits off; our row counts compute PCUs and perimeter address-generator stages separately — printed, not conflated). A dot product is the1 × 1 × NGEMM: itststhe K-chunk, itsipthe reduce’s lanes, and itsop(how many tiles are reduced at once) the GEMM’sloop_kk. Rows ofkind: "dot"are modeled as that GEMM. - canonical_
targets - The two published configurations.
- canonical_
workloads - The canonical workloads: the metapipeline corpus, the MoE argmax round, a dot product, and the two GEMM shapes the Tenstorrent ledger measures.
- counted_
loop_ fabric - The counted-loop shape the single-stage metapipeline model takes — the FIRST gate of
lower_counted_loop, on its own so a lane can ask the question without placing:fn_nameofsourceas aLoopFabric(a numericRepeat for i from lo to hiover scalar carried state), or the typed reason it is not one. - gda_
query - The covariance step of Spatial’s
GDAregression app (pir/regression/GDA.scala), transcribed: over the arraysy(at the row),x(row-major),mu1andmu0(at the column), read in that order, the row termx(rr, cc) - mux(y(rr) == 1, mu1(cc), mu0(cc)), each row’s outer product with itself summed intosigma. - gemm_
metapipeline - The per-tile GEMM metapipeline on
t: load (perimeter AGs: A row-panel + B column-panel, DRAM → PMU) → mac-reduce (a PCU:lanes-wide multiply, thelog2(lanes)+1-stage reduction tree, the accumulator fused into its last stage — ISCA’17 §3.1) → store (AG: the C tile). Returns the metapipeline, the words on each edge ([A+B panel, C tile]) and the AG-hosted stage indices. - gemm_
row - The GEMM row: the tile (or the PMU-fitting default), the unroll (or the widest that fits AND routes
statically;
par_capacityrecords the capacity bound), the placement, and the roofline — compute cycles at the pipeline II vs the DRAM channel bandwidth over the bytes the tiling moves (B column-panels once, A re-streamed per column panel, C once). A GEMM row with mesh replication only — the intra-tile loops run one pass each. - gemm_
row_ unrolled intrais the product of the unrolls INSIDE one tile’s chunk (the emitted nest’s row and column loops) andkkthe reduction chunks run side by side (loop_kk, a dot product’sop): both divide the work per tile, wherepardivides the number of column panels — different axes, and the model needs each to reproduce an unrolled program.k_tileis the reduction chunk the operands stream in (Spatial’stsalong K;Nonestreams a tile’s panels whole).- gemm_
tile_ for - The largest square tile (a multiple of 8, at least 1) whose double-buffered A row-panel + B column-panel
(
2 · tile · kwords) fits ONE PMU ont. - kmeans_
distance_ query - The distance a feature adds in Spatial’s
Kmeansregression app (pir/regression/Kmeans.scala), transcribed:(pts(pt,d) - cts(ct,d)) ** 2over the point’s feature and the centroid’s, read in that order. - logos_
blackscholes_ program - Black-Scholes in LOGOS over
noptions, as Spatial’s BlackScholes app prices them — its Taylor approximations written as LOGOS functions, the six columns declared in the app’s order and filled with residues (typesp % 2, the prices, strikes, rates, volatilities and times scaled into ranges the approximations are taken over), every option priced by one counted loop. It showsΣ (t + 1)·out[t], a checksum a permuted or partial result does not reproduce. - logos_
dot_ program - A canonical LOGOS dot product
Σ_{t<n} a[t]·b[t]as the counted loop the tensor recognizer reads. - logos_
gda_ program - Gaussian discriminant analysis’s covariance in LOGOS over
rowssamples ofcolsfeatures — the data filled as Spatial’s GDA app fills it (xrow-majori % 256,yi % 256, both meansi % 2), each row centred on the mean its label picks and added tosigmaas a rank-1 update. It showsΣ (t + 1)·sigma[t], a checksum a transposed or partial covariance does not reproduce. - logos_
gemm_ program - A canonical LOGOS matmul
C[m×n] = A[m×k] · B[k×n]as the triple loop the tensor recognizer reads (the same program the Tenstorrent lane lowers). - logos_
kmeans_ program - K-means clustering in LOGOS — Lloyd’s algorithm as Spatial’s Kmeans app runs it:
npoints offfeatures (row-major, filledq % 97over the flat index),kcentroids starting as the firstkpoints,itersepochs each assigning every point to its nearest centroid by the squared distance (the last of equally near ones, as the app’s accelerator), summing and counting each centroid’s points, and setting every centroid to the integer mean of its points (0 for one with none). It showsΣ (t + 1)·centroids[t], a checksum a permuted or partial result does not reproduce. - logos_
outer_ program - A canonical LOGOS outer product
c[i·cols + j] = a[i]·b[j](rows × cols) as the nest the tensor recognizer reads; it showsΣ (t + 1)·c[t], a checksum a transposed store does not reproduce. - logos_
tpchq6_ program - TPC-H Q6 in LOGOS over
nrecords — the four columns filled as Spatial’s TPCHQ6 app fills them (i % 256) and the revenue summed under the query’s predicate. - lower_
blackscholes_ source - A LOGOS Black-Scholes — the zip map whose term is
blackscholes_query— emitted as Spatial’s BlackScholes regression app at the knobsp, with the variant’s PIR arguments (pir_args, what itspirArgsoverride appends):(n, class name, Spatial source), or a typed reason. The columns are loaded in the order the program declares them, as the app loads its own. The class name carries the length and every knob in Spatial’s parameter order. - lower_
counted_ loop - Lower the counted loop
fn_nameofsourceontot: one metapipeline stage under the ideal pipelined PCU model, placed on the checkerboard, VM-anchored atparams, certified when its body is ALU-only, with Spatial source — or a typed reason it cannot be. - lower_
dot_ source - A LOGOS dot product, recognized (
tensor_recognize::recognize_dot) and emitted as Spatial’s DotProduct regression app at the knobsp:(n, class name, Spatial source), or a typed reason (not a dot product; a tile that does not divide the length; a sum the app’s 32-bitIntwould wrap). - lower_
gda_ source - A LOGOS GDA covariance — the scatter accumulation whose row term and reading axes are
gda_query— emitted as Spatial’s GDA regression app at the knobsp:(rows, cols, class name, Spatial source), or a typed reason. The class name carries the shape and every knob in Spatial’s parameter order. - lower_
gemm_ source - A LOGOS matmul, recognized (
tensor_recognize::recognize_matmul) and emitted as Spatial’s GEMM regression app with tilests/itsand anip-lane reduce:(m, n, k, class name, Spatial source), or a typed reason (not a matmul; tiles that do not divide the shape). - lower_
kmeans_ source - A LOGOS k-means clustering — whose distance is
kmeans_distance_query— emitted as Spatial’s Kmeans regression app at the knobsp:(n, k, features + 1, epochs, class name, Spatial source)(the app’sN,K,Dand runtimeI), or a typed reason. The class name carries the shape, the epochs and every knob in Spatial’s parameter order. - lower_
outer_ source - A LOGOS outer product, recognized (
tensor_recognize::recognize_outer) and emitted as Spatial’s OuterProduct regression app at the knobsp:(m, n, class name, Spatial source), or a typed reason. The class name carries the shape and every knob in Spatial’s parameter order (ts1 x ts2,ip x ip1 x ip2,op1 x op2). - lower_
tpchq6_ source - A LOGOS TPC-H Q6 — the zip sum whose term is
tpchq6_query— emitted as Spatial’s TPCHQ6 regression app at the knobsp:(n, class name, Spatial source), or a typed reason. - not_
modeled - What the model does NOT cover yet, named with the reason — the honest boundary printed in the report.
- plasticine_
report - The whole report as JSON — deterministic in the workloads’ and targets’ order. Every workload must lower (a canonical workload the model cannot take is a bug, not a silent omission).
- render_
report - Pretty JSON with a trailing newline — the exact bytes of
REPORT_PATH. - routed_
failure - Why
rowhas no modeled counterpart, if its kind is one the model does not describe. Why a toolchain row’s routed (hybrid) simulation is no calibration point: what it came to when it did not finish clean (the recorder’swhy: deadlocked, threw, failed its gold check). The model is calibrated against routed cycles, and a routed run that did not finish has none to compare. - target_
for_ mesh - The descriptor a toolchain row’s
rows × colsmesh calibrates against: the 20x20 mesh is PIR’s default in front of Tungsten’s DDR4 memory (PlasticineTarget::tungsten_20x20_ddr4, the system the chain simulates); the 16x8 mesh is the ISCA’17 preset. - tpchq6_
query - The query of Spatial’s
TPCHQ6regression app (pir/regression/TPCHQ6.scala), transcribed: over the columnsdates,discts,quants,prices(read in that order), the revenue termdate > MIN_DATE && date < MAX_DATE && disct >= MIN_DISC && disct <= MAX_DISC && quant < 24 ? price·disct : 0with itsMIN_DATE = 0,MAX_DATE = 9999,MIN_DISC = 0,MAX_DISC = 9999. - unmodeled
- workload_
row - The row for any workload on
t.