| { |
| "op": "ai.onnx.ConvTranspose", |
| "tunableSpace": { "WORKGROUP_SIZE": [64, 128, 256] }, |
| "cases": [ |
| { |
| "name": "conv-transpose-f32-b1c16m16-16x16-k3s2", |
| "preset": "smoke", |
| "vars": { |
| "batch": 1, |
| "inChannels": 16, |
| "outChannels": 16, |
| "inH": 16, |
| "inW": 16, |
| "kernelH": 3, |
| "kernelW": 3, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1 |
| }, |
| "attrs": { "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 16, 16, 16], "dtype": "float32", "dist": "normal", "seed": 114, "scale": 0.2 }, |
| "w": { "shape": [16, 16, 3, 3], "dtype": "float32", "dist": "normal", "seed": 115, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 16, 31, 31], "dtype": "float32" } }, |
| "bench": { |
| "primary": true, |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-non-vector-bias-b1c3m5-32x32-k3s2", |
| "preset": "edge", |
| "vars": { |
| "batch": 1, |
| "inChannels": 3, |
| "outChannels": 5, |
| "inH": 32, |
| "inW": 32, |
| "kernelH": 3, |
| "kernelW": 3, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1 |
| }, |
| "attrs": { "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 3, 32, 32], "dtype": "float32", "dist": "normal", "seed": 116, "scale": 0.2 }, |
| "w": { "shape": [3, 5, 3, 3], "dtype": "float32", "dist": "normal", "seed": 117, "scale": 0.1 }, |
| "bias": { "shape": [5], "dtype": "float32", "dist": "normal", "seed": 118, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 5, 63, 63], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f16-b1c64m64-32x32-k3s2", |
| "preset": "smoke", |
| "vars": { |
| "batch": 1, |
| "inChannels": 64, |
| "outChannels": 64, |
| "inH": 32, |
| "inW": 32, |
| "kernelH": 3, |
| "kernelW": 3, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1 |
| }, |
| "attrs": { "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 64, 32, 32], "dtype": "float16", "dist": "normal", "seed": 211, "scale": 0.2 }, |
| "w": { "shape": [64, 64, 3, 3], "dtype": "float16", "dist": "normal", "seed": 212, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 64, 63, 63], "dtype": "float16" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-b1c64m64-32x32-k3s2", |
| "preset": "smoke", |
| "vars": { |
| "batch": 1, |
| "inChannels": 64, |
| "outChannels": 64, |
| "inH": 32, |
| "inW": 32, |
| "kernelH": 3, |
| "kernelW": 3, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1 |
| }, |
| "attrs": { "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 64, 32, 32], "dtype": "float32", "dist": "normal", "seed": 211, "scale": 0.2 }, |
| "w": { "shape": [64, 64, 3, 3], "dtype": "float32", "dist": "normal", "seed": 212, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 64, 63, 63], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f16-large-upsampler-b1c128m128-64x64-k4s2", |
| "preset": "smoke", |
| "vars": { |
| "batch": 1, |
| "inChannels": 128, |
| "outChannels": 128, |
| "inH": 64, |
| "inW": 64, |
| "kernelH": 4, |
| "kernelW": 4, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1 |
| }, |
| "attrs": { "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 128, 64, 64], "dtype": "float16", "dist": "normal", "seed": 213, "scale": 0.2 }, |
| "w": { "shape": [128, 128, 4, 4], "dtype": "float16", "dist": "normal", "seed": 214, "scale": 0.05 } |
| }, |
| "outputs": { "y": { "shape": [1, 128, 128, 128], "dtype": "float16" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-depthwise-g64-32x32-k4s2", |
| "preset": "smoke", |
| "vars": { |
| "batch": 1, |
| "inChannels": 64, |
| "outChannels": 64, |
| "inChannelsPerGroup": 1, |
| "inH": 32, |
| "inW": 32, |
| "kernelH": 4, |
| "kernelW": 4, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1, |
| "group": 64 |
| }, |
| "attrs": { "group": 64, "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 64, 32, 32], "dtype": "float32", "dist": "normal", "seed": 215, "scale": 0.2 }, |
| "w": { "shape": [64, 1, 4, 4], "dtype": "float32", "dist": "normal", "seed": 216, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 64, 64, 64], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannelsPerGroup * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-depthwise-pointwise-g64-512x512-dispatch-fold", |
| "preset": "edge", |
| "provenance": { |
| "notes": "Realistic depthwise pointwise projection at 16,777,216 outputs. Exercises the two-dimensional dispatch fold while exposing scalar coordinate/division overhead in the generic grouped kernel." |
| }, |
| "vars": { "count": 16777216 }, |
| "attrs": { "group": 64 }, |
| "inputs": { |
| "x": { "shape": [1, 64, 512, 512], "dtype": "float32", "dist": "normal", "seed": 221, "scale": 0.2 }, |
| "w": { "shape": [64, 1, 1, 1], "dtype": "float32", "dist": "normal", "seed": 222, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 64, 512, 512], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "(2 * args.count + 64) * 4" }] } |
| }, |
| { |
| "name": "conv-transpose-f32-1d-b1c128m128-256-k4s2", |
| "preset": "smoke", |
| "vars": { "batch": 1, "inChannels": 128, "outChannels": 128, "inW": 256, "kernelW": 4, "strideW": 2, "padW": 1 }, |
| "attrs": { "strides": [2], "pads": [1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 128, 256], "dtype": "float32", "dist": "normal", "seed": 217, "scale": 0.2 }, |
| "w": { "shape": [128, 128, 4], "dtype": "float32", "dist": "normal", "seed": 218, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 128, 512], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { "type": "gflops", "value": "2 * args.batch * args.outChannels * args.inW * args.inChannels * args.kernelW" } |
| ] |
| } |
| }, |
| { |
| "name": "neural-audio-1d-f32-b1c256m256-w1024-k4s2-pathology", |
| "preset": "stress", |
| "provenance": { |
| "source": "authored for performance coverage", |
| "notes": "Realistic neural-audio upsampling stage for the direct NCW fallback. Every output sample serially scans 256 input channels and four kernel taps." |
| }, |
| "vars": { "batch": 1, "inChannels": 256, "outChannels": 256, "inW": 1024, "kernelW": 4, "strideW": 2, "padW": 1 }, |
| "attrs": { "strides": [2], "pads": [1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 256, 1024], "dtype": "float32", "dist": "normal", "seed": 219, "scale": 0.2 }, |
| "w": { "shape": [256, 256, 4], "dtype": "float32", "dist": "normal", "seed": 220, "scale": 0.05 } |
| }, |
| "outputs": { "y": { "shape": [1, 256, 2048], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { "type": "gflops", "value": "2 * args.batch * args.outChannels * args.inW * args.inChannels * args.kernelW" } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-3d-naive-b1c16m16-16x16x16-k3", |
| "preset": "stress", |
| "vars": { |
| "batch": 1, |
| "inChannels": 16, |
| "outChannels": 16, |
| "inD": 16, |
| "inH": 16, |
| "inW": 16, |
| "kernelD": 3, |
| "kernelH": 3, |
| "kernelW": 3 |
| }, |
| "attrs": {}, |
| "inputs": { |
| "x": { "shape": [1, 16, 16, 16, 16], "dtype": "float32", "dist": "normal", "seed": 331, "scale": 0.2 }, |
| "w": { "shape": [16, 16, 3, 3, 3], "dtype": "float32", "dist": "normal", "seed": 332, "scale": 0.05 } |
| }, |
| "outputs": { "y": { "shape": [1, 16, 18, 18, 18], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inD * args.inH * args.inW * args.inChannels * args.kernelD * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "medical-decoder-3d-f32-b1c32m32-32x32x32-k3-pathology", |
| "preset": "stress", |
| "provenance": { |
| "source": "authored for performance coverage", |
| "notes": "Realistic 3D decoder stage for the direct NCDHW fallback. Each output voxel serially scans all 32 input channels and the 3x3x3 kernel." |
| }, |
| "vars": { |
| "batch": 1, |
| "inChannels": 32, |
| "outChannels": 32, |
| "inD": 32, |
| "inH": 32, |
| "inW": 32, |
| "kernelD": 3, |
| "kernelH": 3, |
| "kernelW": 3 |
| }, |
| "attrs": { "pads": [1, 1, 1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 32, 32, 32, 32], "dtype": "float32", "dist": "normal", "seed": 333, "scale": 0.2 }, |
| "w": { "shape": [32, 32, 3, 3, 3], "dtype": "float32", "dist": "normal", "seed": 334, "scale": 0.05 } |
| }, |
| "outputs": { "y": { "shape": [1, 32, 32, 32, 32], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inD * args.inH * args.inW * args.inChannels * args.kernelD * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-grouped-naive-g4-c32m64-48x48-k4s2", |
| "preset": "stress", |
| "vars": { |
| "batch": 1, |
| "inChannels": 32, |
| "outChannels": 64, |
| "inChannelsPerGroup": 8, |
| "inH": 48, |
| "inW": 48, |
| "kernelH": 4, |
| "kernelW": 4, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1, |
| "group": 4 |
| }, |
| "attrs": { "group": 4, "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 32, 48, 48], "dtype": "float32", "dist": "normal", "seed": 341, "scale": 0.2 }, |
| "w": { "shape": [32, 16, 4, 4], "dtype": "float32", "dist": "normal", "seed": 342, "scale": 0.05 } |
| }, |
| "outputs": { "y": { "shape": [1, 64, 96, 96], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannelsPerGroup * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "grouped-bias-g4-c32m64-48x48-k4s2-generic-pathology", |
| "preset": "stress", |
| "provenance": { |
| "source": "authored for variant coverage", |
| "notes": "Adding channel bias excludes nchw2d_grouped_stride_phase and selects nchw2d_grouped_bias; the paired no-bias case isolates this optional-input route boundary." |
| }, |
| "vars": { |
| "batch": 1, |
| "inChannels": 32, |
| "outChannels": 64, |
| "inChannelsPerGroup": 8, |
| "inH": 48, |
| "inW": 48, |
| "kernelH": 4, |
| "kernelW": 4, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 1, |
| "padW": 1, |
| "group": 4 |
| }, |
| "attrs": { "group": 4, "strides": [2, 2], "pads": [1, 1, 1, 1] }, |
| "inputs": { |
| "x": { "shape": [1, 32, 48, 48], "dtype": "float32", "dist": "normal", "seed": 5104, "scale": 0.2 }, |
| "w": { "shape": [32, 16, 4, 4], "dtype": "float32", "dist": "normal", "seed": 5105, "scale": 0.05 }, |
| "bias": { "shape": [64], "dtype": "float32", "dist": "normal", "seed": 5106, "scale": 0.05 } |
| }, |
| "outputs": { "y": { "shape": [1, 64, 96, 96], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannelsPerGroup * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-dpt-reassemble-48ch-37x49-k4s4", |
| "preset": "all", |
| "provenance": { |
| "source": "Depth Anything V2 Small neck reassemble", |
| "notes": "Depth Anything V2 Small's factor-4 reassemble at 518x686. ConvTranspose contracts the projected neck width (48), not the backbone width." |
| }, |
| "vars": { |
| "batch": 1, |
| "inChannels": 48, |
| "outChannels": 48, |
| "inH": 37, |
| "inW": 49, |
| "kernelH": 4, |
| "kernelW": 4, |
| "strideH": 4, |
| "strideW": 4, |
| "padH": 0, |
| "padW": 0 |
| }, |
| "attrs": { "strides": [4, 4] }, |
| "inputs": { |
| "x": { "shape": [1, 48, 37, 49], "dtype": "float32", "dist": "normal", "seed": 9421, "scale": 0.2 }, |
| "w": { "shape": [48, 48, 4, 4], "dtype": "float32", "dist": "normal", "seed": 9422, "scale": 0.1 }, |
| "bias": { "shape": [48], "dtype": "float32", "dist": "normal", "seed": 9423, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 48, 148, 196], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| }, |
| { |
| "name": "conv-transpose-f32-dpt-reassemble-96ch-37x49-k2s2", |
| "preset": "all", |
| "provenance": { |
| "source": "Depth Anything V2 Small neck reassemble", |
| "notes": "The factor-2 reassemble of the same model, likewise contracting over the neck width (96). Four taps per output element, one of them real." |
| }, |
| "vars": { |
| "batch": 1, |
| "inChannels": 96, |
| "outChannels": 96, |
| "inH": 37, |
| "inW": 49, |
| "kernelH": 2, |
| "kernelW": 2, |
| "strideH": 2, |
| "strideW": 2, |
| "padH": 0, |
| "padW": 0 |
| }, |
| "attrs": { "strides": [2, 2] }, |
| "inputs": { |
| "x": { "shape": [1, 96, 37, 49], "dtype": "float32", "dist": "normal", "seed": 9431, "scale": 0.2 }, |
| "w": { "shape": [96, 96, 2, 2], "dtype": "float32", "dist": "normal", "seed": 9432, "scale": 0.1 }, |
| "bias": { "shape": [96], "dtype": "float32", "dist": "normal", "seed": 9433, "scale": 0.1 } |
| }, |
| "outputs": { "y": { "shape": [1, 96, 74, 98], "dtype": "float32" } }, |
| "bench": { |
| "metrics": [ |
| { |
| "type": "gflops", |
| "value": "2 * args.batch * args.outChannels * args.inH * args.inW * args.inChannels * args.kernelH * args.kernelW" |
| } |
| ] |
| } |
| } |
| ] |
| } |
|
|