From 11d3770f4e51cae95ba5542e50ed8dd7187ea193 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Mon, 11 Mar 2024 11:11:14 -0400 Subject: [PATCH] wgsl: Use selectNCases to restrict the number of AF Matrix cases (#3465) Fixes #3457 --- src/resources/cache/hashes.json | 18 +++++++++--------- .../execution/binary/af_matrix_addition.bin | Bin 914552 -> 631152 bytes .../binary/af_matrix_subtraction.bin | Bin 921752 -> 644432 bytes .../binary/af_matrix_addition.cache.ts | 15 ++++++++++----- .../binary/af_matrix_subtraction.cache.ts | 15 ++++++++++----- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/resources/cache/hashes.json b/src/resources/cache/hashes.json index bf2eca5789b8..16bf07892d15 100644 --- a/src/resources/cache/hashes.json +++ b/src/resources/cache/hashes.json @@ -2,11 +2,15 @@ "webgpu/shader/execution/binary/af_addition.bin": "590ce5d0", "webgpu/shader/execution/binary/af_logical.bin": "4269127d", "webgpu/shader/execution/binary/af_division.bin": "d4ff5475", - "webgpu/shader/execution/binary/af_matrix_addition.bin": "9593eb85", - "webgpu/shader/execution/binary/af_matrix_subtraction.bin": "aa460371", + "webgpu/shader/execution/binary/af_matrix_addition.bin": "298ef48e", + "webgpu/shader/execution/binary/af_matrix_matrix_multiplication.bin": "7fed8020", + "webgpu/shader/execution/binary/af_matrix_scalar_multiplication.bin": "48e954b2", + "webgpu/shader/execution/binary/af_matrix_subtraction.bin": "6d4ead98", + "webgpu/shader/execution/binary/af_matrix_vector_multiplication.bin": "209e2c19", "webgpu/shader/execution/binary/af_multiplication.bin": "5eafc30c", "webgpu/shader/execution/binary/af_remainder.bin": "75cfdd3", "webgpu/shader/execution/binary/af_subtraction.bin": "5acd5252", + "webgpu/shader/execution/binary/ai_arithmetic.bin": "f89aeb4", "webgpu/shader/execution/binary/f16_addition.bin": "b3b843b9", "webgpu/shader/execution/binary/f16_logical.bin": "36a51091", "webgpu/shader/execution/binary/f16_division.bin": "67fc610", @@ -93,6 +97,8 @@ "webgpu/shader/execution/unpack4x8unorm.bin": "31999cab", "webgpu/shader/execution/unary/af_arithmetic.bin": "446e85d9", "webgpu/shader/execution/unary/af_assignment.bin": "9911dc5f", + "webgpu/shader/execution/unary/ai_arithmetic.bin": "497ec1e1", + "webgpu/shader/execution/unary/ai_assignment.bin": "fc978bdd", "webgpu/shader/execution/unary/bool_conversion.bin": "bcab7d9a", "webgpu/shader/execution/unary/f16_arithmetic.bin": "b0a84279", "webgpu/shader/execution/unary/f16_conversion.bin": "4bbd348e", @@ -100,11 +106,5 @@ "webgpu/shader/execution/unary/f32_conversion.bin": "9af02ab5", "webgpu/shader/execution/unary/i32_arithmetic.bin": "8f3c4616", "webgpu/shader/execution/unary/i32_conversion.bin": "972063c", - "webgpu/shader/execution/unary/u32_conversion.bin": "168fcf74", - "webgpu/shader/execution/unary/ai_assignment.bin": "fc978bdd", - "webgpu/shader/execution/binary/ai_arithmetic.bin": "f89aeb4", - "webgpu/shader/execution/unary/ai_arithmetic.bin": "497ec1e1", - "webgpu/shader/execution/binary/af_matrix_matrix_multiplication.bin": "7fed8020", - "webgpu/shader/execution/binary/af_matrix_scalar_multiplication.bin": "48e954b2", - "webgpu/shader/execution/binary/af_matrix_vector_multiplication.bin": "209e2c19" + "webgpu/shader/execution/unary/u32_conversion.bin": "168fcf74" } \ No newline at end of file diff --git a/src/resources/cache/webgpu/shader/execution/binary/af_matrix_addition.bin b/src/resources/cache/webgpu/shader/execution/binary/af_matrix_addition.bin index d387abcd7f208df8c11ad5470307a737ffe8b81d..634f518e0d1262f906cbb4cdcc9792969fe60583 100644 GIT binary patch delta 8101 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 delta 33288 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 A2mk;8 diff --git a/src/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.ts b/src/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.ts index 75c13d7702b6..e89250f57bd4 100644 --- a/src/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.ts +++ b/src/webgpu/shader/execution/expression/binary/af_matrix_addition.cache.ts @@ -1,5 +1,6 @@ import { FP } from '../../../../util/floating_point.js'; import { sparseMatrixF64Range } from '../../../../util/math.js'; +import { selectNCases } from '../case.js'; import { makeCaseCache } from '../case_cache.js'; // Cases: matCxR @@ -7,11 +8,15 @@ const mat_cases = ([2, 3, 4] as const) .flatMap(cols => ([2, 3, 4] as const).map(rows => ({ [`mat${cols}x${rows}`]: () => { - return FP.abstract.generateMatrixPairToMatrixCases( - sparseMatrixF64Range(cols, rows), - sparseMatrixF64Range(cols, rows), - 'finite', - FP.abstract.additionMatrixMatrixInterval + return selectNCases( + 'binary/af_matrix_addition', + 50, + FP.abstract.generateMatrixPairToMatrixCases( + sparseMatrixF64Range(cols, rows), + sparseMatrixF64Range(cols, rows), + 'finite', + FP.abstract.additionMatrixMatrixInterval + ) ); }, })) diff --git a/src/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.ts b/src/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.ts index b030f369e3d3..c3e5e856dc26 100644 --- a/src/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.ts +++ b/src/webgpu/shader/execution/expression/binary/af_matrix_subtraction.cache.ts @@ -1,5 +1,6 @@ import { FP } from '../../../../util/floating_point.js'; import { sparseMatrixF64Range } from '../../../../util/math.js'; +import { selectNCases } from '../case.js'; import { makeCaseCache } from '../case_cache.js'; // Cases: matCxR @@ -7,11 +8,15 @@ const mat_cases = ([2, 3, 4] as const) .flatMap(cols => ([2, 3, 4] as const).map(rows => ({ [`mat${cols}x${rows}`]: () => { - return FP.abstract.generateMatrixPairToMatrixCases( - sparseMatrixF64Range(cols, rows), - sparseMatrixF64Range(cols, rows), - 'finite', - FP.abstract.subtractionMatrixMatrixInterval + return selectNCases( + 'binary/af_matrix_subtraction', + 50, + FP.abstract.generateMatrixPairToMatrixCases( + sparseMatrixF64Range(cols, rows), + sparseMatrixF64Range(cols, rows), + 'finite', + FP.abstract.subtractionMatrixMatrixInterval + ) ); }, }))