Xenova's picture
Xenova HF Staff
sync c928d21e6cc1
270ae6e verified
Raw
History Blame
30.8 kB
{
"op": "com.microsoft.FusedGemm",
"cases": [
{
"name": "notrans_rowbias_relu",
"provenance": { "notes": "No transpose, a row bias, and Relu." },
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [96, 80],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.18000000000000002, "cosStep": 0.32 }
},
"B": {
"dtype": "float32",
"shape": [80, 72],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.12, "cosStep": 0.24000000000000002 }
},
"C": {
"dtype": "float32",
"shape": [72],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.3, "cosStep": 0.14 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [96, 72], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "transa_rowbias_relu",
"provenance": { "notes": "transA: A stored (K, M), which changes only the load index." },
"attrs": { "transA": 1, "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [80, 96],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.19, "cosStep": 0.33 }
},
"B": {
"dtype": "float32",
"shape": [80, 72],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.13, "cosStep": 0.25 }
},
"C": {
"dtype": "float32",
"shape": [72],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.31, "cosStep": 0.15 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [96, 72], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "transb_rowbias_leaky",
"provenance": { "notes": "transB with LeakyRelu at its default slope of 0.01." },
"attrs": { "transB": 1, "activation": "LeakyRelu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [96, 80],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.2, "cosStep": 0.33999999999999997 }
},
"B": {
"dtype": "float32",
"shape": [72, 80],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.14, "cosStep": 0.26 }
},
"C": {
"dtype": "float32",
"shape": [72],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.31999999999999995, "cosStep": 0.16 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [96, 72], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "transab_rowbias_tanh",
"provenance": { "notes": "Both operands transposed, with Tanh." },
"attrs": { "transA": 1, "transB": 1, "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [80, 96],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.21000000000000002, "cosStep": 0.35 }
},
"B": {
"dtype": "float32",
"shape": [72, 80],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.15, "cosStep": 0.27 }
},
"C": {
"dtype": "float32",
"shape": [72],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.32999999999999996, "cosStep": 0.17 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [96, 72], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "notrans_nobias_sigmoid",
"provenance": { "notes": "No bias at all -- the other binding set -- with Sigmoid." },
"attrs": { "activation": "Sigmoid" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [96, 80],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.22000000000000003, "cosStep": 0.36 }
},
"B": {
"dtype": "float32",
"shape": [80, 72],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.16, "cosStep": 0.28 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [96, 72], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "transa_nobias_none",
"provenance": { "notes": "transA with no bias and no activation, which is plain Gemm." },
"attrs": { "transA": 1 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 64],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.23, "cosStep": 0.37 }
},
"B": {
"dtype": "float32",
"shape": [48, 40],
"data": {
"kind": "fillFloat32",
"scale": 0.6,
"sinStep": 0.16999999999999998,
"cosStep": 0.29000000000000004
}
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 40], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "transab_nobias_hardsigmoid",
"provenance": { "notes": "Both transposed, HardSigmoid at its 0.2/0.5 defaults." },
"attrs": { "transA": 1, "transB": 1, "activation": "HardSigmoid" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 64],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.25, "cosStep": 0.39 }
},
"B": {
"dtype": "float32",
"shape": [40, 48],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.19, "cosStep": 0.31 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 40], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "scalar_bias_relu",
"provenance": { "notes": "A scalar C, broadcast to every element." },
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.26, "cosStep": 0.4 }
},
"B": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.2, "cosStep": 0.32 }
},
"C": {
"dtype": "float32",
"shape": [1],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.38, "cosStep": 0.22 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [48, 24], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "column_bias_relu",
"provenance": { "notes": "A column C of shape (M, 1)." },
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.27, "cosStep": 0.41000000000000003 }
},
"B": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.21000000000000002, "cosStep": 0.33 }
},
"C": {
"dtype": "float32",
"shape": [48, 1],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.39, "cosStep": 0.23 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [48, 24], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "matrix_bias_relu",
"provenance": { "notes": "A full (M, N) C." },
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.28, "cosStep": 0.42 }
},
"B": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.22, "cosStep": 0.34 }
},
"C": {
"dtype": "float32",
"shape": [48, 24],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.39999999999999997, "cosStep": 0.24 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [48, 24], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "row2d_bias_tanh",
"provenance": { "notes": "A (1, N) C, the rank-2 spelling of a row bias." },
"attrs": { "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.29000000000000004, "cosStep": 0.43 }
},
"B": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.22999999999999998, "cosStep": 0.35 }
},
"C": {
"dtype": "float32",
"shape": [1, 24],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.41, "cosStep": 0.25 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [48, 24], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "alpha_beta_leaky_explicit",
"provenance": { "notes": "Explicit alpha, beta and LeakyRelu slope, none of them defaults." },
"attrs": { "alpha": 0.5, "beta": 2, "activation": "LeakyRelu", "activation_alpha": 0.25 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.30000000000000004, "cosStep": 0.44 }
},
"B": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.24, "cosStep": 0.36 }
},
"C": {
"dtype": "float32",
"shape": [24],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.42, "cosStep": 0.26 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [48, 24], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "alpha_zero_relu",
"provenance": {
"notes": "alpha = 0 nulls the product exactly rather than multiplying it, so an infinite accumulator cannot become NaN."
},
"attrs": { "alpha": 0, "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.32, "cosStep": 0.45999999999999996 }
},
"B": {
"dtype": "float32",
"shape": [24, 16],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.26, "cosStep": 0.38 }
},
"C": {
"dtype": "float32",
"shape": [16],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.43999999999999995, "cosStep": 0.28 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [32, 16], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "beta_zero_relu",
"provenance": { "notes": "beta = 0 nulls the C term the same way." },
"attrs": { "beta": 0, "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.33, "cosStep": 0.47 }
},
"B": {
"dtype": "float32",
"shape": [24, 16],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.27, "cosStep": 0.39 }
},
"C": {
"dtype": "float32",
"shape": [16],
"data": {
"kind": "fillFloat32",
"scale": 0.4,
"sinStep": 0.44999999999999996,
"cosStep": 0.29000000000000004
}
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [32, 16], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "small_unaligned_relu",
"provenance": { "notes": "M, K and N all below one tile and none a multiple of the micro-tile." },
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [7, 13],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.34, "cosStep": 0.48 }
},
"B": {
"dtype": "float32",
"shape": [13, 11],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.28, "cosStep": 0.4 }
},
"C": {
"dtype": "float32",
"shape": [11],
"data": {
"kind": "fillFloat32",
"scale": 0.4,
"sinStep": 0.45999999999999996,
"cosStep": 0.30000000000000004
}
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [7, 11], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "f16_notrans_bias_relu",
"provenance": { "notes": "float16 operands, accumulating in f32." },
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float16",
"shape": [64, 48],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.35, "cosStep": 0.49 }
},
"B": {
"dtype": "float16",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.29, "cosStep": 0.41000000000000003 }
},
"C": {
"dtype": "float16",
"shape": [32],
"data": { "kind": "fillFloat32", "scale": 0.4, "sinStep": 0.47, "cosStep": 0.31 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 32], "tolerance": 0.006, "relTolerance": 0.006 } }
},
{
"name": "f16_transb_nobias_tanh",
"provenance": { "notes": "float16 with transB and no bias." },
"attrs": { "transB": 1, "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float16",
"shape": [64, 48],
"data": { "kind": "fillFloat32", "scale": 0.9, "sinStep": 0.36, "cosStep": 0.5 }
},
"B": {
"dtype": "float16",
"shape": [32, 48],
"data": { "kind": "fillFloat32", "scale": 0.6, "sinStep": 0.3, "cosStep": 0.42000000000000004 }
}
},
"outputs": { "Y": { "dtype": "float16", "shape": [64, 32], "tolerance": 0.006, "relTolerance": 0.006 } }
},
{
"name": "pinned_transab_leaky_alpha_beta",
"provenance": {
"notes": "Hand-computed at float64 from the schema's own definition -- alpha * A' * B' + beta * C, then LeakyRelu -- with both operands transposed and every scalar explicit, so nothing in the pin comes from a default."
},
"attrs": {
"transA": 1,
"transB": 1,
"alpha": 0.75,
"beta": 1.5,
"activation": "LeakyRelu",
"activation_alpha": 0.125
},
"inputs": {
"A": {
"dtype": "float32",
"shape": [10, 12],
"data": {
"kind": "values",
"values": [0.482, 0.233, -0.17, 1.167, -0.64, 1.418, 0.317, -0.314, 0.628, 0.761, 0.092, -1.224, 1.017, 0.692, -0.239, -1.141, 0.507, 1.027, 0.417, 1.008, -1.377, -1.169, 0.818, 0.125, -0.798, 0.491, -0.397, -0.028, 1.262, 0.159, -1.326, 0.973, -0.57, 0.244, 1.381, -0.037, -1.135, -0.158, -0.767, 0.452, 1.127, -0.526, 1.431, -0.255, -0.505, 0.154, -0.336, 0.414, -0.21, 1.258, -0.143, -0.146, -1.313, 0.676, -0.406, 1.497, -1.321, 1.005, 0.274, -1.266, -1.498, -0.927, 0.328, 0.949, -0.043, 1.29, -0.088, -0.031, 0.975, 0.247, 0.213, -0.993, 0.848, 0.355, 0.745, -0.006, 0.934, -0.819, 0.242, 1.171, -0.907, -1.153, 0.361, -0.612, -0.006, -1.408, 0.302, -0.531, 1.072, 0.002, 1.211, -0.427, 0.901, -0.552, -1.033, 0.857, -1.401, -0.719, -1.259, 0.575, -1.481, 0.209, 0.107, 0.975, 0.802, 1.009, 0.77, 1.493, 1.138, -1.32, 1.026, -0.854, -0.22, 1.076, -1.45, -0.272, 0.24, 1.368, -1.149, 0.598]
}
},
"B": {
"dtype": "float32",
"shape": [8, 10],
"data": {
"kind": "values",
"values": [-0.756, 1.16, -0.81, -1.402, -0.32, -0.036, 0.068, -1.181, -1.451, -1.096, -1.089, -0.777, 1.363, 0.017, -1.26, 1.485, 0.309, 1.036, -0.894, 1.06, 0.977, -1.123, -1.369, -1.108, 0.193, 0.923, -0.324, 0.673, 1.35, -1.017, 1.247, -0.487, 0.898, 0.209, 0.78, -1.249, 1.274, -0.422, -1.282, 0.118, 0.51, 0.864, -0.868, 1.06, -1.42, -1.341, -0.608, 0.888, 1.183, 0.199, 1.423, 0.737, -0.285, 0.903, 0.487, -0.826, 0.934, -1.365, -1.034, -1.222, 1.233, -0.428, -0.705, 1.431, -1.459, 0.817, -1.361, 1.45, 0.173, -1.252, -1.415, 1.357, -0.751, 0.894, -0.602, 0.879, 1.197, 0.168, -0.407, 0.107]
}
},
"C": {
"dtype": "float32",
"shape": [8],
"data": { "kind": "values", "values": [0.235, -0.223, 0.474, -0.529, 0.922, 0.252, -0.834, 0.806] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [12, 8],
"data": {
"kind": "values",
"values": [3.370844, -0.198133, -0.199107, 2.110806, 2.109943, 2.351428, -0.592314, 1.807759, 3.546125, -0.528558, -0.131459, 2.441212, -0.108338, 5.288458, -0.547352, 0.359243, 1.611335, 2.095594, -0.005854, 0.27388, -0.058539, -0.047104, -0.393263, 2.309827, -0.150555, -0.116139, 3.783087, -0.084227, 0.70041, 1.53985, 1.740793, -0.062086, 0.411694, 4.257617, -0.456835, 0.679208, 1.923927, 0.92273, 0.173925, 4.421494, -0.056756, -0.076294, 1.740675, -0.189957, 0.772669, -0.025928, -0.126539, 0.139902, -0.006079, -0.264435, 2.411458, -0.232052, 4.870933, 2.281323, 3.98095, 3.349453, 0.326566, -0.256703, -0.033174, 0.35729, -0.059635, 1.535964, -0.698491, 1.830789, -0.243493, 1.843096, 5.123723, -0.469259, 2.88782, -0.427406, 3.358449, -0.070443, -0.430807, -0.122892, 2.170899, -0.110731, 0.818956, -0.183576, -0.207642, -0.302042, 1.494748, -0.206163, 0.184732, -0.042274, -0.008104, 2.140054, -0.375211, 0.824137, -0.229193, 0.648641, 0.168956, -0.499118, 5.959787, -0.428765, 0.006611, 2.00139]
},
"tolerance": 0.00002,
"relTolerance": 0.0002
}
}
},
{
"name": "pinned_column_bias_hardsigmoid",
"provenance": { "notes": "Independently pinned column-bias broadcast with HardSigmoid at explicit parameters." },
"attrs": { "activation": "HardSigmoid", "activation_alpha": 0.3, "activation_beta": 0.4 },
"inputs": {
"A": {
"dtype": "float32",
"shape": [9, 7],
"data": {
"kind": "values",
"values": [-1.053, 0.354, -0.86, -0.3, 0.047, -0.117, -0.287, -0.319, -1.275, -0.229, 1.483, 0.499, 0.027, -0.762, -0.484, 1.402, -0.067, -1.282, 1.004, -0.316, 0.827, -0.547, 1.007, 0.853, 1.198, 0.01, -0.728, -0.59, 0.576, -0.694, 0.916, -1.297, -1.274, -0.773, -0.042, -0.708, -0.676, -0.463, -0.763, -0.803, 0.241, -0.813, 1.473, 0.728, 0.481, 0.679, -0.263, 0.948, 0.487, -0.141, 0.651, -1.067, 0.751, 1.368, 0.358, 0.552, 0.481, -1.401, 1.166, -0.338, -0.392, 0.853, 1.361]
}
},
"B": {
"dtype": "float32",
"shape": [7, 6],
"data": {
"kind": "values",
"values": [-0.006, -1.252, 0.157, -1.417, -1.042, 1.004, -0.995, 0.459, -1.464, 0.63, -0.926, -1.197, -0.321, -0.703, 0.213, 1.042, -0.752, -1.147, -0.595, -0.542, 1.233, 0.919, -1.13, 0.523, -1.206, -1.173, -0.179, 0.925, 0.323, -1.273, 0.567, 0.742, 0.435, 0.361, -1.469, -1.195, -1.211, -0.674, 0.828, 0.501, 0.515, -0.094]
}
},
"C": {
"dtype": "float32",
"shape": [9, 1],
"data": { "kind": "values", "values": [-0.957, 0.099, -0.259, -0.825, -0.224, -0.876, 0.837, -0.309, -0.723] }
}
},
"outputs": {
"Y": {
"dtype": "float32",
"shape": [9, 6],
"data": {
"kind": "values",
"values": [0.212855, 0.802754, 0.0, 0.233126, 0.651217, 0.0, 0.669088, 0.165598, 1.0, 0.688478, 0.351265, 0.924192, 0.0, 0.328861, 0.0, 0.78732, 0.898156, 0.0, 0.0, 0.075651, 0.0, 1.0, 0.0, 0.0, 1.0, 0.323342, 0.200611, 0.0, 0.78929, 1.0, 1.0, 1.0, 0.0, 0.0, 0.599796, 0.449499, 0.3431, 0.191342, 0.941447, 0.602963, 0.0, 0.521214, 0.0, 0.039497, 0.334728, 0.865142, 0.216728, 0.0, 0.340949, 0.0, 1.0, 0.173301, 0.069842, 0.182348]
},
"tolerance": 0.00002,
"relTolerance": 0.0002
}
}
},
{
"name": "sgmat_notrans_rowbias_relu",
"provenance": {
"notes": "Aligned for the subgroup-matrix gate (M >= 32, K % 32 == 0, N % 64 == 0), so this selects notrans_sgmat_bias where the unaligned fixtures above stay on the tiled kernel. Stages A as [M,K] and B as [K,N], which is the operand orientation this transpose pair asks the matrix kernel for, and fuses Relu in the accumulator domain over a rank-1 row bias."
},
"attrs": { "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.11, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [64, 128],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.13 }
},
"C": {
"dtype": "float32",
"shape": [128],
"data": { "kind": "fillFloat32", "scale": 0.35, "sinStep": 0.23, "cosStep": 0.41 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_notrans_nobias_tanh",
"provenance": {
"notes": "The no-bias arm of the same gate and layout: the matrix kernel renders a separate set of store sites without the bias term."
},
"attrs": { "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.15, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [64, 128],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.17 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "notrans_rowbias_tanh_saturating_preactivation",
"provenance": {
"notes": "Saturating pre-activations: the row bias is large enough that most |alpha*A*B + beta*C| land past 44, where the hardware tanh's internal e^2v overflows and the quotient becomes Inf/Inf = NaN. The bias carries the magnitude rather than the operands so the accumulator stays small and well conditioned — large operands make the near-cancelling dot products disagree between accumulation orders, which is a property of the fixture rather than of the activation. Unaligned for the subgroup-matrix gate, so this covers the tiled store path."
},
"attrs": { "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [48, 32],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.15, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [32, 24],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.17 }
},
"C": {
"dtype": "float32",
"shape": [24],
"data": { "kind": "fillFloat32", "scale": 60.0, "sinStep": 0.11, "cosStep": 0.31 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [48, 24], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_notrans_rowbias_tanh_saturating_preactivation",
"provenance": {
"notes": "The aligned twin of the saturating fixture above (M >= 32, K % 32 == 0, N % 64 == 0), so the subgroup-matrix route evaluates the same overflowing pre-activations through its own store sites."
},
"attrs": { "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.15, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [64, 128],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.17 }
},
"C": {
"dtype": "float32",
"shape": [128],
"data": { "kind": "fillFloat32", "scale": 60.0, "sinStep": 0.11, "cosStep": 0.31 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_transa_rowbias_tanh",
"provenance": {
"notes": "Aligned for the subgroup-matrix gate (M >= 32, K % 32 == 0, N % 64 == 0), so this selects transa_sgmat_bias where the unaligned fixtures above stay on the tiled kernel. Stages A as [K,M] and B as [K,N], which is the operand orientation this transpose pair asks the matrix kernel for, and fuses Tanh in the accumulator domain over a rank-1 row bias."
},
"attrs": { "transA": 1, "activation": "Tanh" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.12, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [64, 128],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.14 }
},
"C": {
"dtype": "float32",
"shape": [128],
"data": { "kind": "fillFloat32", "scale": 0.35, "sinStep": 0.23, "cosStep": 0.41 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_transa_nobias_sigmoid",
"provenance": {
"notes": "The no-bias arm of the same gate and layout: the matrix kernel renders a separate set of store sites without the bias term."
},
"attrs": { "transA": 1, "activation": "Sigmoid" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.16, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [64, 128],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.18 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_transb_rowbias_sigmoid",
"provenance": {
"notes": "Aligned for the subgroup-matrix gate (M >= 32, K % 32 == 0, N % 64 == 0), so this selects transb_sgmat_bias where the unaligned fixtures above stay on the tiled kernel. Stages A as [M,K] and B as [N,K], which is the operand orientation this transpose pair asks the matrix kernel for, and fuses Sigmoid in the accumulator domain over a rank-1 row bias."
},
"attrs": { "transB": 1, "activation": "Sigmoid" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.13, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [128, 64],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.15 }
},
"C": {
"dtype": "float32",
"shape": [128],
"data": { "kind": "fillFloat32", "scale": 0.35, "sinStep": 0.23, "cosStep": 0.41 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_transb_nobias_leakyrelu",
"provenance": {
"notes": "The no-bias arm of the same gate and layout: the matrix kernel renders a separate set of store sites without the bias term."
},
"attrs": { "transB": 1, "activation": "LeakyRelu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.16999999999999998, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [128, 64],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.19 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_transab_rowbias_leakyrelu",
"provenance": {
"notes": "Aligned for the subgroup-matrix gate (M >= 32, K % 32 == 0, N % 64 == 0), so this selects transab_sgmat_bias where the unaligned fixtures above stay on the tiled kernel. Stages A as [K,M] and B as [N,K], which is the operand orientation this transpose pair asks the matrix kernel for, and fuses LeakyRelu in the accumulator domain over a rank-1 row bias."
},
"attrs": { "transA": 1, "transB": 1, "activation": "LeakyRelu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.14, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [128, 64],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.16 }
},
"C": {
"dtype": "float32",
"shape": [128],
"data": { "kind": "fillFloat32", "scale": 0.35, "sinStep": 0.23, "cosStep": 0.41 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
},
{
"name": "sgmat_transab_nobias_relu",
"provenance": {
"notes": "The no-bias arm of the same gate and layout: the matrix kernel renders a separate set of store sites without the bias term."
},
"attrs": { "transA": 1, "transB": 1, "activation": "Relu" },
"inputs": {
"A": {
"dtype": "float32",
"shape": [64, 64],
"data": { "kind": "fillFloat32", "scale": 0.8, "sinStep": 0.18, "cosStep": 0.27 }
},
"B": {
"dtype": "float32",
"shape": [128, 64],
"data": { "kind": "fillFloat32", "scale": 0.5, "sinStep": 0.19, "cosStep": 0.2 }
}
},
"outputs": { "Y": { "dtype": "float32", "shape": [64, 128], "tolerance": 0.00002, "relTolerance": 0.0002 } }
}
]
}