| { |
| "op": "ai.onnx.ReduceProd", |
| "cases": [ |
| { |
| "name": "reduce-prod-axis0-1024x512", |
| "preset": "smoke", |
| "vars": { "dtype": "float32", "rows": 1024, "cols": 512 }, |
| "attrs": { "axes": [0], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [1024, 512], "dtype": "float32", "dist": "normal", "seed": 967, "offset": 1, "scale": 0.001 } |
| }, |
| "outputs": { "y": { "shape": [512], "dtype": "float32" } }, |
| "bench": { |
| "primary": true, |
| "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * dtypeBytes(args.dtype)" }] |
| } |
| }, |
| { |
| "name": "rows_1024_cols_32", |
| "attrs": { "axes": [1], "keepdims": 0 }, |
| "inputs": { "x": { "dtype": "float32", "shape": [1024, 32] } }, |
| "outputs": { "y": { "dtype": "float32", "shape": [1024] } } |
| }, |
| { |
| "name": "reduceprod-lastaxis-f32-4096x4096", |
| "preset": "smoke", |
| "vars": { "rows": 4096, "cols": 4096 }, |
| "attrs": { "axes": [1], "keepdims": 0 }, |
| "inputs": { "x": { "shape": [4096, 4096], "dtype": "float32", "dist": "normal", "seed": 117, "scale": 0.2 } }, |
| "outputs": { "y": { "shape": [4096], "dtype": "float32" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * 4" }] } |
| }, |
| { |
| "name": "reduceprod-r3-last-64x64x4096", |
| "preset": "smoke", |
| "vars": { "rows": 4096, "cols": 4096 }, |
| "attrs": { "axes": [2], "keepdims": 0 }, |
| "inputs": { "x": { "shape": [64, 64, 4096], "dtype": "float32", "dist": "normal", "seed": 73, "scale": 0.001 } }, |
| "outputs": { "y": { "shape": [64, 64], "dtype": "float32" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * 4" }] } |
| }, |
| { |
| "name": "axis0-large-65536x512", |
| "preset": "smoke", |
| "vars": { "rows": 65536, "cols": 512 }, |
| "attrs": { "axes": [0], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [65536, 512], "dtype": "float32", "dist": "uniform", "scale": 0.001, "offset": 1, "seed": 311 } |
| }, |
| "outputs": { "y": { "shape": [512], "dtype": "float32" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * 4" }] } |
| }, |
| { |
| "name": "axis0-tall-16384x1024", |
| "preset": "smoke", |
| "vars": { "rows": 16384, "cols": 1024 }, |
| "attrs": { "axes": [0], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [16384, 1024], "dtype": "float32", "dist": "uniform", "scale": 0.001, "offset": 1, "seed": 312 } |
| }, |
| "outputs": { "y": { "shape": [1024], "dtype": "float32" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * 4" }] } |
| }, |
| { |
| "name": "reduceprod-lastaxis-scalar-f32-2048x4095", |
| "preset": "smoke", |
| "vars": { "dtype": "float32", "rows": 2048, "cols": 4095 }, |
| "attrs": { "axes": [1], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [2048, 4095], "dtype": "float32", "dist": "normal", "seed": 419, "scale": 0.001, "offset": 1 } |
| }, |
| "outputs": { "y": { "shape": [2048], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * dtypeBytes(args.dtype)" }] } |
| }, |
| { |
| "name": "reduceprod-r3-mid-axis1-64x256x4096", |
| "preset": "stress", |
| "provenance": { "notes": "Stress-only capacity case: declared tensors occupy 257 MiB of GPU storage." }, |
| "vars": { "dtype": "float32", "d0": 64, "d1": 256, "d2": 4096 }, |
| "attrs": { "axes": [1], "keepdims": 0 }, |
| "inputs": { |
| "x": { |
| "shape": [64, 256, 4096], |
| "dtype": "float32", |
| "dist": "normal", |
| "seed": 421, |
| "scale": 0.001, |
| "offset": 1 |
| } |
| }, |
| "outputs": { "y": { "shape": [64, 4096], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.d0 * args.d1 * args.d2 * dtypeBytes(args.dtype)" }] } |
| }, |
| { |
| "name": "reduceprod-tree-i32-lastaxis-256x4096", |
| "preset": "smoke", |
| "vars": { "dtype": "int32", "rows": 256, "cols": 4096 }, |
| "attrs": { "axes": [1], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [256, 4096], "dtype": "int32", "dist": "uniform", "seed": 423, "scale": 1, "offset": 1 } |
| }, |
| "outputs": { "y": { "shape": [256], "dtype": "int32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * dtypeBytes(args.dtype)" }] } |
| }, |
| { |
| "name": "reduceprod-fullreduce-r3-256x256x256-keepdims", |
| "preset": "smoke", |
| "vars": { "rows": 65536, "cols": 256 }, |
| "attrs": { "keepdims": 1 }, |
| "inputs": { |
| "x": { |
| "shape": [256, 256, 256], |
| "dtype": "float32", |
| "dist": "uniform", |
| "seed": 511, |
| "scale": 0.001, |
| "offset": 0.9995 |
| } |
| }, |
| "outputs": { "y": { "shape": [1, 1, 1], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * 4" }] } |
| }, |
| { |
| "name": "tree-per-row-cliff-f32-lastaxis-524288x64", |
| "preset": "stress", |
| "vars": { "dtype": "float32", "rows": 524288, "cols": 64 }, |
| "attrs": { "axes": [-1], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [524288, 64], "dtype": "float32", "dist": "normal", "seed": 8821, "scale": 0.001, "offset": 1 } |
| }, |
| "outputs": { "y": { "shape": [524288], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * dtypeBytes(args.dtype)" }] } |
| }, |
| { |
| "name": "reduceprod-rowserial-boundary-8192x1024", |
| "preset": "stress", |
| "vars": { "dtype": "float32", "rows": 8192, "cols": 1024 }, |
| "attrs": { "axes": [-1], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [8192, 1024], "dtype": "float32", "dist": "normal", "seed": 8821, "scale": 0.001, "offset": 1 } |
| }, |
| "outputs": { "y": { "shape": [8192], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * dtypeBytes(args.dtype)" }] }, |
| "provenance": { |
| "notes": "Pins the row-serial selector boundary at rows >= ROW_SERIAL_MIN_ROWS and cols <= ROW_SERIAL_MAX_COLS." |
| } |
| }, |
| { |
| "name": "reduceprod-tree-boundary-4096x1024", |
| "preset": "stress", |
| "vars": { "dtype": "float32", "rows": 4096, "cols": 1024 }, |
| "attrs": { "axes": [-1], "keepdims": 0 }, |
| "inputs": { |
| "x": { "shape": [4096, 1024], "dtype": "float32", "dist": "normal", "seed": 8821, "scale": 0.001, "offset": 1 } |
| }, |
| "outputs": { "y": { "shape": [4096], "dtype": "float32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * dtypeBytes(args.dtype)" }] }, |
| "provenance": { |
| "notes": "One row-count notch outside the row-serial region, where the row-per-workgroup tree wins by 1.7x. Pairs with the 8192x1024 case to bracket ROW_SERIAL_MIN_ROWS." |
| } |
| }, |
| { |
| "name": "i32-fullreduce-single-lane-64x64x8-keepdims", |
| "preset": "stress", |
| "vars": { "dtype": "int32", "numel": 32768 }, |
| "attrs": { "keepdims": 1 }, |
| "inputs": { |
| "x": { "shape": [64, 64, 8], "dtype": "int32", "dist": "randint", "seed": 8823, "min": -2, "max": 2 } |
| }, |
| "outputs": { "y": { "shape": [1, 1, 1], "dtype": "int32" } }, |
| "bench": { "metrics": [{ "type": "bandwidth", "value": "args.numel * dtypeBytes(args.dtype)" }] } |
| }, |
| { |
| "name": "reduceprod-rank3-spatial-axes12-f32-128x256x256-pathology", |
| "preset": "stress", |
| "provenance": { |
| "source": "authored for branch coverage", |
| "notes": "Rank-3 multi-axis reduction with 128 output lanes, each serially scanning a 256x256 plane. Inputs stay close to one so the long product remains finite." |
| }, |
| "attrs": { "axes": [1, 2], "keepdims": 1 }, |
| "inputs": { |
| "x": { |
| "shape": [128, 256, 256], |
| "dtype": "float32", |
| "dist": "uniform", |
| "seed": 909, |
| "scale": 0.0002, |
| "offset": 0.9999 |
| } |
| }, |
| "outputs": { "y": { "shape": [128, 1, 1], "dtype": "float32", "dist": "empty" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "128 * 256 * 256 * 4" }] } |
| }, |
| { |
| "name": "reduceprod-rank4-spatial-axes23-f32-2x64x256x256-pathology", |
| "preset": "stress", |
| "provenance": { |
| "source": "authored for branch coverage", |
| "notes": "Rank-4 multi-axis reduction with 128 output lanes, each serially scanning a 256x256 plane. Inputs stay close to one so the long product remains finite." |
| }, |
| "attrs": { "axes": [2, 3], "keepdims": 1 }, |
| "inputs": { |
| "x": { |
| "shape": [2, 64, 256, 256], |
| "dtype": "float32", |
| "dist": "uniform", |
| "seed": 910, |
| "scale": 0.0002, |
| "offset": 0.9999 |
| } |
| }, |
| "outputs": { "y": { "shape": [2, 64, 1, 1], "dtype": "float32", "dist": "empty" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "2 * 64 * 256 * 256 * 4" }] } |
| }, |
| { |
| "name": "reduceprod-axis0-f32-131072x15-narrow-splitk-boundary", |
| "preset": "stress", |
| "vars": { "rows": 131072, "cols": 15 }, |
| "attrs": { "axes": [0], "keepdims": 0 }, |
| "inputs": { "x": { "shape": [131072, 15], "dtype": "float32", "dist": "constant", "value": 1 } }, |
| "outputs": { "y": { "shape": [15], "dtype": "float32", "dist": "empty" } }, |
| "bench": { "primary": true, "metrics": [{ "type": "bandwidth", "value": "args.rows * args.cols * 4" }] } |
| } |
| ], |
| "tunableSpace": { "WORKGROUP_SIZE": [64, 128, 256] } |
| } |
|
|