| { |
| "op": "ai.onnx.MatMulInteger", |
| "fixtureArrays": { |
| "dp4a_s8_pattern": [-128, 127, 0, -1, 56, -77, 3, 100, -100, 42, -5, 19, -64, 88, -33, 7, 125, -90], |
| "dp4a_u8_pattern": [0, 255, 128, 7, 200, 31, 129, 64, 99, 3, 254, 127, 1, 88, 173, 240, 16, 5], |
| "ort_u8s8_per_column_batched_zero_point_input_b": [0, -8, 2, 3, -11, -13, -8, 1, 2, 4, 4, -10, 3, 2, -11, 2, 0, -8, 2, 3, -11, -13, -8, 1, 2, 4, 4, -10, 3, 2, -11, 2], |
| "dp4a_u8u8_k64_no_zero_points_input_b": [7, 200, 31, 129, 64, 99, 3, 254, 127, 1, 88, 173, 240, 16, 5, 0, 255, 128], |
| "dp4a_s8s8_k260_both_zero_points_tails_input_b": [-77, 3, 100, -100, 42, -5, 19, -64, 88, -33, 7, 125, -90, -128, 127, 0, -1, 56], |
| "dp4a_u8u8_k260_both_zero_points_tails_input_b": [64, 99, 3, 254, 127, 1, 88, 173, 240, 16, 5, 0, 255, 128, 7, 200, 31, 129], |
| "ort_s8s8_a_nd_by_b_nd_scalar_zero_points_input_a": [-3, 7, 5, -6, 4, -5, 8, 7, -3, 7, 5, -6, 4, -5, 8, 7], |
| "ort_s8s8_a_nd_by_b_nd_scalar_zero_points_output_y": [-55, 16, 89, -44, 122, 154, 68, -39, -55, 16, 89, -44, 122, 154, 68, -39], |
| "dp4a_tail_k130_rank2_u8u8_scalar_zp_exact_input_a": [0, 255, 121, 7, 200, 31, 129, 64, 99, 3, 254, 127, 1, 88, 173, 240, 16, 5], |
| "dp4a_gemv_no_zero_s8s8_m1_k64_n512_input_b": [2, -1, 3, -2, 1, 4, -3, 2, -5, 6, 0, -4, 3, 1, -2, 5, -1] |
| }, |
| "cases": [ |
| { |
| "name": "uint8_uint8_scalar_zero_points", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [2, 3], |
| "data": { "kind": "values", "values": [130, 129, 128, 127, 126, 125] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [3, 2], |
| "data": { "kind": "values", "values": [127, 128, 129, 130, 131, 132] } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [128] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [129] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2] } } |
| }, |
| { |
| "name": "int8_uint8_negative_values", |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 2], "data": { "kind": "values", "values": [-3, -2, 1, 4] } }, |
| "b": { "dtype": "uint8", "shape": [2, 3], "data": { "kind": "values", "values": [10, 20, 30, 40, 50, 60] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-1] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [30] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 3] } } |
| }, |
| { |
| "name": "ort_2d_s8s8", |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 4], "data": { "kind": "values", "values": [-3, 7, 5, -6, 4, -5, 8, 7] } }, |
| "b": { |
| "dtype": "int8", |
| "shape": [4, 4], |
| "data": { "kind": "values", "values": [5, -3, 7, 8, -6, -8, -3, 6, 7, 9, 9, -5, 8, 7, -6, 7] } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 4], "tolerance": 0 } }, |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_t" |
| } |
| }, |
| { |
| "name": "uint8_zero_k_dimension_outputs_zero", |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [2, 0], "data": { "kind": "values", "values": [] } }, |
| "b": { "dtype": "uint8", "shape": [0, 3], "data": { "kind": "values", "values": [] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [17] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [23] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 3], "tolerance": 0 } } |
| }, |
| { |
| "name": "int8_nonzero_zero_points_large_accumulator", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 4], |
| "data": { "kind": "values", "values": [127, -128, 64, -64, -1, 2, -3, 4] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [4, 2], |
| "data": { "kind": "values", "values": [-128, 127, 64, -64, 32, -32, -16, 16] } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-3] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_empty_m_dimension", |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [0, 3], "data": { "kind": "values", "values": [] } }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [1, 4, 2, 5, 3, 6] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [12] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [0, 2], "tolerance": 0 } }, |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_2D_empty_input" |
| } |
| }, |
| { |
| "name": "ort_1x1_u8u8_scalar_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger" |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 1], "data": { "kind": "values", "values": [11] } }, |
| "b": { "dtype": "uint8", "shape": [1, 1], "data": { "kind": "values", "values": [13] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [12] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [12] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [1, 1], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_u8u8_zero_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_WithZero_ZeroPoint" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [4, 3], |
| "data": { "kind": "values", "values": [11, 7, 3, 10, 6, 2, 9, 5, 1, 8, 4, 0] } |
| }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [1, 4, 2, 5, 3, 6] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [4, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_int8_uint8_2d_zero_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_2D" |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 3], "data": { "kind": "values", "values": [-3, 7, 5, 4, -5, 8] } }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [5, 12, 7, 2, 9, 6] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_int8_uint8_2d_omitted_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_2D" |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 3], "data": { "kind": "values", "values": [-3, 7, 5, 4, -5, 8] } }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [5, 12, 7, 2, 9, 6] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "only_b_zero_point_present", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Covers ONNX optional-input behavior with a_zero_point omitted and b_zero_point supplied." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [2, 3], "data": { "kind": "values", "values": [2, 5, 9, 11, 17, 23] } }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [3, 7, 13, 19, 29, 31] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [10] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "only_a_zero_point_present", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Covers ONNX optional-input behavior with b_zero_point omitted and a_zero_point supplied." |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 3], "data": { "kind": "values", "values": [-9, -1, 6, 13, -7, 4] } }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [5, 12, 7, 2, 9, 6] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [2] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_int8_uint8_2d_nonzero_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_2D_WithZeroPoints" |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 3], "data": { "kind": "values", "values": [-3, 7, 5, 4, -5, 8] } }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [15, 22, 17, 12, 19, 16] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [2] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [10] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "rank1_only_b_zero_point_present", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Covers rank-1 dot product optional-input behavior with a_zero_point omitted and b_zero_point supplied." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [3], "data": { "kind": "values", "values": [10, 20, 30] } }, |
| "b": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [1, -1, 2] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [], "tolerance": 0 } } |
| }, |
| { |
| "name": "rank1_only_a_zero_point_present", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Covers rank-1 dot product optional-input behavior with b_zero_point omitted and a_zero_point supplied." |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [-1, 2, -3] } }, |
| "b": { "dtype": "uint8", "shape": [3], "data": { "kind": "values", "values": [10, 20, 30] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [], "tolerance": 0 } } |
| }, |
| { |
| "name": "rank1_zero_points_omitted", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Completes the rank-1 dot-product presence matrix with both zero points omitted and defaulting to zero." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [3], "data": { "kind": "values", "values": [1, 2, 3] } }, |
| "b": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [4, 5, 6] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [], "data": { "kind": "values", "values": [32] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "ort_1d_dot_u8u8_rank0_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_1D_Vector_DotProduct" |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [4], "data": { "kind": "values", "values": [1, 2, 3, 4] } }, |
| "b": { "dtype": "uint8", "shape": [4], "data": { "kind": "values", "values": [5, 6, 7, 8] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_1d_dot_s8s8_rank0_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_1D_Vector_DotProduct_int8" |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [1, -2, 3] } }, |
| "b": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [4, 5, -6] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_1d_dot_u8s8_rank0_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_1D_Vector_DotProduct_uint8_int8" |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [3], "data": { "kind": "values", "values": [10, 20, 30] } }, |
| "b": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [1, -1, 2] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_1d_dot_s8u8_rank0_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_1D_Vector_DotProduct_int8_uint8" |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [-1, 2, -3] } }, |
| "b": { "dtype": "uint8", "shape": [3], "data": { "kind": "values", "values": [10, 20, 30] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_int8_uint8_batched_nd_by_nd", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_A_ND_B_ND" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [1, -2, 3, -1, 4, -2, 1, -2, 3, -1, 4, -2] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [2, 3, 2], |
| "data": { "kind": "values", "values": [10, 20, 30, 40, 50, 60, 10, 20, 30, 40, 50, 60] } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 2], |
| "data": { "kind": "values", "values": [100, 120, 10, 20, 100, 120, 10, 20] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_int8_uint8_batched_nd_by_2d", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_A_ND_B_2D" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [1, -2, 3, -1, 4, -2, 2, 0, -1, 0, 3, 1] } |
| }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [10, 20, 30, 40, 50, 60] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 2], |
| "data": { "kind": "values", "values": [100, 120, 10, 20, -30, -20, 140, 180] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "batched_nd_by_2d_no_zero_points", |
| "provenance": { |
| "notes": "Both zero points omitted on an A-rank-3 by B-rank-2 product; the ONNX default of 0 makes the expected output identical to ort_int8_uint8_batched_nd_by_2d." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [1, -2, 3, -1, 4, -2, 2, 0, -1, 0, 3, 1] } |
| }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [10, 20, 30, 40, 50, 60] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 2], |
| "data": { "kind": "values", "values": [100, 120, 10, 20, -30, -20, 140, 180] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "batched_nd_by_2d_a_zero_point_only", |
| "provenance": { |
| "notes": "A-rank-3 by B-rank-2 with only the A zero point supplied, so the B zero point takes the ONNX default of 0." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [1, -2, 3, -1, 4, -2, 2, 0, -1, 0, 3, 1] } |
| }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [10, 20, 30, 40, 50, 60] } }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 2], |
| "data": { "kind": "values", "values": [10, 0, -80, -100, -120, -140, 50, 60] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_u8s8_per_column_rank2_zero_point", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_PerColumn_ND", |
| "notes": "Rank-2 slice of ORT's per-column zero-point case." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [2, 4], |
| "data": { "kind": "values", "values": [125, 135, 133, 122, 132, 123, 136, 135] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [4, 4], |
| "data": { "kind": "values", "values": [0, -8, 2, 3, -11, -13, -8, 1, 2, 4, 4, -10, 3, 2, -11, 2] } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [133] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [4], "data": { "kind": "values", "values": [1, -2, 2, -1] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 4], |
| "data": { "kind": "values", "values": [-38, -18, 123, -61, 128, 142, 80, -45] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_u8s8_per_column_batched_zero_point", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_PerColumn_ND" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": [125, 135, 133, 122, 132, 123, 136, 135, 125, 135, 133, 122, 132, 123, 136, 135] |
| } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 4, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_u8s8_per_column_batched_zero_point_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [133] } }, |
| "b_zero_point": { |
| "dtype": "int8", |
| "shape": [2, 1, 4], |
| "data": { "kind": "values", "values": [1, -2, 2, -1, 2, -4, -1, 0] } |
| } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": [-38, -18, 123, -61, 128, 142, 80, -45, -21, -52, 72, -44, 134, 130, 62, -39] |
| }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_s8u8_per_column_batched_zero_point", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_PerColumn_ND" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 2], |
| "data": { "kind": "values", "values": [1, -2, 3, 4, -1, 5, 2, -3] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [10, 20, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9] } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [0] } }, |
| "b_zero_point": { |
| "dtype": "uint8", |
| "shape": [2, 1, 3], |
| "data": { "kind": "values", "values": [1, 2, 3, 4, 5, 6] } |
| } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [9, 18, 27, 27, 54, 81, 15, 15, 15, -9, -9, -9] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "onnx_backend_matmulinteger", |
| "provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_matmulinteger" }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [4, 3], |
| "data": { "kind": "values", "values": [11, 7, 3, 10, 6, 2, 9, 5, 1, 8, 4, 0] } |
| }, |
| "b": { "dtype": "uint8", "shape": [3, 2], "data": { "kind": "values", "values": [1, 4, 2, 5, 3, 6] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [12] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [4, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_u8u8_k64_no_zero_points", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [5, 64], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [64, 9], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8u8_k64_no_zero_points_input_b" } } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [5, 9], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_u8s8_k8_a_zero_point_only", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [3, 8], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [8, 5], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [131] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [3, 5], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_s8u8_k8_b_zero_point_only", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [3, 8], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [8, 5], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [200] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [3, 5], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_u8s8_k12_both_zero_points", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [4, 12], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [12, 6], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [117] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-9] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [4, 6], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_s8s8_k260_both_zero_points_tails", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [9, 260], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [260, 17], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_s8s8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-7] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [9, 17], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_u8u8_k260_both_zero_points_tails", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [9, 260], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [260, 17], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_u8u8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [128] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [255] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [9, 17], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_u8u8_k256_no_zero_points_large", |
| "provenance": { |
| "notes": "A compact wide, short-K case exercises the M32/N128/KWords32 packed-dot tile with omitted zero points while keeping the expected int32 output inexpensive to compute." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [256, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8u8_k64_no_zero_points_input_b" } } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } }, |
| "tunables": { "DP4A_SHORT_K_MIN_MN": 64 } |
| }, |
| { |
| "name": "dp4a_s8s8_medium_k_m64_k96_n128", |
| "provenance": { |
| "notes": "A compact medium-K case exercises the M32/N64 packed-dot reuse tile with signed inputs and exact int32 output." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [64, 96], |
| "data": { "kind": "cycle", "values": [-128, 127, 0, -1, 56, -77, 3, 100, -100, 42, -5, 19, -64, 88, -33, 7] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [96, 128], |
| "data": { "kind": "cycle", "values": [7, -11, 63, -64, 126, -127, 4, 91, -37, 18, -2, 55, -83, 32, 1, -99] } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } }, |
| "tunables": { "DP4A_SHORT_K_MAX": 64, "DP4A_MEDIUM_K_MAX": 128, "DP4A_MEDIUM_K_MIN_MN": 64 } |
| }, |
| { |
| "name": "dp4a_u8s8_k256_a_zero_point_only_large", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [256, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [131] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_s8u8_k256_b_zero_point_only_large", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [256, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [200] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_s8s8_k260_both_zero_points_large", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [65, 260], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [260, 129], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_s8s8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-7] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [65, 129], "tolerance": 0 } }, |
| "tunables": { "DP4A_LARGE_MIN_M": 64, "DP4A_LARGE_MIN_N": 128, "DP4A_LARGE_MIN_K": 256 } |
| }, |
| { |
| "name": "dp4a_rank3_by_rank3_u8s8_k256_large", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [2, 64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 256, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [131] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [-3] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_rank3_by_rank2_u8s8_k256_large", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [2, 64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [256, 128], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_s8s8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [131] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [-3] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "ort_s8s8_a_nd_by_2d_scalar_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_t_A_ND" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 4], |
| "data": { "kind": "values", "values": [-3, 7, 5, -6, 4, -5, 8, 7, 7, -4, 3, 6, -4, -5, 5, 7] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [4, 3], |
| "data": { "kind": "values", "values": [5, -3, 7, 8, -6, -8, -3, 6, 7, 9, 9, -5] } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [3] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [4] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [-49, -39, 21, -46, 103, 78, -9, 57, 69, -33, 153, 45] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_s8s8_a_nd_by_b_nd_scalar_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_t_A_ND_B_ND" |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_s8s8_a_nd_by_b_nd_scalar_zero_points_input_a" } |
| } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 4, 4], |
| "data": { |
| "kind": "values", |
| "values": [5, -3, 7, 8, -6, -8, -3, 6, 7, 9, 9, -5, 8, 7, -6, 7, 5, -3, 7, 8, -6, -8, -3, 6, 7, 9, 9, -5, 8, 7, -6, 7] |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [5] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [5] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_s8s8_a_nd_by_b_nd_scalar_zero_points_output_y" } |
| }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_s8s8_a_nd_by_b_nd_no_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_t_No_Zero_Point", |
| "notes": "Valid ORT rank-3 by rank-3 MatMulInteger with omitted zero-points." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 4], |
| "data": { "kind": "values", "values": [-8, 2, 0, -11, -1, -10, 3, 2, -8, 2, 0, -11, -1, -10, 3, 2] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 4, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_u8s8_per_column_batched_zero_point_input_b" } |
| } |
| } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_s8s8_a_nd_by_b_nd_scalar_zero_points_output_y" } |
| }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_s8s8_2d_by_b_nd_scalar_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_t_B_ND", |
| "notes": "Valid ORT rank-2 by rank-3 MatMulInteger broadcast case." |
| }, |
| "inputs": { |
| "a": { "dtype": "int8", "shape": [2, 4], "data": { "kind": "values", "values": [-3, 7, 5, -6, 4, -5, 8, 7] } }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 4, 3], |
| "data": { |
| "kind": "values", |
| "values": [5, -3, 7, 8, -6, -8, -3, 6, 7, 9, 9, -5, 5, -3, 7, 8, -6, -8, -3, 6, 7, 9, 9, -5] |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [1] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [2] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 3], |
| "data": { "kind": "values", "values": [-45, -61, -11, -20, 103, 68, -45, -61, -11, -20, 103, 68] }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "ort_s8s8_a_nd_by_b_nd_a_zero_point_only", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_t_A_Has_Zero_Point", |
| "notes": "Valid ORT rank-3 by rank-3 MatMulInteger with only A zero-point present." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_s8s8_a_nd_by_b_nd_scalar_zero_points_input_a" } |
| } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 4, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_u8s8_per_column_batched_zero_point_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [5] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 4], |
| "data": { |
| "kind": "values", |
| "values": { "$ref": "#/fixtureArrays/ort_s8s8_a_nd_by_b_nd_scalar_zero_points_output_y" } |
| }, |
| "tolerance": 0 |
| } |
| } |
| }, |
| { |
| "name": "broadcast_4d_u8u8", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_A_ND_B_ND", |
| "notes": "Compact 4D MatMul broadcast extension of ORT's ND MatMulInteger coverage." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [1, 2, 2, 2], |
| "data": { "kind": "values", "values": [1, 2, 3, 4, 5, 6, 7, 8] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [2, 1, 2, 2], |
| "data": { "kind": "values", "values": [1, 0, 0, 1, 2, 1, 1, 2] } |
| } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 2, 2], |
| "tolerance": 0, |
| "data": { "kind": "values", "values": [1, 2, 3, 4, 5, 6, 7, 8, 4, 5, 10, 11, 16, 17, 22, 23] } |
| } |
| } |
| }, |
| { |
| "name": "broadcast_4d_u8u8_zero_points", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "test": "MatmulIntegerOpTest.MatMulInteger_int8_uint8_A_ND_B_ND", |
| "notes": "Compact 4D broadcast case with scalar zero-points." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [1, 2, 2, 2], |
| "data": { "kind": "values", "values": [1, 2, 3, 4, 5, 6, 7, 8] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [2, 1, 2, 2], |
| "data": { "kind": "values", "values": [1, 0, 0, 1, 2, 1, 1, 2] } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [1] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { |
| "dtype": "int32", |
| "shape": [2, 2, 2, 2], |
| "tolerance": 0, |
| "data": { "kind": "values", "values": [-1, 0, -3, -2, -5, -4, -7, -6, 0, 1, 2, 3, 4, 5, 6, 7] } |
| } |
| } |
| }, |
| { |
| "name": "dispatch_cliff_mtile_rows_524296", |
| "provenance": { |
| "notes": "M=524296 rows -> M-tiles=ceil(524296/8)=65537 > 65535. dp4a_rank2 is capped (ceil(M/8)<=65535) so this falls through to the folded matmul-integer rank2 (gid.y + gid.z*nwg.y*WORKGROUP_SIZE_Y at nwg.z=2). Validates both the fold and the dp4a cap-fallthrough; before the fold the plan guard throws." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [524296, 4], "data": { "kind": "cycle", "values": [1, 2, 3, 4, 5, 6, 7] } }, |
| "b": { "dtype": "uint8", "shape": [4, 2], "data": { "kind": "cycle", "values": [2, 0, 1, 3, 4, 1, 2, 5] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "constant", "value": 1 } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "constant", "value": 2 } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [524296, 2], "tolerance": 0 } } |
| }, |
| { |
| "name": "percol_b_zero_point_k256_u8s8_model_scale", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Per-column signed weight zero points across N=128 with a scalar activation zero point at K=256. Exercises packed rank-2 accumulation and verifies that every output column applies its own zero point." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [256, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [130] } }, |
| "b_zero_point": { |
| "dtype": "int8", |
| "shape": [128], |
| "data": { "kind": "cycle", "values": [1, -2, 2, -1, 3, -3, 0, -4, 4, -5, 5] } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "percol_b_zero_point_no_azp_below_dp4a_floor", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Per-column weight zero-point with NO a_zero_point below the dp4a floor: K=8 misses the K >= 64 guard and numel(Y)=12 misses the 8192-element guard, so dp4a_rank2_b_zero_point_per_column is ineligible and the naive per-column kernel runs. b_zero_point rank-1 size N=3 == dim(Y,1); the absent a_zero_point defaults to 0." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [4, 8], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [8, 3], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b_zero_point": { "dtype": "int8", "shape": [3], "data": { "kind": "values", "values": [1, -2, 2] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [4, 3], "tolerance": 0 } } |
| }, |
| { |
| "name": "percol_b_zero_point_no_azp_k256_u8s8", |
| "provenance": { |
| "source": "onnxruntime/test/providers/cpu/math/matmul_integer_test.cc", |
| "notes": "Per-column signed weight zero points across N=128 with the activation zero point omitted at K=256. Exercises packed rank-2 accumulation and the default activation zero point of zero, including the unsigned-activation bias fold." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [256, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b_zero_point": { |
| "dtype": "int8", |
| "shape": [128], |
| "data": { "kind": "cycle", "values": [1, -2, 2, -1, 3, -3, 0, -4, 4, -5, 5] } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "k258_unaligned_k_scalar_zp_u8u8", |
| "provenance": { |
| "notes": "K=258 is intentionally not divisible by four. The large output would otherwise admit packed accumulation, so this case verifies that the scalar route handles the unaligned reduction tail and applies scalar zero points exactly." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 258], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [258, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8u8_k64_no_zero_points_input_b" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [128] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [127] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "large_accumulator_dp4a_k1024_u8u8_maxmag", |
| "provenance": { |
| "notes": "Confirms the dp4a path and the naive path agree at large int32 accumulation. M=64,K=1024,N=128 -> numel(Y)=8192 and K%4==0 and K>=256, so this selects the dp4a (dot4I8Packed) kernel. Inputs include the max-magnitude bytes (255 for u8) so per-row accumulation reaches ~1024*255*255~=66.6M, well within int32, exercising the bias/zero-point fold (ca,cb,kcc) in quant-dp4a-matmul at large magnitude. ORT/CPU validates." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 1024], |
| "data": { "kind": "cycle", "values": [255, 0, 255, 1, 254, 2, 200, 128, 64, 99, 3, 250, 7, 240, 16, 5] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [1024, 128], |
| "data": { "kind": "cycle", "values": [255, 254, 1, 0, 200, 129, 64, 99, 3, 250, 7, 240, 16, 5, 128, 2] } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [3] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [7] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_rank4_scalar_s8s8_2x2x64x128", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 64, 128], |
| "data": { "kind": "cycle", "values": [3, -2, 1, 4, -3, 2, -1, 5, -4, 0] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 2, 128, 64], |
| "data": { "kind": "cycle", "values": [2, -1, 3, -2, 1, 4, -3, 2] } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "cycle", "values": [1] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "cycle", "values": [2] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2, 64, 64] } } |
| }, |
| { |
| "name": "dp4a_rank4_no_zero_s8s8_2x2x64x128", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [2, 2, 64, 128], |
| "data": { "kind": "cycle", "values": [3, -2, 1, 4, -3, 2, -1, 5, -4, 0] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [2, 2, 128, 64], |
| "data": { "kind": "cycle", "values": [2, -1, 3, -2, 1, 4, -3, 2] } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 2, 64, 64] } } |
| }, |
| { |
| "name": "dp4a_gemv_m1_u8s8_k257_n512_scalar_zp_tail", |
| "provenance": { |
| "notes": "M=1 int8 decode GEMV with a one-lane K tail routes to the tileM=1 ILP DP4A config; validates its unrolled full-word loop and scalar tail against the reference." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [1, 257], |
| "data": { |
| "kind": "cycle", |
| "values": [0, 255, 128, 7, 200, 31, 129, 64, 99, 3, 254, 127, 1, 88, 173, 240, 16, 5, 222, 44, 90, 17] |
| } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [257, 512], |
| "data": { |
| "kind": "cycle", |
| "values": [-128, 127, 0, 63, -64, 31, -32, 7, -100, 50, -7, 88, -1, 120, -45, 15, 3, -99, 66, -17, 42, -88, 11, -120] |
| } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [128] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-3] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [1, 512], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_gemv_m1_u8u8_k128_n768_no_zp", |
| "provenance": { |
| "notes": "M=1 int8 decode GEMV, no zero points: exercises the tileM=1 dp4a GEMV no-zero-point path." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [1, 128], |
| "data": { "kind": "cycle", "values": [0, 255, 128, 7, 200, 31, 129, 64, 99, 3, 254, 127, 1, 88, 173, 240] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [128, 768], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [1, 768], "tolerance": 0 } } |
| }, |
| { |
| "name": "empty_n_dimension_outputs_empty_u8u8", |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [2, 3], "data": { "kind": "values", "values": [11, 7, 3, 10, 6, 2] } }, |
| "b": { "dtype": "uint8", "shape": [3, 0], "data": { "kind": "values", "values": [] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [12] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [0] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [2, 0], "data": { "kind": "values", "values": [] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "dp4a_unaligned_n130_percol_b_zp_u8s8_k256", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [256, 130], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [130] } }, |
| "b_zero_point": { |
| "dtype": "int8", |
| "shape": [130], |
| "data": { "kind": "cycle", "values": [1, -2, 2, -1, 3, -3, 0, -4, 4, -5, 5] } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 130], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_partial_m63_n130_tile_edge_s8s8_k256", |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [63, 256], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [256, 130], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_s8s8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-7] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [63, 130], "tolerance": 0 } } |
| }, |
| { |
| "name": "kfloor_k124_naive_rank2_both_zp_correctness", |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [9, 124], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [124, 17], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [117] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-9] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [9, 17], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_k124_rank2_no_zero_points_exact", |
| "provenance": { |
| "notes": "Locks the lowered aligned-DP4A floor for realistic K=124 projections; output size is large enough for cooperative tiling to amortize its barriers." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 124], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_u8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [124, 128], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_tail_k130_rank2_u8u8_scalar_zp_exact", |
| "provenance": { |
| "notes": "Exactness lock for the shared DP4A two-lane final word; full words must remain branch-free while raw-bias padding keeps the missing lanes neutral." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [64, 130], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_tail_k130_rank2_u8u8_scalar_zp_exact_input_a" } |
| } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [130, 128], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_u8u8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [121] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [117] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_tail_k131_rank2_s8s8_scalar_zp_exact", |
| "provenance": { |
| "notes": "Exactness lock for the shared signed DP4A three-lane final word and its single raw-zero padding lane." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [64, 131], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [131, 128], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_s8s8_k260_both_zero_points_tails_input_b" } |
| } |
| }, |
| "a_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [5] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-7] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [64, 128], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_tail_k129_batched3_by_rank2_exact", |
| "provenance": { |
| "notes": "Compact correctness lock for realistic adapter widths with a one-element K tail; sized to select the packed tail kernel." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [2, 8, 129], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_tail_k130_rank2_u8u8_scalar_zp_exact_input_a" } |
| } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [129, 512], |
| "data": { "kind": "cycle", "values": { "$ref": "#/fixtureArrays/dp4a_s8_pattern" } } |
| }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [121] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [], "data": { "kind": "values", "values": [-4] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [2, 8, 512], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_tail_k63_rank2_u8s8_scalar_zp_exact", |
| "provenance": { |
| "notes": "Exactness and direct-route lock for the 32<=K<128 packed-tail range opened by the K63 projection pathology fix." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [16, 63], "data": { "kind": "cycle", "values": [0, 255, 121, 7, 200, 31] } }, |
| "b": { "dtype": "int8", "shape": [63, 512], "data": { "kind": "cycle", "values": [-128, 127, 0, -1, 56, -77] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [1], "data": { "kind": "values", "values": [121] } }, |
| "b_zero_point": { "dtype": "int8", "shape": [1], "data": { "kind": "values", "values": [-4] } } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [16, 512], "tolerance": 0 } } |
| }, |
| { |
| "name": "rank3_b_zero_point_only", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises a scalar b_zero_point on batched rank-3 inputs while a_zero_point independently defaults to zero." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [1, 2, 1], "data": { "kind": "values", "values": [4, 5] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [1, 1, 1], "data": { "kind": "values", "values": [18] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank3_batched_per_column_zero_point_without_a_zero_point", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises an N-D per-column b_zero_point while a_zero_point independently defaults to zero." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [2, 1, 2], "data": { "kind": "values", "values": [2, 3, 2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [2, 2, 1], "data": { "kind": "values", "values": [4, 5, 6, 7] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [2, 1, 1], "data": { "kind": "values", "values": [1, 2] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [2, 1, 1], "data": { "kind": "values", "values": [18, 23] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank2_by_rank3_zero_points_omitted", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises rank-2 by rank-3 broadcasting with both zero points omitted." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [2, 2, 1], "data": { "kind": "values", "values": [4, 5, 6, 7] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [2, 1, 1], "data": { "kind": "values", "values": [23, 33] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank2_by_rank3_a_zero_point_only", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises rank-2 by rank-3 broadcasting with only a_zero_point present." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [2, 2, 1], "data": { "kind": "values", "values": [4, 5, 6, 7] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [2, 1, 1], "data": { "kind": "values", "values": [14, 20] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank2_by_rank3_b_zero_point_only", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises rank-2 by rank-3 broadcasting with only b_zero_point present." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [2, 2, 1], "data": { "kind": "values", "values": [4, 5, 6, 7] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [2, 1, 1], "data": { "kind": "values", "values": [18, 28] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank2_by_rank3_both_zero_points", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Completes the rank-2 by rank-3 optional-presence matrix with both scalar zero points present." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [2, 2, 1], "data": { "kind": "values", "values": [4, 5, 6, 7] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [2, 1, 1], "data": { "kind": "values", "values": [11, 17] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank4_a_zero_point_only", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises a rank-4 product with only a_zero_point present." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 1, 1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [1, 1, 2, 1], "data": { "kind": "values", "values": [4, 5] } }, |
| "a_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [1, 1, 1, 1], "data": { "kind": "values", "values": [14] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "rank4_b_zero_point_only", |
| "provenance": { |
| "source": "ONNX MatMulInteger-10 optional-input contract", |
| "notes": "Exercises a rank-4 product with only b_zero_point present." |
| }, |
| "inputs": { |
| "a": { "dtype": "uint8", "shape": [1, 1, 1, 2], "data": { "kind": "values", "values": [2, 3] } }, |
| "b": { "dtype": "uint8", "shape": [1, 1, 2, 1], "data": { "kind": "values", "values": [4, 5] } }, |
| "b_zero_point": { "dtype": "uint8", "shape": [], "data": { "kind": "values", "values": [1] } } |
| }, |
| "outputs": { |
| "y": { "dtype": "int32", "shape": [1, 1, 1, 1], "data": { "kind": "values", "values": [18] }, "tolerance": 0 } |
| } |
| }, |
| { |
| "name": "dp4a_gemv_no_zero_s8s8_m1_k64_n512", |
| "provenance": { |
| "notes": "M=1 selects the dp4a GEMV tile (tileM 1) and signed inputs with both zero points omitted make the B-sum correction unnecessary, which is the only combination that renders the GEMV loop without its running row sum. N=512 and K=64 clear the route's minimum-work guards." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [1, 64], |
| "data": { "kind": "cycle", "values": [3, -2, 1, 4, -3, 2, -1, 5, -4, 0, 7, -6, 2] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [64, 512], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_gemv_no_zero_s8s8_m1_k64_n512_input_b" } |
| } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [1, 512], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_gemv_b_per_column_zero_u8u8_m1_k64_n512", |
| "provenance": { |
| "notes": "A per-column B zero point on an unsigned B, which is the only combination that renders the widening read in the per-column accessor; every other per-column case had a signed B. The zero point varies per column on a period coprime with N so a column-index error changes the result." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "uint8", |
| "shape": [1, 64], |
| "data": { "kind": "cycle", "values": [130, 129, 128, 127, 126, 200, 3, 255, 0, 64, 99] } |
| }, |
| "b": { |
| "dtype": "uint8", |
| "shape": [64, 512], |
| "data": { "kind": "cycle", "values": [127, 128, 129, 130, 131, 7, 250, 255, 0, 64, 200, 3, 90] } |
| }, |
| "b_zero_point": { |
| "dtype": "uint8", |
| "shape": [512], |
| "data": { "kind": "cycle", "values": [128, 127, 129, 0, 255, 64, 200] } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [1, 512], "tolerance": 0 } } |
| }, |
| { |
| "name": "dp4a_tail_no_zero_s8s8_m1_k66_n512", |
| "provenance": { |
| "notes": "K=66 leaves a two-lane K tail, and signed inputs with both zero points omitted drop both running sums, which is the only combination that renders the tail block without them. The tail route previously existed only with both zero points present." |
| }, |
| "inputs": { |
| "a": { |
| "dtype": "int8", |
| "shape": [1, 66], |
| "data": { "kind": "cycle", "values": [3, -2, 1, 4, -3, 2, -1, 5, -4, 0, 7, -6, 2] } |
| }, |
| "b": { |
| "dtype": "int8", |
| "shape": [66, 512], |
| "data": { |
| "kind": "cycle", |
| "values": { "$ref": "#/fixtureArrays/dp4a_gemv_no_zero_s8s8_m1_k64_n512_input_b" } |
| } |
| } |
| }, |
| "outputs": { "y": { "dtype": "int32", "shape": [1, 512], "tolerance": 0 } } |
| } |
| ] |
| } |
|
|