Skip to content

Commit a93708e

Browse files
authored
wgsl: Implement AbstractFloat matrix multiplcation tests (#3446)
Adds in a hash based filtering utility for reducing number of test cases being generated. Issue #1626
1 parent 3dcdba7 commit a93708e

14 files changed

+496
-129
lines changed

src/resources/cache/hashes.json

+103-100
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,110 @@
11
{
2-
"webgpu/shader/execution/binary/af_addition.bin": "38b261fa",
3-
"webgpu/shader/execution/binary/af_logical.bin": "a483b968",
4-
"webgpu/shader/execution/binary/af_division.bin": "ec39b0da",
5-
"webgpu/shader/execution/binary/af_matrix_addition.bin": "ca1373a8",
6-
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "406d99af",
7-
"webgpu/shader/execution/binary/af_multiplication.bin": "2eb6d50d",
8-
"webgpu/shader/execution/binary/af_remainder.bin": "e2b6b21",
9-
"webgpu/shader/execution/binary/af_subtraction.bin": "84794350",
10-
"webgpu/shader/execution/binary/f16_addition.bin": "19e8823d",
11-
"webgpu/shader/execution/binary/f16_logical.bin": "b89ca9b9",
12-
"webgpu/shader/execution/binary/f16_division.bin": "6dc4b748",
13-
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "7533842",
14-
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "2d799920",
15-
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "44e3b295",
16-
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "412f0911",
17-
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "a231201b",
18-
"webgpu/shader/execution/binary/f16_multiplication.bin": "94b11030",
19-
"webgpu/shader/execution/binary/f16_remainder.bin": "de68a200",
20-
"webgpu/shader/execution/binary/f16_subtraction.bin": "f308327a",
21-
"webgpu/shader/execution/binary/f32_addition.bin": "c87c8c08",
22-
"webgpu/shader/execution/binary/f32_logical.bin": "c7370c09",
23-
"webgpu/shader/execution/binary/f32_division.bin": "34ce65ae",
24-
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "f3808d0c",
25-
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "e33e7fe5",
26-
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "41091ebf",
27-
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "37ccb101",
28-
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "4d67866",
29-
"webgpu/shader/execution/binary/f32_multiplication.bin": "5d85a36c",
30-
"webgpu/shader/execution/binary/f32_remainder.bin": "62f591b2",
31-
"webgpu/shader/execution/binary/f32_subtraction.bin": "60fc275a",
32-
"webgpu/shader/execution/binary/i32_arithmetic.bin": "a0b0a016",
33-
"webgpu/shader/execution/binary/i32_comparison.bin": "f3d9b3f9",
34-
"webgpu/shader/execution/binary/u32_arithmetic.bin": "16e32fd",
35-
"webgpu/shader/execution/binary/u32_comparison.bin": "da33cc5d",
36-
"webgpu/shader/execution/abs.bin": "1ead834c",
37-
"webgpu/shader/execution/acos.bin": "e25802ba",
38-
"webgpu/shader/execution/acosh.bin": "2321726f",
39-
"webgpu/shader/execution/asin.bin": "d554a73b",
40-
"webgpu/shader/execution/asinh.bin": "d2bdb21b",
41-
"webgpu/shader/execution/atan.bin": "eb6476f3",
42-
"webgpu/shader/execution/atan2.bin": "cf15e7fa",
43-
"webgpu/shader/execution/atanh.bin": "6c57cc3",
44-
"webgpu/shader/execution/bitcast.bin": "a25e9714",
45-
"webgpu/shader/execution/ceil.bin": "8d120ea3",
46-
"webgpu/shader/execution/clamp.bin": "a762ef58",
47-
"webgpu/shader/execution/cos.bin": "a859da89",
48-
"webgpu/shader/execution/cosh.bin": "86abdd85",
49-
"webgpu/shader/execution/cross.bin": "e4556729",
50-
"webgpu/shader/execution/degrees.bin": "1fa19a41",
51-
"webgpu/shader/execution/determinant.bin": "108c3d65",
52-
"webgpu/shader/execution/distance.bin": "77a1baa6",
53-
"webgpu/shader/execution/dot.bin": "d4ac2e8a",
54-
"webgpu/shader/execution/exp.bin": "15539afd",
55-
"webgpu/shader/execution/exp2.bin": "7f6a8523",
56-
"webgpu/shader/execution/faceForward.bin": "e7b35f43",
57-
"webgpu/shader/execution/floor.bin": "b26656ca",
58-
"webgpu/shader/execution/fma.bin": "5a70c683",
59-
"webgpu/shader/execution/fract.bin": "23c0d5ec",
60-
"webgpu/shader/execution/frexp.bin": "d28e66be",
61-
"webgpu/shader/execution/inverseSqrt.bin": "9f297854",
62-
"webgpu/shader/execution/ldexp.bin": "638db0c7",
63-
"webgpu/shader/execution/length.bin": "7d237c62",
64-
"webgpu/shader/execution/log.bin": "70720bf0",
65-
"webgpu/shader/execution/log2.bin": "93a309be",
66-
"webgpu/shader/execution/max.bin": "36eb4779",
67-
"webgpu/shader/execution/min.bin": "ca772bf1",
68-
"webgpu/shader/execution/mix.bin": "ecbf61ae",
69-
"webgpu/shader/execution/modf.bin": "6ddea900",
70-
"webgpu/shader/execution/normalize.bin": "d3e47c61",
71-
"webgpu/shader/execution/pack2x16float.bin": "e6859c1a",
72-
"webgpu/shader/execution/pow.bin": "a58be71c",
73-
"webgpu/shader/execution/quantizeToF16.bin": "eca85bca",
74-
"webgpu/shader/execution/radians.bin": "a216c9aa",
75-
"webgpu/shader/execution/reflect.bin": "ebce9830",
76-
"webgpu/shader/execution/refract.bin": "59d1e5d6",
77-
"webgpu/shader/execution/round.bin": "9389a090",
78-
"webgpu/shader/execution/saturate.bin": "7ca4b681",
79-
"webgpu/shader/execution/sign.bin": "1f4eeb34",
80-
"webgpu/shader/execution/sin.bin": "a1e234b4",
81-
"webgpu/shader/execution/sinh.bin": "1a62054b",
82-
"webgpu/shader/execution/smoothstep.bin": "d5824fd6",
83-
"webgpu/shader/execution/sqrt.bin": "66f21d02",
84-
"webgpu/shader/execution/step.bin": "310cb6c7",
85-
"webgpu/shader/execution/tan.bin": "1e26f533",
86-
"webgpu/shader/execution/tanh.bin": "4c546d1c",
87-
"webgpu/shader/execution/transpose.bin": "7bef2494",
88-
"webgpu/shader/execution/trunc.bin": "e72535eb",
89-
"webgpu/shader/execution/unpack2x16float.bin": "593d88c6",
90-
"webgpu/shader/execution/unpack2x16snorm.bin": "9ebd3e40",
91-
"webgpu/shader/execution/unpack2x16unorm.bin": "83a36fa9",
92-
"webgpu/shader/execution/unpack4x8snorm.bin": "41b12606",
93-
"webgpu/shader/execution/unpack4x8unorm.bin": "96f1850b",
94-
"webgpu/shader/execution/unary/af_arithmetic.bin": "6fa1d84a",
95-
"webgpu/shader/execution/unary/af_assignment.bin": "98c8f82a",
2+
"webgpu/shader/execution/binary/af_addition.bin": "de575056",
3+
"webgpu/shader/execution/binary/af_logical.bin": "dc2105f8",
4+
"webgpu/shader/execution/binary/af_division.bin": "d7e6d98f",
5+
"webgpu/shader/execution/binary/af_matrix_addition.bin": "c215cf6d",
6+
"webgpu/shader/execution/binary/af_matrix_subtraction.bin": "57892276",
7+
"webgpu/shader/execution/binary/af_multiplication.bin": "4c282ac2",
8+
"webgpu/shader/execution/binary/af_remainder.bin": "9fdddf97",
9+
"webgpu/shader/execution/binary/af_subtraction.bin": "a27de3c1",
10+
"webgpu/shader/execution/binary/f16_addition.bin": "ecc2aa17",
11+
"webgpu/shader/execution/binary/f16_logical.bin": "1851f647",
12+
"webgpu/shader/execution/binary/f16_division.bin": "2cfec6de",
13+
"webgpu/shader/execution/binary/f16_matrix_addition.bin": "f5b6ef4f",
14+
"webgpu/shader/execution/binary/f16_matrix_matrix_multiplication.bin": "c47070a0",
15+
"webgpu/shader/execution/binary/f16_matrix_scalar_multiplication.bin": "30b9d67c",
16+
"webgpu/shader/execution/binary/f16_matrix_subtraction.bin": "46b631ba",
17+
"webgpu/shader/execution/binary/f16_matrix_vector_multiplication.bin": "19e6a937",
18+
"webgpu/shader/execution/binary/f16_multiplication.bin": "8fbfc97c",
19+
"webgpu/shader/execution/binary/f16_remainder.bin": "66cd384c",
20+
"webgpu/shader/execution/binary/f16_subtraction.bin": "8b5fed3d",
21+
"webgpu/shader/execution/binary/f32_addition.bin": "2ef1211a",
22+
"webgpu/shader/execution/binary/f32_logical.bin": "3c97c69d",
23+
"webgpu/shader/execution/binary/f32_division.bin": "2867ef0a",
24+
"webgpu/shader/execution/binary/f32_matrix_addition.bin": "da9390d1",
25+
"webgpu/shader/execution/binary/f32_matrix_matrix_multiplication.bin": "2d67296e",
26+
"webgpu/shader/execution/binary/f32_matrix_scalar_multiplication.bin": "c79709f5",
27+
"webgpu/shader/execution/binary/f32_matrix_subtraction.bin": "38b7c05f",
28+
"webgpu/shader/execution/binary/f32_matrix_vector_multiplication.bin": "f9b675d7",
29+
"webgpu/shader/execution/binary/f32_multiplication.bin": "bb7ee512",
30+
"webgpu/shader/execution/binary/f32_remainder.bin": "e0d16b8f",
31+
"webgpu/shader/execution/binary/f32_subtraction.bin": "755fc63",
32+
"webgpu/shader/execution/binary/i32_arithmetic.bin": "3c1d6f0f",
33+
"webgpu/shader/execution/binary/i32_comparison.bin": "4759dfea",
34+
"webgpu/shader/execution/binary/u32_arithmetic.bin": "6bf6989d",
35+
"webgpu/shader/execution/binary/u32_comparison.bin": "ca8b140b",
36+
"webgpu/shader/execution/abs.bin": "a79b85f3",
37+
"webgpu/shader/execution/acos.bin": "eed1c72",
38+
"webgpu/shader/execution/acosh.bin": "a1b7dc12",
39+
"webgpu/shader/execution/asin.bin": "fbf69cb0",
40+
"webgpu/shader/execution/asinh.bin": "7b8f7a8",
41+
"webgpu/shader/execution/atan.bin": "250334d8",
42+
"webgpu/shader/execution/atan2.bin": "9df3f787",
43+
"webgpu/shader/execution/atanh.bin": "5c79c30d",
44+
"webgpu/shader/execution/bitcast.bin": "964fdecd",
45+
"webgpu/shader/execution/ceil.bin": "246bf087",
46+
"webgpu/shader/execution/clamp.bin": "3a299eaf",
47+
"webgpu/shader/execution/cos.bin": "d3efc52b",
48+
"webgpu/shader/execution/cosh.bin": "867cbf85",
49+
"webgpu/shader/execution/cross.bin": "a1089567",
50+
"webgpu/shader/execution/degrees.bin": "d1cfaeac",
51+
"webgpu/shader/execution/determinant.bin": "44faf0f8",
52+
"webgpu/shader/execution/distance.bin": "e1191c92",
53+
"webgpu/shader/execution/dot.bin": "242201b",
54+
"webgpu/shader/execution/exp.bin": "e5f97f39",
55+
"webgpu/shader/execution/exp2.bin": "65bd37ec",
56+
"webgpu/shader/execution/faceForward.bin": "ebb6017a",
57+
"webgpu/shader/execution/floor.bin": "a24e0ff8",
58+
"webgpu/shader/execution/fma.bin": "87615a5f",
59+
"webgpu/shader/execution/fract.bin": "eab1b9fa",
60+
"webgpu/shader/execution/frexp.bin": "7dd8033",
61+
"webgpu/shader/execution/inverseSqrt.bin": "356b47c5",
62+
"webgpu/shader/execution/ldexp.bin": "788fdf3e",
63+
"webgpu/shader/execution/length.bin": "69f13c20",
64+
"webgpu/shader/execution/log.bin": "dc9c311c",
65+
"webgpu/shader/execution/log2.bin": "d1a49443",
66+
"webgpu/shader/execution/max.bin": "6750f2eb",
67+
"webgpu/shader/execution/min.bin": "c8200395",
68+
"webgpu/shader/execution/mix.bin": "86c40712",
69+
"webgpu/shader/execution/modf.bin": "50483a83",
70+
"webgpu/shader/execution/normalize.bin": "244a8e05",
71+
"webgpu/shader/execution/pack2x16float.bin": "dcd8656d",
72+
"webgpu/shader/execution/pow.bin": "633c917a",
73+
"webgpu/shader/execution/quantizeToF16.bin": "f6044bd2",
74+
"webgpu/shader/execution/radians.bin": "a90b21ea",
75+
"webgpu/shader/execution/reflect.bin": "670fbba2",
76+
"webgpu/shader/execution/refract.bin": "63b06feb",
77+
"webgpu/shader/execution/round.bin": "d4c09bde",
78+
"webgpu/shader/execution/saturate.bin": "d4f8a4d0",
79+
"webgpu/shader/execution/sign.bin": "57c988b9",
80+
"webgpu/shader/execution/sin.bin": "59aab9f5",
81+
"webgpu/shader/execution/sinh.bin": "3890a90c",
82+
"webgpu/shader/execution/smoothstep.bin": "b695fd45",
83+
"webgpu/shader/execution/sqrt.bin": "9524c93",
84+
"webgpu/shader/execution/step.bin": "b9cc90a4",
85+
"webgpu/shader/execution/tan.bin": "e5792957",
86+
"webgpu/shader/execution/tanh.bin": "ba99c688",
87+
"webgpu/shader/execution/transpose.bin": "83588805",
88+
"webgpu/shader/execution/trunc.bin": "aad5d037",
89+
"webgpu/shader/execution/unpack2x16float.bin": "493cbe7b",
90+
"webgpu/shader/execution/unpack2x16snorm.bin": "fd0b5eb9",
91+
"webgpu/shader/execution/unpack2x16unorm.bin": "f7436a6c",
92+
"webgpu/shader/execution/unpack4x8snorm.bin": "eca842d9",
93+
"webgpu/shader/execution/unpack4x8unorm.bin": "8654f67e",
94+
"webgpu/shader/execution/unary/af_arithmetic.bin": "e05d3c45",
95+
"webgpu/shader/execution/unary/af_assignment.bin": "45da8cfe",
9696
"webgpu/shader/execution/unary/bool_conversion.bin": "dd71f171",
97-
"webgpu/shader/execution/unary/f16_arithmetic.bin": "2f2d38fc",
98-
"webgpu/shader/execution/unary/f16_conversion.bin": "70c94538",
99-
"webgpu/shader/execution/unary/f32_arithmetic.bin": "db90c01c",
100-
"webgpu/shader/execution/unary/f32_conversion.bin": "81912140",
97+
"webgpu/shader/execution/unary/f16_arithmetic.bin": "9c17fdca",
98+
"webgpu/shader/execution/unary/f16_conversion.bin": "c02b6c8",
99+
"webgpu/shader/execution/unary/f32_arithmetic.bin": "feff26f7",
100+
"webgpu/shader/execution/unary/f32_conversion.bin": "f2639f4c",
101101
"webgpu/shader/execution/unary/i32_arithmetic.bin": "c69716e2",
102102
"webgpu/shader/execution/unary/i32_conversion.bin": "83218e69",
103103
"webgpu/shader/execution/unary/u32_conversion.bin": "8f5bad00",
104104
"webgpu/shader/execution/unary/ai_assignment.bin": "c7e6ac33",
105-
"webgpu/shader/execution/binary/ai_arithmetic.bin": "81c11ec2",
106-
"webgpu/shader/execution/unary/ai_arithmetic.bin": "3d27dc97"
105+
"webgpu/shader/execution/binary/ai_arithmetic.bin": "dfcd593a",
106+
"webgpu/shader/execution/unary/ai_arithmetic.bin": "3d27dc97",
107+
"webgpu/shader/execution/binary/af_matrix_matrix_multiplication.bin": "7e551ea1",
108+
"webgpu/shader/execution/binary/af_matrix_scalar_multiplication.bin": "fe7ea65b",
109+
"webgpu/shader/execution/binary/af_matrix_vector_multiplication.bin": "2a98deaa"
107110
}

src/unittests/floating_point.spec.ts

+20-6
Original file line numberDiff line numberDiff line change
@@ -7193,7 +7193,7 @@ g.test('subtractionMatrixMatrixInterval')
71937193
g.test('multiplicationMatrixMatrixInterval')
71947194
.params(u =>
71957195
u
7196-
.combine('trait', ['f32', 'f16'] as const)
7196+
.combine('trait', ['f32', 'f16', 'abstract'] as const)
71977197
.beginSubcases()
71987198
.combineWithParams<MatrixPairToMatrixCase>([
71997199
// Only testing that different shapes of matrices are handled correctly
@@ -7768,12 +7768,26 @@ const kMultiplicationMatrixScalarIntervalCases = {
77687768
],
77697769
},
77707770
] as MatrixScalarToMatrixCase[],
7771+
abstract: [
7772+
// From https://github.com/gpuweb/cts/issues/3044
7773+
{
7774+
matrix: [
7775+
[kValue.f64.negative.min, 0],
7776+
[0, 0],
7777+
],
7778+
scalar: kValue.f64.negative.subnormal.min,
7779+
expected: [
7780+
[[0, reinterpretU64AsF64(0x400ffffffffffffdn)], 0], // [[0, 3.9999995...], 0],
7781+
[0, 0],
7782+
],
7783+
},
7784+
] as MatrixScalarToMatrixCase[],
77717785
} as const;
77727786

77737787
g.test('multiplicationMatrixScalarInterval')
77747788
.params(u =>
77757789
u
7776-
.combine('trait', ['f32', 'f16'] as const)
7790+
.combine('trait', ['f32', 'f16', 'abstract'] as const)
77777791
.beginSubcases()
77787792
.expandWithParams<MatrixScalarToMatrixCase>(p => {
77797793
const trait = FP[p.trait];
@@ -7945,7 +7959,7 @@ interface MatrixVectorToVectorCase {
79457959
g.test('multiplicationMatrixVectorInterval')
79467960
.params(u =>
79477961
u
7948-
.combine('trait', ['f32', 'f16'] as const)
7962+
.combine('trait', ['f32', 'f16', 'abstract'] as const)
79497963
.beginSubcases()
79507964
.combineWithParams<MatrixVectorToVectorCase>([
79517965
// Only testing that different shapes of matrices are handled correctly
@@ -8062,16 +8076,16 @@ interface VectorMatrixToVectorCase {
80628076
g.test('multiplicationVectorMatrixInterval')
80638077
.params(u =>
80648078
u
8065-
.combine('trait', ['f32', 'f16'] as const)
8079+
.combine('trait', ['f32', 'f16', 'abstract'] as const)
80668080
.beginSubcases()
80678081
.combineWithParams<VectorMatrixToVectorCase>([
80688082
// Only testing that different shapes of matrices are handled correctly
80698083
// here, to reduce test duplication.
80708084
// multiplicationVectorMatrixInterval uses DotIntervalOp for calculating
80718085
// intervals, so the testing for dotInterval covers the actual interval
80728086
// calculations.
8073-
// Keep all expected result integer no larger than 2047 to ensure that all result is exactly
8074-
// represeantable in both f32 and f16.
8087+
// Keep all expected result integer no larger than 2047 to ensure that
8088+
// all result is exactly representable in both f32 and f16.
80758089
{
80768090
vector: [1, 2],
80778091
matrix: [

src/webgpu/listing_meta.json

+5
Original file line numberDiff line numberDiff line change
@@ -914,7 +914,12 @@
914914
"webgpu:shader,execution,expression,binary,af_division:vector:*": { "subcaseMS": 237.134 },
915915
"webgpu:shader,execution,expression,binary,af_division:vector_scalar:*": { "subcaseMS": 580.000 },
916916
"webgpu:shader,execution,expression,binary,af_matrix_addition:matrix:*": { "subcaseMS": 11169.534 },
917+
"webgpu:shader,execution,expression,binary,af_matrix_matrix_multiplication:matrix_matrix:*": { "subcaseMS": 0.000 },
918+
"webgpu:shader,execution,expression,binary,af_matrix_scalar_multiplication:matrix_scalar:*": { "subcaseMS": 0.000 },
919+
"webgpu:shader,execution,expression,binary,af_matrix_scalar_multiplication:scalar_matrix:*": { "subcaseMS": 0.000 },
917920
"webgpu:shader,execution,expression,binary,af_matrix_subtraction:matrix:*": { "subcaseMS": 14060.956 },
921+
"webgpu:shader,execution,expression,binary,af_matrix_vector_multiplication:matrix_vector:*": { "subcaseMS": 0.000 },
922+
"webgpu:shader,execution,expression,binary,af_matrix_vector_multiplication:vector_matrix:*": { "subcaseMS": 0.000 },
918923
"webgpu:shader,execution,expression,binary,af_multiplication:scalar:*": { "subcaseMS": 777.901 },
919924
"webgpu:shader,execution,expression,binary,af_multiplication:scalar_vector:*": { "subcaseMS": 2025.534 },
920925
"webgpu:shader,execution,expression,binary,af_multiplication:vector:*": { "subcaseMS": 710.667 },
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { FP } from '../../../../util/floating_point.js';
2+
import { sparseMatrixF64Range } from '../../../../util/math.js';
3+
import { selectNCases } from '../case.js';
4+
import { makeCaseCache } from '../case_cache.js';
5+
6+
// Cases: matKxR_matCxK
7+
const mat_mat_cases = ([2, 3, 4] as const)
8+
.flatMap(k =>
9+
([2, 3, 4] as const).flatMap(cols =>
10+
([2, 3, 4] as const).map(rows => ({
11+
[`mat${k}x${rows}_mat${cols}x${k}`]: () => {
12+
return selectNCases(
13+
'binary/af_matrix_matrix_multiplication',
14+
50,
15+
FP.abstract.generateMatrixPairToMatrixCases(
16+
sparseMatrixF64Range(k, rows),
17+
sparseMatrixF64Range(cols, k),
18+
'finite',
19+
FP.abstract.multiplicationMatrixMatrixInterval
20+
)
21+
);
22+
},
23+
}))
24+
)
25+
)
26+
.reduce((a, b) => ({ ...a, ...b }), {});
27+
28+
export const d = makeCaseCache('binary/af_matrix_matrix_multiplication', mat_mat_cases);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
export const description = `
2+
Execution Tests for matrix-matrix AbstractFloat multiplication expression
3+
`;
4+
5+
import { makeTestGroup } from '../../../../../common/framework/test_group.js';
6+
import { GPUTest } from '../../../../gpu_test.js';
7+
import { TypeAbstractFloat, TypeMat } from '../../../../util/conversion.js';
8+
import { onlyConstInputSource, run } from '../expression.js';
9+
10+
import { d } from './af_matrix_matrix_multiplication.cache.js';
11+
import { abstractFloatBinary } from './binary.js';
12+
13+
export const g = makeTestGroup(GPUTest);
14+
15+
g.test('matrix_matrix')
16+
.specURL('https://www.w3.org/TR/WGSL/#floating-point-evaluation')
17+
.desc(
18+
`
19+
Expression: x * y, where x is a matrix and y is a matrix
20+
Accuracy: Correctly rounded
21+
`
22+
)
23+
.params(u =>
24+
u
25+
.combine('inputSource', onlyConstInputSource)
26+
.combine('common_dim', [2, 3, 4] as const)
27+
.combine('x_rows', [2, 3, 4] as const)
28+
.combine('y_cols', [2, 3, 4] as const)
29+
)
30+
.beforeAllSubcases(t => {
31+
t.selectDeviceOrSkipTestCase({ requiredFeatures: ['shader-f16'] });
32+
})
33+
.fn(async t => {
34+
const x_cols = t.params.common_dim;
35+
const x_rows = t.params.x_rows;
36+
const y_cols = t.params.y_cols;
37+
const y_rows = t.params.common_dim;
38+
39+
const cases = await d.get(`mat${x_cols}x${x_rows}_mat${y_cols}x${y_rows}`);
40+
await run(
41+
t,
42+
abstractFloatBinary('*'),
43+
[TypeMat(x_cols, x_rows, TypeAbstractFloat), TypeMat(y_cols, y_rows, TypeAbstractFloat)],
44+
TypeMat(y_cols, x_rows, TypeAbstractFloat),
45+
t.params,
46+
cases
47+
);
48+
});

0 commit comments

Comments
 (0)