{ "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] } }