Xenova's picture
Xenova HF Staff
sync 91d990483a17
bb8ee13 verified
Raw
History Blame
67.4 kB
{
"fixtureArrays": {
"ort_float32_broadcast_rank3_by_rank4_output_Y": [1, 3, 5, 33, 43, 53, 5, 23, 41, 85, 111, 137, 9, 43, 77, 137, 179, 221],
"ort_float32_rank3_by_rank2_output_Y": [20, 23, 26, 29, 56, 68, 80, 92, 92, 113, 134, 155, 128, 158, 188, 218],
"ort_float32_batched_rank4_input_A": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"ort_float32_trans_batch_a_input_A": [0, 1, 2, 3, 12, 13, 14, 15, 4, 5, 6, 7, 16, 17, 18, 19, 8, 9, 10, 11, 20, 21, 22, 23],
"ort_float32_trans_batch_b_input_B": [1, 0, 1, 2, 0, 1, -1, 0, 1, 1, 0, 1, 2, -1, 1, 1]
},
"cases": [
{
"name": "ort_float32_broadcast_rank4_by_rank3",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 1, 1, 2],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] }
},
"B": {
"dtype": "float32",
"shape": [2, 2, 2],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 2, 1, 2],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [2.0, 3.0, 6.0, 7.0, 6.0, 11.0, 26.0, 31.0, 10.0, 19.0, 46.0, 55.0] }
}
}
},
{
"name": "ort_float32_broadcast_rank3_by_rank4",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3, 2],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
},
"B": {
"dtype": "float32",
"shape": [3, 2, 2, 1],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 2, 3, 1],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_float32_broadcast_rank3_by_rank4_output_Y" }
}
}
}
},
{
"name": "ort_float32_left_1d_batched_rhs",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [0.0, 1.0] } },
"B": {
"dtype": "float32",
"shape": [3, 2, 1],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 1],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [1.0, 3.0, 5.0] }
}
}
},
{
"name": "ort_float32_right_1d_batched_lhs",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 1, 2],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] }
},
"B": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [0.0, 1.0] } }
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 1],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [1.0, 3.0, 5.0] }
}
}
},
{
"name": "ort_float32_plain_2d",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
},
"B": {
"dtype": "float32",
"shape": [4, 3],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 3],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [42.0, 48.0, 54.0, 114.0, 136.0, 158.0, 186.0, 224.0, 262.0] }
}
}
},
{
"name": "ort_float32_rank3_by_rank2",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 2, 3],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
},
"B": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 2, 4],
"tolerance": 0.000001,
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_rank3_by_rank2_output_Y" } }
}
}
},
{
"name": "ort_float32_rank3_by_broadcast_rank3",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 2, 3],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
},
"B": {
"dtype": "float32",
"shape": [1, 3, 4],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 2, 4],
"tolerance": 0.000001,
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_rank3_by_rank2_output_Y" } }
}
}
},
{
"name": "ort_float32_singleton_rank3_by_rank3",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [1, 2, 3],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] }
},
"B": {
"dtype": "float32",
"shape": [1, 3, 4],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [1, 2, 4],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [20.0, 23.0, 26.0, 29.0, 56.0, 68.0, 80.0, 92.0] }
}
}
},
{
"name": "ort_float32_batched_rank4",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 2, 2, 2],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_batched_rank4_input_A" } }
},
"B": {
"dtype": "float32",
"shape": [2, 2, 2, 2],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_batched_rank4_input_A" } }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 2, 2, 2],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": [2.0, 3.0, 6.0, 11.0, 46.0, 55.0, 66.0, 79.0, 154.0, 171.0, 190.0, 211.0, 326.0, 351.0, 378.0, 407.0]
}
}
}
},
{
"name": "ort_float32_broadcast_rank4_by_rank4",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [1, 2, 3, 2],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
},
"B": {
"dtype": "float32",
"shape": [3, 2, 2, 1],
"data": { "kind": "values", "values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 2, 3, 1],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_float32_broadcast_rank3_by_rank4_output_Y" }
}
}
}
},
{
"name": "ort_float32_vector_dot_scalar_output",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose"
},
"inputs": {
"A": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [0.0, 1.0, 2.0] } },
"B": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [0.0, 1.0, 2.0] } }
},
"outputs": {
"Y": { "dtype": "float32", "shape": [], "tolerance": 0.000001, "data": { "kind": "values", "values": [5.0] } }
}
},
{
"name": "ort_float32_alpha_zero_outputs_zero",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.DoubleTypeAlphaZero",
"notes": "Diverges from the upstream test's inputs (inputs.A values [1.0, 2.0, 3.0, 4.0] -> constant 2.0; inputs.B values [5.0, 6.0, 7.0, 8.0] -> constant 3.0); the expected output is recomputed by the CPU reference for the new inputs. A zero alpha scales the whole product away, so no operand value can reach the result and both operands are uniform fills."
},
"attrs": { "alpha": 0 },
"inputs": {
"A": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "constant", "value": 2.0 } },
"B": { "dtype": "float32", "shape": [2, 2], "data": { "kind": "constant", "value": 3.0 } }
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 2],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [0.0, 0.0, 0.0, 0.0] }
}
}
},
{
"name": "ort_float32_empty_k_dimension_outputs_zero",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.DoubleTypeEmptyKDim"
},
"inputs": {
"A": { "dtype": "float32", "shape": [2, 0], "data": { "kind": "values", "values": [] } },
"B": { "dtype": "float32", "shape": [0, 3], "data": { "kind": "values", "values": [] } }
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 3],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] }
}
}
},
{
"name": "ort_float32_transpose_a_scaled",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.DoubleTypeScale"
},
"attrs": { "alpha": 0.5, "transA": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"B": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [7.0, 8.0, 9.0, 10.0, 11.0, 12.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [3, 3],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [23.5, 26.0, 28.5, 32.0, 35.5, 39.0, 40.5, 45.0, 49.5] }
}
}
},
{
"name": "ort_float32_transpose_b",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeTransposeB"
},
"attrs": { "transB": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"B": {
"dtype": "float32",
"shape": [4, 3],
"data": { "kind": "values", "values": [7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 4],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [50.0, 68.0, 86.0, 104.0, 122.0, 167.0, 212.0, 257.0] }
}
}
},
{
"name": "ort_float32_transpose_ab_scaled",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeScale"
},
"attrs": { "alpha": 4, "transA": 1, "transB": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 2],
"data": { "kind": "values", "values": [1.0, 4.0, 2.0, 5.0, 3.0, 6.0] }
},
"B": {
"dtype": "float32",
"shape": [4, 3],
"data": { "kind": "values", "values": [7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 4],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [200.0, 272.0, 344.0, 416.0, 488.0, 668.0, 848.0, 1028.0] }
}
}
},
{
"name": "ort_float32_trans_batch_a",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeTransposeBatch",
"notes": "Exercises transBatchA, where logical [batch,N,M] input A is stored as [N,batch,M]."
},
"attrs": { "transBatchA": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 2, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_trans_batch_a_input_A" } }
},
"B": {
"dtype": "float32",
"shape": [2, 4, 2],
"data": {
"kind": "values",
"values": [1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 2.0, -1.0, 1.0, 2.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0]
}
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 3, 2],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [8.0, 0.0, 24.0, 4.0, 40.0, 8.0, 14.0, 53.0, 18.0, 69.0, 22.0, 85.0] }
}
}
},
{
"name": "ort_float32_trans_batch_b",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeTransposeBatch",
"notes": "Exercises transBatchB, where logical [batch,K,N] input B is stored as [K,batch,N]."
},
"attrs": { "transBatchB": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3, 4],
"data": {
"kind": "values",
"values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0]
}
},
"B": {
"dtype": "float32",
"shape": [4, 2, 2],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_trans_batch_b_input_B" } }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 3, 2], "tolerance": 0.000001 } }
},
{
"name": "ort_float32_trans_batch_ab_scaled",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeTransposeBatch",
"notes": "Exercises combined transBatchA and transBatchB with alpha scaling."
},
"attrs": { "transBatchA": 1, "transBatchB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 2, 4],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_trans_batch_a_input_A" } }
},
"B": {
"dtype": "float32",
"shape": [4, 2, 2],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_float32_trans_batch_b_input_B" } }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 3, 2],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [4.0, 0.0, 12.0, 2.0, 20.0, 4.0, 7.0, 26.5, 9.0, 34.5, 11.0, 42.5] }
}
}
},
{
"name": "ort_float32_scaled_no_transpose",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeScale"
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"B": {
"dtype": "float32",
"shape": [3, 2],
"data": { "kind": "values", "values": [7.0, 8.0, 9.0, 10.0, 11.0, 12.0] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 2],
"tolerance": 0.000001,
"data": { "kind": "values", "values": [29.0, 32.0, 69.5, 77.0] }
}
}
},
{
"name": "ort_float32_empty_input_m_zero",
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.DoubleTypeEmptyInput"
},
"inputs": {
"A": { "dtype": "float32", "shape": [0, 3], "data": { "kind": "values", "values": [] } },
"B": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] }
}
},
"outputs": {
"Y": { "dtype": "float32", "shape": [0, 4], "tolerance": 0.000001, "data": { "kind": "values", "values": [] } }
}
},
{
"name": "aligned_plain_64x32x64",
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 64], "tolerance": 0.0001 } }
},
{
"name": "register_blocked_plain_512x64x512_alpha_scaled",
"inputs": {
"A": {
"dtype": "float32",
"shape": [512, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [64, 512],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [512, 512], "tolerance": 0.0001 } },
"attrs": { "alpha": 0.5 },
"provenance": {
"notes": "Rank-2 M=N=512 and K=64 produce 64 aligned 64x64 workgroup tiles, exercising register-blocked vec4 staging and 4x4 per-thread accumulation. alpha=0.5 verifies scaling in the output epilogue."
}
},
{
"name": "aligned_transB_alpha_64x32",
"attrs": { "transB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 64], "tolerance": 0.0001 } }
},
{
"name": "aligned_batched_plain_2x64x32x64",
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 64, 64], "tolerance": 0.0001 } }
},
{
"name": "aligned_batched_transB_alpha_2x64x32",
"attrs": { "transB": 1, "alpha": 0.25 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [2, 64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 64, 64], "tolerance": 0.0001 } }
},
{
"name": "aligned_mtail_50x32x128",
"inputs": {
"A": {
"dtype": "float32",
"shape": [50, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.015, "cosStep": 0.021, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [32, 128],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.011, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [50, 128], "tolerance": 0.0001 } }
},
{
"name": "aligned_transA_64x32",
"attrs": { "transA": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 64], "tolerance": 0.0001 } }
},
{
"name": "aligned_transA_transB_alpha_64x32",
"attrs": { "transA": 1, "transB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 64], "tolerance": 0.0001 } }
},
{
"name": "f32_subgroup_matrix_subnormal_dot_products_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: WebGPU/Metal flushes subnormals to zero in f32; the ~3e-39 subnormal dot products collapse to zero (subgroup-matrix path)."
},
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeNoTranspose",
"notes": "M=32, K=32, N=64 selects the subgroup-matrix path; finite subnormal dot products must not flush to zero."
},
"inputs": {
"A": { "dtype": "float32", "shape": [32, 32], "data": { "kind": "constant", "value": 1e-20 } },
"B": { "dtype": "float32", "shape": [32, 64], "data": { "kind": "constant", "value": 1e-20 } }
},
"outputs": { "Y": { "dtype": "float32", "shape": [32, 64], "tolerance": 1e-43 } }
},
{
"name": "f32_subgroup_matrix_scaled_subnormal_dot_products_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: WebGPU/Metal flushes subnormals to zero in f32; the ~3e-39 subnormal dot products collapse to zero before alpha scaling (subgroup-matrix path)."
},
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeScale",
"notes": "Alpha scaling is applied after accumulation, so finite subnormal products remain valid nonzero outputs."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": { "dtype": "float32", "shape": [32, 32], "data": { "kind": "constant", "value": 1e-20 } },
"B": { "dtype": "float32", "shape": [32, 64], "data": { "kind": "constant", "value": 1e-20 } }
},
"outputs": { "Y": { "dtype": "float32", "shape": [32, 64], "tolerance": 1e-43 } }
},
{
"name": "f32_subgroup_matrix_transB_subnormal_dot_products_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: WebGPU/Metal flushes subnormals to zero in f32; the ~3e-39 subnormal dot products collapse to zero (subgroup-matrix transB path)."
},
"provenance": {
"source": "onnxruntime/test/contrib_ops/fused_matmul_op_test.cc",
"test": "FusedMatMulOpTest.FloatTypeTransposeB",
"notes": "The transposed-B subgroup-matrix path has the same finite subnormal accumulation requirement."
},
"attrs": { "transB": 1 },
"inputs": {
"A": { "dtype": "float32", "shape": [32, 32], "data": { "kind": "constant", "value": 1e-20 } },
"B": { "dtype": "float32", "shape": [64, 32], "data": { "kind": "constant", "value": 1e-20 } }
},
"outputs": { "Y": { "dtype": "float32", "shape": [32, 64], "tolerance": 1e-43 } }
},
{
"name": "aligned_f16_plain_64x32x64",
"inputs": {
"A": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.002 } }
},
{
"name": "aligned_f16_transB_alpha_64x32",
"attrs": { "transB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.02 } }
},
{
"name": "f16_unaligned_3x5x7",
"inputs": {
"A": {
"dtype": "float16",
"shape": [3, 5],
"data": { "kind": "fillFloat32", "sinStep": 0.015, "cosStep": 0.021, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [5, 7],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.011, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [3, 7], "tolerance": 0.003 } }
},
{
"name": "aligned_f16_transA_64x32",
"attrs": { "transA": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.001 } }
},
{
"name": "aligned_f16_batched_plain_2x64x32x64",
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 64, 64], "tolerance": 0.002 } }
},
{
"name": "f16_rank3_by_broadcast_rank3",
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 2, 3],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [1, 3, 4],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 2, 4], "tolerance": 0.002 } }
},
{
"name": "aligned_f16_transA_transB_alpha_64x32",
"attrs": { "transA": 1, "transB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.002 } }
},
{
"name": "subgroup_matrix_m_tail_57_partial_block_f16",
"inputs": {
"A": {
"dtype": "float16",
"shape": [57, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.011, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [57, 64], "tolerance": 0.001 } }
},
{
"name": "subgroup_matrix_m_tail_33_alpha_scaled_f32",
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [33, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.015, "cosStep": 0.021, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.019, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [33, 64], "tolerance": 0.0002 } }
},
{
"name": "trans_batch_a_broadcast_rank4_f32",
"attrs": { "transBatchA": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3, 2, 4],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [3, 1, 4, 5],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [3, 2, 2, 5], "tolerance": 0.0002 } }
},
{
"name": "empty_n_dimension_zero_width_output",
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 4],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0] }
},
"B": { "dtype": "float32", "shape": [4, 0], "data": { "kind": "values", "values": [] } }
},
"outputs": {
"Y": { "dtype": "float32", "shape": [3, 0], "tolerance": 0.000001, "data": { "kind": "values", "values": [] } }
}
},
{
"name": "transA_transB_subgroup_matrix_m_tail_50_f16",
"attrs": { "transA": 1, "transB": 1, "alpha": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [32, 50],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [50, 64], "tolerance": 0.002 } }
},
{
"name": "f32_decode_gemv_m1_k65_n68_vec4_compact",
"provenance": {
"notes": "Compact M=1 float32 GEMV correctness lock for the model-shaped K=4096,N=4096 bandwidth-bound benchmark. Odd K preserves the sliced reduction while N=68 exercises the final partial 128-column workgroup."
},
"attrs": { "alpha": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [1, 65],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [65, 68],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [1, 68], "tolerance": 0.0002 } }
},
{
"name": "f32_rank4_by_rank2_shared_weight_compact",
"provenance": {
"notes": "Compact rank-4 by rank-2 shared-weight broadcast lock for the attention-shaped benchmark. Odd M/K/N exercise batch offset and tile-tail handling."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 3, 5, 7],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [7, 9],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 3, 5, 9], "tolerance": 0.0002 } }
},
{
"name": "subgroup_matrix_kn_tail_f16_compact",
"provenance": { "notes": "Compact f16 subgroup-matrix lock with both a partial K=34 tile and N=66 output tail." },
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [33, 34],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1 }
},
"B": {
"dtype": "float16",
"shape": [34, 66],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [33, 66], "tolerance": 0.0004 } }
},
{
"name": "subgroup_matrix_broadcast_rank4x3_f16_compact",
"provenance": {
"notes": "Compact rank-4 by rank-3 broadcast lock for the model-shaped [1,8,M,K] x [8,K,N] stress case."
},
"attrs": { "alpha": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [1, 2, 33, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [1, 2, 33, 64], "tolerance": 0.0005 } }
},
{
"name": "broadcast_rank4_tiled_reg_f16_compact",
"provenance": {
"notes": "Compact rank-4 by rank-3 broadcast lock for the register-blocked non-subgroup-matrix path. Odd M/K/N exercise every output and reduction tail."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [1, 2, 65, 33],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1 }
},
"B": {
"dtype": "float16",
"shape": [2, 33, 67],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [1, 2, 65, 67], "tolerance": 0.0004 } }
},
{
"name": "broadcast_rank4_tiled_reg_shared_f32_compact",
"provenance": {
"notes": "Float32 shared rank-2 weight counterpart for the register-blocked rank-4 path. Odd M/K/N cover all output and reduction tails."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [1, 2, 65, 33],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1 }
},
"B": {
"dtype": "float32",
"shape": [33, 67],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [1, 2, 65, 67], "tolerance": 0.0003 } }
},
{
"name": "transbatch_a_dense_m_tail_f16_compact",
"provenance": {
"notes": "Compact lock for stored [M,batch,K] transBatchA addressing. M=65 exercises the subgroup-matrix row tail; all/no-mma/no-subgroups select the MMA/register-blocked portable paths used by the model-shaped stress case."
},
"attrs": { "alpha": 0.5, "transBatchA": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [65, 2, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 65, 64], "tolerance": 0.0004 } }
},
{
"name": "transbatch_a_dense_m_tail_f32_compact",
"provenance": {
"notes": "Float32 counterpart proving the same transBatchA MMA/register-blocked split remains correct when shader-f16 is unavailable."
},
"attrs": { "alpha": 0.5, "transBatchA": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [65, 2, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1 }
},
"B": {
"dtype": "float32",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 65, 64], "tolerance": 0.0003 } }
},
{
"name": "rank5_three_batch_dims",
"attrs": { "alpha": 1, "transA": 0, "transB": 0, "transBatchA": 0, "transBatchB": 0 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 1, 2, 2, 3],
"data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.29, "scale": 0.5 }
},
"B": {
"dtype": "float32",
"shape": [1, 3, 1, 3, 4],
"data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.31, "scale": 0.25 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 3, 2, 2, 4], "tolerance": 0.000001 } }
},
{
"name": "subgroup_matrix_kn_tail_f16_offset_alpha_scale_lock",
"provenance": {
"notes": "Offset float16 operands keep each output near `alpha * K * aOffset * bOffset` (about 3.4), making the K=34 reduction tail, N=66 column tail, and `alpha = 0.5` epilogue observable on the subgroup-matrix route."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [33, 34],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [34, 66],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [33, 66], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "subgroup_matrix_broadcast_rank4x3_f16_offset_scale_lock",
"provenance": {
"notes": "Offset operands keep outputs near `K * aOffset * bOffset`, making the per-batch B slice and K=32 contraction observable in a rank-4 by rank-3 broadcast."
},
"attrs": { "alpha": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [1, 2, 33, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [1, 2, 33, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "subgroup_matrix_a_batch_broadcast_rank4x3_f16",
"provenance": {
"notes": "A has batch extent 1 while B has extent 2, so one A slice feeds both output batches. Offset operands keep the expected magnitude nonzero, exposing a swapped or nonzero A batch stride."
},
"attrs": { "alpha": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [1, 1, 33, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.019, "scale": 0.1, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.007, "cosStep": 0.031, "scale": 0.1, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [1, 2, 33, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "broadcast_rank4_tiled_reg_f16_offset_alpha_scale_lock",
"provenance": {
"notes": "Offset operands keep outputs near `alpha * K * aOffset * bOffset` with K=33, making the one-element reduction tail and `alpha` multiplier observable on the register-blocked rank-4 route."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [1, 2, 65, 33],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [2, 33, 67],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [1, 2, 65, 67], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "transbatch_a_dense_m_tail_f16_offset_alpha_scale_lock",
"provenance": {
"notes": "Offset operands make each output proportional to `alpha * K`, exposing the [M, batch, K] transBatchA stride, K=32 contraction, and `alpha = 0.5` scale."
},
"attrs": { "alpha": 0.5, "transBatchA": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [65, 2, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.1, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.1, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 65, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "aligned_f16_transA_transB_alpha_offset_scale_lock",
"provenance": {
"notes": "Offset operands keep the doubly transposed output proportional to `alpha * K`, making the K=32 contraction and `alpha = 0.5` epilogue observable on subgroup-matrix and portable tiled routes."
},
"attrs": { "transA": 1, "transB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "f16_unaligned_3x5x7_offset_scale_lock",
"provenance": {
"notes": "Offset operands in a 3x5 by 5x7 multiply keep outputs proportional to K, exposing dropped reduction elements or doubled tails on the unaligned scalar and tiled routes."
},
"inputs": {
"A": {
"dtype": "float16",
"shape": [3, 5],
"data": { "kind": "fillFloat32", "sinStep": 0.015, "cosStep": 0.021, "scale": 0.2, "offset": 0.6 }
},
"B": {
"dtype": "float16",
"shape": [5, 7],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.011, "scale": 0.2, "offset": 0.5 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [3, 7], "tolerance": 0.01, "relTolerance": 0.005 } }
},
{
"name": "aligned_f16_plain_64x32x64_offset_scale_lock",
"provenance": {
"notes": "Offset operands keep each fully aligned M=64, K=32, N=64 output proportional to K, making the subgroup-matrix reduction count and scratch drain observable."
},
"inputs": {
"A": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "aligned_f16_batched_plain_2x64x32x64_offset_scale_lock",
"provenance": {
"notes": "Two batches carry distinct offset operands, keeping outputs proportional to K and making both the batch stride and aligned subgroup-matrix reduction count observable."
},
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [2, 32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 64, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "subgroup_matrix_m_tail_57_partial_block_f16_offset_scale_lock",
"provenance": {
"notes": "M=57 leaves 25 rows after one full 32-row tile. Offset operands require tail rows to match the full rows' expected magnitude, exposing a short reduction or stale scratch value."
},
"inputs": {
"A": {
"dtype": "float16",
"shape": [57, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.023, "scale": 0.2, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.011, "scale": 0.2, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [57, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "aligned_f16_transA_64x32_offset_scale_lock",
"provenance": {
"notes": "With only A transposed, offset operands keep each output proportional to K and expose both a transposed-A stride error and an incorrect reduction count."
},
"attrs": { "transA": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "transA_transB_subgroup_matrix_m_tail_50_f16_offset_scale_lock",
"provenance": {
"notes": "Both operands are transposed and M=50 leaves an 18-row tail. Offset operands make the guarded tail rows' magnitude and placement independently observable."
},
"attrs": { "transA": 1, "transB": 1, "alpha": 1 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [32, 50],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2, "offset": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2, "offset": 0.4 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [50, 64], "tolerance": 0.03, "relTolerance": 0.01 } }
},
{
"name": "f16_rank3_by_broadcast_rank3_offset_scale_lock",
"provenance": {
"notes": "f16_rank3_by_broadcast_rank3 cancels to 0.076 under a 0.02 absolute tolerance (26% blind). Offsetting both operands makes each element ~K * aOffset * bOffset over K=3, so the shared single-batch B - read by both output batches - is pinned for value as well as for broadcast addressing."
},
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 2, 3],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.027, "scale": 0.2, "offset": 1.0 }
},
"B": {
"dtype": "float16",
"shape": [1, 3, 4],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.007, "scale": 0.2, "offset": 0.8 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 2, 4], "tolerance": 0.01, "relTolerance": 0.005 } }
},
{
"name": "rank6_four_batch_dims",
"attrs": { "alpha": 1, "transA": 0, "transB": 0, "transBatchA": 0, "transBatchB": 0 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 2, 1, 2, 2, 3],
"data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.29, "scale": 0.5 }
},
"B": {
"dtype": "float32",
"shape": [1, 1, 3, 1, 3, 4],
"data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.31, "scale": 0.25 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 2, 3, 2, 2, 4], "tolerance": 0.000001 } }
},
{
"name": "trans_batch_a_and_trans_a_with_trans_batch_b_and_trans_b",
"provenance": {
"notes": "Combines transBatchA with transA and transBatchB with transB, checking both logical extents and both stride pairs. Expected values follow the documented storage orders A[k][batch][m] and B[n][batch][k]."
},
"attrs": { "transA": 1, "transB": 1, "transBatchA": 1, "transBatchB": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [4, 2, 3],
"data": {
"kind": "values",
"values": [0.0, 1.0, 2.0, 4.0, 5.0, 6.0, 10.0, 11.0, 12.0, 14.0, 15.0, 16.0, 20.0, 21.0, 22.0, 24.0, 25.0, 26.0, 30.0, 31.0, 32.0, 34.0, 35.0, 36.0]
}
},
"B": {
"dtype": "float32",
"shape": [5, 2, 4],
"data": {
"kind": "values",
"values": [0.0, 1.0, 2.0, 3.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 31.0, 32.0, 33.0, 34.0]
}
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [2, 3, 5],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": [140.0, 560.0, 980.0, 1400.0, 1820.0, 146.0, 594.0, 1042.0, 1490.0, 1938.0, 152.0, 628.0, 1104.0, 1580.0, 2056.0, 392.0, 924.0, 1456.0, 1988.0, 2520.0, 410.0, 970.0, 1530.0, 2090.0, 2650.0, 428.0, 1016.0, 1604.0, 2192.0, 2780.0]
}
}
}
},
{
"name": "subgroup_matrix_band_m8_f16",
"attrs": { "alpha": 2 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [8, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021 }
},
"B": {
"dtype": "float16",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [8, 64], "tolerance": 0.005 } }
},
{
"name": "subgroup_matrix_splitk_m_tail_f16",
"attrs": { "alpha": 2 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [10, 2048],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021 }
},
"B": {
"dtype": "float16",
"shape": [2048, 256],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.031 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [10, 256], "tolerance": 0.005 } }
},
{
"name": "subgroup_matrix_splitk_alpha_scaled_f32",
"attrs": { "alpha": 1.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [16, 1024],
"data": { "kind": "fillFloat32", "sinStep": 0.03, "cosStep": 0.07, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [1024, 128],
"data": { "kind": "fillFloat32", "sinStep": 0.041, "cosStep": 0.089, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [16, 128], "tolerance": 0.0002 } }
},
{
"name": "band_vec4_alpha_scaled_m8_k256_n512",
"provenance": {
"notes": "Route lock for the few-row band without a K split: eight rows over four 128-column groups, alpha folded into the vec4 store."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [8, 256],
"data": { "kind": "fillFloat32", "sinStep": 0.07, "cosStep": 0.13, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [256, 512],
"data": { "kind": "fillFloat32", "sinStep": 0.05, "cosStep": 0.19, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [8, 512], "tolerance": 0.0001 } }
},
{
"name": "subgroup_matrix_batched_transB_small_m_f16",
"attrs": { "transB": 1, "alpha": 0.25 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 4, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.023, "scale": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [2, 64, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.009, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 4, 64], "tolerance": 0.01 } }
},
{
"name": "subgroup_matrix_transA_small_m_f16",
"attrs": { "transA": 1, "alpha": 3 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [64, 8],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021 }
},
"B": {
"dtype": "float16",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [8, 64], "tolerance": 0.005 } }
},
{
"name": "f32_decode_gemv_m1_k65_n68_alpha_half",
"provenance": {
"notes": "A compact M=1 GEMV with alpha=0.5 exercises a non-unit multiplier folded into the store as a baked constant. The expected output verifies that the multiplier is applied exactly once."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [1, 65],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [65, 68],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [1, 68], "tolerance": 0.0002 } }
},
{
"name": "f16_rank4_by_rank2_shared_weight_m33_k34_n66",
"provenance": {
"notes": "Shared rank-2 B across both rank-4 batch axes; covers subgroup-matrix admission, partial tiles and its small-M fallback without changing accumulation precision."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 3, 33, 34],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021 }
},
"B": {
"dtype": "float16",
"shape": [34, 66],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 3, 33, 66], "tolerance": 0.001 } }
},
{
"name": "f16_rank4_by_rank2_shared_weight_m8_k32_n64",
"provenance": {
"notes": "Shared rank-2 B across both rank-4 batch axes; covers subgroup-matrix admission, partial tiles and its small-M fallback without changing accumulation precision."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 3, 8, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 3, 8, 64], "tolerance": 0.001 } }
},
{
"name": "f16_rank4_by_rank2_shared_weight_m1_k32_n64",
"provenance": {
"notes": "Shared rank-2 B across both rank-4 batch axes; covers subgroup-matrix admission, partial tiles and its small-M fallback without changing accumulation precision."
},
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 3, 1, 32],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021 }
},
"B": {
"dtype": "float16",
"shape": [32, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 3, 1, 64], "tolerance": 0.001 } }
},
{
"name": "transbatch_b_aligned_occupancy_float16",
"attrs": { "transBatchB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [2, 128, 128],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.05, "offset": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [128, 2, 512],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.07, "offset": 0.3 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [2, 128, 512], "tolerance": 0.001, "relTolerance": 0.001 } }
},
{
"name": "transbatch_b_aligned_occupancy_float32",
"attrs": { "transBatchB": 1, "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [2, 128, 128],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.05, "offset": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [128, 2, 512],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.07, "offset": 0.3 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [2, 128, 512], "tolerance": 0.0001, "relTolerance": 0.00002 } }
},
{
"name": "transbatch_b_portable_reg_aligned_float16",
"attrs": { "transBatchB": 1, "alpha": -0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [4, 128, 128],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.05, "offset": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [128, 4, 512],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.07, "offset": 0.3 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [4, 128, 512], "tolerance": 0.001, "relTolerance": 0.001 } },
"provenance": {
"notes": "Portable register tile transBatchB: physical B[K,batch,N], natural tile count reaches the shared occupancy gate; negative alpha and positive inputs avoid cancellation."
}
},
{
"name": "transbatch_b_portable_reg_tails_float16",
"attrs": { "transBatchB": 1, "alpha": -0.5 },
"inputs": {
"A": {
"dtype": "float16",
"shape": [3, 129, 131],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.05, "offset": 0.2 }
},
"B": {
"dtype": "float16",
"shape": [131, 3, 513],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.07, "offset": 0.3 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [3, 129, 513], "tolerance": 0.001, "relTolerance": 0.001 } },
"provenance": {
"notes": "Portable register tile transBatchB: physical B[K,batch,N], natural tile count reaches the shared occupancy gate; negative alpha and positive inputs avoid cancellation."
}
},
{
"name": "transbatch_b_portable_reg_aligned_float32",
"attrs": { "transBatchB": 1, "alpha": -0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [4, 128, 128],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.05, "offset": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [128, 4, 512],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.07, "offset": 0.3 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [4, 128, 512], "tolerance": 0.0001, "relTolerance": 0.00002 } },
"provenance": {
"notes": "Portable register tile transBatchB: physical B[K,batch,N], natural tile count reaches the shared occupancy gate; negative alpha and positive inputs avoid cancellation."
}
},
{
"name": "transbatch_b_portable_reg_tails_float32",
"attrs": { "transBatchB": 1, "alpha": -0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [3, 129, 131],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.021, "scale": 0.05, "offset": 0.2 }
},
"B": {
"dtype": "float32",
"shape": [131, 3, 513],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.029, "scale": 0.07, "offset": 0.3 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [3, 129, 513], "tolerance": 0.0001, "relTolerance": 0.00002 } },
"provenance": {
"notes": "Portable register tile transBatchB: physical B[K,batch,N], natural tile count reaches the shared occupancy gate; negative alpha and positive inputs avoid cancellation."
}
},
{
"name": "f32_band_preferred_m4_k2048_n4096",
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [4, 2048],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.031, "scale": 0.1, "offset": 0.02 }
},
"B": {
"dtype": "float32",
"shape": [2048, 4096],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.041, "scale": 0.1, "offset": 0.03 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [4, 4096], "tolerance": 0.0001, "relTolerance": 0.00001 } },
"provenance": {
"notes": "Natural f32 preferred single-band geometry with nonuniform operands and alpha0.5. N4096 keeps the existing single-band path eligible at deep K; N2048 would select the split-band family."
}
},
{
"name": "f32_band_preferred_m16_k2560_n4096",
"attrs": { "alpha": 0.5 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [16, 2560],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.031, "scale": 0.1, "offset": 0.02 }
},
"B": {
"dtype": "float32",
"shape": [2560, 4096],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.041, "scale": 0.1, "offset": 0.03 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [16, 4096], "tolerance": 0.0001, "relTolerance": 0.00001 } },
"provenance": {
"notes": "Natural f32 preferred single-band geometry with nonuniform operands and alpha0.5. N4096 keeps the existing single-band path eligible at deep K; N2048 would select the split-band family."
}
}
]
}