| { |
| "op": "ai.onnx.GlobalAveragePool", |
| "cases": [ |
| { |
| "name": "nchw_1x2048x7x7", |
| "preset": "smoke", |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 2048, 7, 7] } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2048, 1, 1] } } |
| }, |
| { |
| "name": "nchw_16x512x64x64_wg_parallel", |
| "preset": "smoke", |
| "vars": { "batch": 16, "channels": 512, "spatial": 4096 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [16, 512, 64, 64], "dist": "normal", "seed": 201 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [16, 512, 1, 1], "dist": "empty" } }, |
| "bench": { |
| "primary": true, |
| "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] |
| } |
| }, |
| { |
| "name": "nchw_f16_8x256x32x32_wg_parallel", |
| "preset": "smoke", |
| "vars": { "dtype": "float16", "batch": 8, "channels": 256, "spatial": 1024 }, |
| "inputs": { "x": { "dtype": "float16", "shape": [8, 256, 32, 32], "dist": "normal", "seed": 203 } }, |
| "outputs": { "y": { "dtype": "float16", "shape": [8, 256, 1, 1], "dist": "empty" } }, |
| "bench": { |
| "metrics": [ |
| { "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * dtypeBytes(args.dtype)" } |
| ] |
| } |
| }, |
| { |
| "name": "nchw_1x2048x7x7_smallspatial_scalar", |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 2048, "spatial": 49 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 2048, 7, 7], "dist": "normal", "seed": 211 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2048, 1, 1], "dist": "empty" } }, |
| "bench": { |
| "primary": true, |
| "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] |
| } |
| }, |
| { |
| "name": "nchw_1x2048x8x8_spatial64_vec4_planeparallel", |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 2048, "spatial": 64 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 2048, 8, 8], "dist": "normal", "seed": 212 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2048, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_1x1024x65x65_planeparallel_scalar_unaligned", |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 1024, "spatial": 4225 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 1024, 65, 65], "dist": "normal", "seed": 213 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1024, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_1x1024x66x66_planeparallel_vec4_aligned", |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 1024, "spatial": 4356 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 1024, 66, 66], "dist": "normal", "seed": 214 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1024, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_1x8x256x256_lowoccupancy_8planes", |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 8, "spatial": 65536 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 8, 256, 256], "dist": "normal", "seed": 215 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 8, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "f32_inner63_below_subgroup_gate_1x2048x7x9", |
| "preset": "edge", |
| "vars": { "batch": 1, "channels": 2048, "spatial": 63 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 2048, 7, 9], "dist": "normal", "seed": 301 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 2048, 1, 1], "dist": "empty" } }, |
| "bench": { |
| "primary": true, |
| "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] |
| } |
| }, |
| { |
| "name": "nchw_1x1024x14x14_portable_gate_window", |
| "provenance": { |
| "notes": "Spatial 196 sits in the window the portable plane-parallel gate excludes (65 with subgroups, 1024 without), so a subgroupless device falls back to the serial kernel here." |
| }, |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 1024, "spatial": 196 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 1024, 14, 14], "dist": "normal", "seed": 216 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 1024, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_1x512x28x28_portable_gate_window", |
| "provenance": { "notes": "Spatial 784, the upper half of the same excluded window." }, |
| "preset": "smoke", |
| "vars": { "batch": 1, "channels": 512, "spatial": 784 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 512, 28, 28], "dist": "normal", "seed": 217 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 512, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_32x128x16x16_manyplanes_spatial256", |
| "preset": "smoke", |
| "provenance": { |
| "notes": "4096 planes of 256 elements: the serial kernel already has an invocation per plane, so this is the regime where the plane-parallel workgroup has the least to add. GlobalLpPool's same shape prefers the serial route." |
| }, |
| "vars": { "batch": 32, "channels": 128, "spatial": 256 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [32, 128, 16, 16], "dist": "normal", "seed": 218 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [32, 128, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_32x128x28x28_manyplanes_spatial784", |
| "preset": "smoke", |
| "provenance": { |
| "notes": "Separates the two candidate discriminators: 4096 planes (where the serial kernel is saturated) at 784 elements per plane (where the workgroup tree amortizes)." |
| }, |
| "vars": { "batch": 32, "channels": 128, "spatial": 784 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [32, 128, 28, 28], "dist": "normal", "seed": 219 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [32, 128, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_32x64x16x16_planes2048_spatial256", |
| "preset": "smoke", |
| "provenance": { |
| "notes": "Halves the plane count of the 4096-plane spatial-256 case: brackets where the serial kernel stops being saturated." |
| }, |
| "vars": { "batch": 32, "channels": 64, "spatial": 256 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [32, 64, 16, 16], "dist": "normal", "seed": 220 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [32, 64, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_32x128x16x32_manyplanes_spatial512", |
| "preset": "smoke", |
| "provenance": { |
| "notes": "Doubles the spatial extent of the 4096-plane spatial-256 case: brackets where the workgroup tree starts amortizing." |
| }, |
| "vars": { "batch": 32, "channels": 128, "spatial": 512 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [32, 128, 16, 32], "dist": "normal", "seed": 221 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [32, 128, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| }, |
| { |
| "name": "nchw_1x65536x9x9_planes65536_spatial81", |
| "preset": "smoke", |
| "provenance": { |
| "notes": "65536 planes: four outputs per invocation still leaves 16384 invocations, which is the regime the vec4-output serial kernel is written for." |
| }, |
| "vars": { "batch": 1, "channels": 65536, "spatial": 81 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1, 65536, 9, 9], "dist": "normal", "seed": 222 } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1, 65536, 1, 1], "dist": "empty" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.batch * args.channels * args.spatial * 4" }] } |
| } |
| ], |
| "tunableSpace": { "WORKGROUP_SIZE": [64, 128, 256] } |
| } |
|
|