{ "op": "ai.onnx.ScatterElements", "cases": [ { "name": "axis1", "attrs": { "axis": 1 }, "inputs": { "data": { "dtype": "float32", "shape": [1024, 768] }, "indices": { "dtype": "int32", "shape": [1024, 128], "min": 0, "max": 768 }, "updates": { "dtype": "float32", "shape": [1024, 128] } }, "outputs": { "output": { "dtype": "float32", "shape": [1024, 768] } } }, { "name": "axis1_reduction_add", "preset": "smoke", "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float32", "shape": [1024, 768], "dist": "normal", "seed": 1 }, "indices": { "dtype": "int32", "shape": [1024, 128], "dist": "randint", "min": 0, "max": 768, "seed": 3 }, "updates": { "dtype": "float32", "shape": [1024, 128], "dist": "normal", "seed": 2 } }, "outputs": { "output": { "dtype": "float32", "shape": [1024, 768], "dist": "empty" } }, "bench": { "primary": true, "metrics": [ { "type": "bandwidth", "value": "4 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "axis0_reduction_add_contended", "preset": "smoke", "attrs": { "axis": 0, "reduction": "add" }, "inputs": { "data": { "dtype": "float32", "shape": [64, 1024], "dist": "normal", "seed": 1 }, "indices": { "dtype": "int32", "shape": [4096, 1024], "dist": "randint", "min": 0, "max": 64, "seed": 3 }, "updates": { "dtype": "float32", "shape": [4096, 1024], "dist": "normal", "seed": 2 } }, "outputs": { "output": { "dtype": "float32", "shape": [64, 1024], "dist": "empty" } } }, { "name": "axis0_reduction_add_single_row", "preset": "smoke", "attrs": { "axis": 0, "reduction": "add" }, "inputs": { "data": { "dtype": "float32", "shape": [64, 1024], "dist": "normal", "seed": 1 }, "indices": { "dtype": "int32", "shape": [4096, 1024], "dist": "constant", "value": 0 }, "updates": { "dtype": "float32", "shape": [4096, 1024], "dist": "normal", "seed": 2 } }, "outputs": { "output": { "dtype": "float32", "shape": [64, 1024], "dist": "empty" } } }, { "name": "axis1_reduction_add_f16_slice", "preset": "smoke", "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [1024, 768], "dist": "normal", "seed": 1 }, "indices": { "dtype": "int32", "shape": [1024, 128], "dist": "randint", "min": 0, "max": 768, "seed": 3 }, "updates": { "dtype": "float16", "shape": [1024, 128], "dist": "normal", "seed": 2 } }, "outputs": { "output": { "dtype": "float16", "shape": [1024, 768], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "axis1_reduction_add_f16_tall_axis_few_columns_single_lane", "preset": "smoke", "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [8, 16384], "dist": "normal", "seed": 1 }, "indices": { "dtype": "int32", "shape": [8, 16384], "dist": "randint", "min": 0, "max": 16384, "seed": 3 }, "updates": { "dtype": "float16", "shape": [8, 16384], "dist": "normal", "seed": 2 } }, "outputs": { "output": { "dtype": "float16", "shape": [8, 16384], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "axis0_reduction_mul_contended_cas_spin", "preset": "smoke", "attrs": { "axis": 0, "reduction": "mul" }, "inputs": { "data": { "dtype": "float32", "shape": [64, 1024], "dist": "constant", "value": 1 }, "indices": { "dtype": "int32", "shape": [4096, 1024], "dist": "randint", "min": 0, "max": 64, "seed": 3 }, "updates": { "dtype": "float32", "shape": [4096, 1024], "dist": "constant", "value": 1 } }, "outputs": { "output": { "dtype": "float32", "shape": [64, 1024], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "4 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "axis0_reduction_add_contended_int32_native_atomic", "preset": "smoke", "attrs": { "axis": 0, "reduction": "add" }, "inputs": { "data": { "dtype": "int32", "shape": [64, 1024], "dist": "constant", "value": 0 }, "indices": { "dtype": "int32", "shape": [4096, 1024], "dist": "randint", "min": 0, "max": 64, "seed": 3 }, "updates": { "dtype": "int32", "shape": [4096, 1024], "dist": "constant", "value": 1 } }, "outputs": { "output": { "dtype": "int32", "shape": [64, 1024], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "4 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "f16_reduction_add_rank1_single_column_serial", "preset": "stress", "attrs": { "axis": 0, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [32768], "dist": "normal", "seed": 10 }, "indices": { "dtype": "int32", "shape": [32768], "dist": "randint", "min": 0, "max": 32768, "seed": 11 }, "updates": { "dtype": "float16", "shape": [32768], "dist": "normal", "seed": 12 } }, "outputs": { "output": { "dtype": "float16", "shape": [32768], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "embedding-gradient-f16-axis0-vocab4096-hidden128-tokens65536", "preset": "stress", "attrs": { "axis": 0, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [4096, 128], "dist": "constant", "value": 0 }, "indices": { "dtype": "int32", "shape": [65536, 128], "dist": "randint", "min": 0, "max": 4096, "seed": 21 }, "updates": { "dtype": "float16", "shape": [65536, 128], "dist": "normal", "seed": 22, "scale": 0.01 } }, "outputs": { "output": { "dtype": "float16", "shape": [4096, 128], "dist": "empty" } }, "bench": { "primary": true, "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "f16-add-outer257-atomic-guard-cliff-pathology", "preset": "stress", "provenance": { "source": "authored for boundary coverage", "notes": "One column above reduction_f16_add_atomic_f32's non-axis-column <= 256 guard, so reduction_slice assigns 16384 updates to each of 257 invocations; the outer=256 control isolates the guard boundary." }, "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [257, 16384], "dist": "constant", "value": 0 }, "indices": { "dtype": "int32", "shape": [257, 16384], "dist": "randint", "min": 0, "max": 16384, "seed": 23 }, "updates": { "dtype": "float16", "shape": [257, 16384], "dist": "normal", "seed": 24, "scale": 0.01 } }, "outputs": { "output": { "dtype": "float16", "shape": [257, 16384], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "f16-add-wide-slices-65536x4-short-axis", "preset": "smoke", "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [65536, 16], "dist": "normal", "seed": 11 }, "indices": { "dtype": "int32", "shape": [65536, 4], "dist": "randint", "min": 0, "max": 16, "seed": 13 }, "updates": { "dtype": "float16", "shape": [65536, 4], "dist": "normal", "seed": 12 } }, "outputs": { "output": { "dtype": "float16", "shape": [65536, 16], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "f16-add-slices2048-axis128-just-above-gate", "preset": "smoke", "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [2048, 768], "dist": "normal", "seed": 11 }, "indices": { "dtype": "int32", "shape": [2048, 128], "dist": "randint", "min": 0, "max": 768, "seed": 13 }, "updates": { "dtype": "float16", "shape": [2048, 128], "dist": "normal", "seed": 12 } }, "outputs": { "output": { "dtype": "float16", "shape": [2048, 768], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "f16-add-slices2048-axis4096-long-walk-needs-atomic", "preset": "stress", "attrs": { "axis": 1, "reduction": "add" }, "inputs": { "data": { "dtype": "float16", "shape": [2048, 8192], "dist": "normal", "seed": 11 }, "indices": { "dtype": "int32", "shape": [2048, 4096], "dist": "randint", "min": 0, "max": 8192, "seed": 13 }, "updates": { "dtype": "float16", "shape": [2048, 4096], "dist": "normal", "seed": 12 } }, "outputs": { "output": { "dtype": "float16", "shape": [2048, 8192], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * (2 * numel(shapes.data) + 3 * numel(shapes.updates)) + 4 * numel(shapes.indices)" } ] } }, { "name": "int8_reduction_add_rank1_single_column_serial", "preset": "stress", "provenance": { "notes": "Narrow-integer twin of f16_reduction_add_rank1_single_column_serial. A rank-1 scatter has one non-axis column, so the serial slice route assigns every update to one lane." }, "attrs": { "axis": 0, "reduction": "add" }, "inputs": { "data": { "dtype": "int8", "shape": [32768], "dist": "constant", "value": 0 }, "indices": { "dtype": "int32", "shape": [32768], "dist": "randint", "min": 0, "max": 32768, "seed": 21 }, "updates": { "dtype": "int8", "shape": [32768], "dist": "constant", "value": 1 } }, "outputs": { "output": { "dtype": "int8", "shape": [32768], "dist": "empty" } }, "bench": { "metrics": [ { "type": "bandwidth", "value": "2 * numel(shapes.data) + 3 * numel(shapes.updates) + 4 * numel(shapes.indices)" } ] } } ] }