Welvet examples
71. runtime/dispatch — Op switchboard
When: walking a grid / Parallel / Sequential and you only have any cells.
Where: github.com/openfluke/welvet/runtime/dispatch
Why: one Forward/Backward/Pack/SetDType/ApplyGrad path for every Welvet Op; unknown types hard-error (never silently pretend they are Dense).
Do not import dispatch from layers/parallel (import cycle) — Parallel dispatches branches itself.
cd 71-dispatch && source ../env.sh && go run .
main.go
Download source ↓package main
import (
"fmt"
"strings"
"github.com/openfluke/welvet/core"
"github.com/openfluke/welvet/layers/cnn2"
"github.com/openfluke/welvet/layers/dense"
"github.com/openfluke/welvet/runtime/dispatch"
)
func main() {
// When: you hold an `any` Op (grid cell, Parallel branch, Sequential child)
// Where: runtime/dispatch — single switch for Forward/Backward/Pack/ApplyGrad
// Why: no silent Dense fallback; unknown Ops hard-error
d, err := dense.New(4, 4, core.ActivationReLU, core.DTypeFloat32)
must(err)
x := core.NewTensor[float32](1, 4)
for i := range x.Data {
x.Data[i] = 0.25
}
pre, post, err := dispatch.Forward(d, x)
must(err)
gIn, gW, err := dispatch.Backward(d, post, x, pre)
must(err)
must(dispatch.ApplyGradSGD(d, gW, 1e-2))
fmt.Println("dispatch dense", post.Shape, "gIn", len(gIn.Data), "gW", len(gW.Data))
c, err := cnn2.New(cnn2.Config{InChannels: 1, Filters: 2, Height: 4, Width: 4, Kernel: 3})
must(err)
img := core.NewTensor[float32](1, 1, 4, 4)
_, y, err := dispatch.Forward(c, img)
must(err)
fmt.Println("dispatch cnn2", y.Shape)
_, _, err = dispatch.Forward("not-an-op", x)
if err == nil || !strings.Contains(err.Error(), "unsupported Op") {
panic(fmt.Sprintf("want unsupported Op error, got %v", err))
}
fmt.Println("dispatch rejects unknown:", err)
}
func must(err error) {
if err != nil {
panic(err)
}
}