From 3bfacb4130c46d663f8c8abcb278b8f57a518fa6 Mon Sep 17 00:00:00 2001 From: Dounia Date: Fri, 23 Oct 2026 09:01:36 -0700 Subject: [PATCH 1/2] [SYCL][E2E][Matrix] Use integer inputs for bfloat16 accumulator tests when C or D is bfloat16 --- .../Matrix/Inputs/joint_matrix_16bit_impl.hpp | 22 ++++++++++++++++--- .../joint_matrix_bfloat16_accumulator.cpp | 3 --- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/sycl/test-e2e/Matrix/Inputs/joint_matrix_16bit_impl.hpp b/sycl/test-e2e/Matrix/Inputs/joint_matrix_16bit_impl.hpp index 943e8b33ab207..4d8046b0d7226 100644 --- a/sycl/test-e2e/Matrix/Inputs/joint_matrix_16bit_impl.hpp +++ b/sycl/test-e2e/Matrix/Inputs/joint_matrix_16bit_impl.hpp @@ -100,8 +100,23 @@ void test() { TResult D[MATRIX_M][MATRIX_N]; TResult DRef[MATRIX_M][MATRIX_N]; - matrix_rand(MATRIX_M, MATRIX_K, (Tab *)A, Tab(1)); - matrix_rand(MATRIX_K / VF, MATRIX_N * VF, (Tab *)B, Tab(1)); + // A bfloat16 C or D is rounded after every DPAS while the reference rounds + // once, and with only 8 significant bits the difference can exceed the + // tolerance. Integer inputs keep every partial sum exactly representable, so + // the result does not depend on where the rounding happens. + constexpr bool bf16_acc = + std::is_same_v || std::is_same_v; + if constexpr (!bf16_acc) { + matrix_rand(MATRIX_M, MATRIX_K, (Tab *)A, Tab(1)); + matrix_rand(MATRIX_K / VF, MATRIX_N * VF, (Tab *)B, Tab(1)); + } else { + std::mt19937 gen(0); + std::uniform_int_distribution dist(-1, 1); + matrix_fill(MATRIX_M, MATRIX_K, (Tab *)A, + [&](int, int) { return Tab(dist(gen)); }); + matrix_fill(MATRIX_K / VF, MATRIX_N * VF, (Tab *)B, + [&](int, int) { return Tab(dist(gen)); }); + } matrix_fill(MATRIX_M, MATRIX_N, (TAcc *)C, TAcc(1)); matrix_fill(MATRIX_M, MATRIX_N, (TResult *)D, TResult(1)); @@ -116,7 +131,8 @@ void test() { B_layout, VF>(MD, MC, MA, MB); matrix_multiply_ref( (Tab *)A, (Tab *)B, (TResult *)DRef, MATRIX_M, MATRIX_N, MATRIX_K / VF); - assert(matrix_compare(MATRIX_M, MATRIX_N, (TResult *)D, (TResult *)DRef)); + assert((matrix_compare( + MATRIX_M, MATRIX_N, (TResult *)D, (TResult *)DRef))); } template Date: Thu, 29 Oct 2026 10:59:12 -0700 Subject: [PATCH 2/2] Retrigger CI Co-Authored-By: Claude Opus 5.5