From b4fad2ef6a4bcb71016df953cf5f61d76ddf512e Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Thu, 19 Jun 2025 15:02:36 +0100 Subject: [PATCH 1/4] Zero-initialize test buffers Test buffers must be initialized to a default value of 0. Report mismatches outside the portion-tested ROI to catch out-of-bound kernel writes. Signed-off-by: Jakub Sujak --- test/common/buffer.cpp | 7 ++++--- test/common/compare.cpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/test/common/buffer.cpp b/test/common/buffer.cpp index 86343d0d..f8a51887 100644 --- a/test/common/buffer.cpp +++ b/test/common/buffer.cpp @@ -21,7 +21,10 @@ namespace kai::test { -Buffer::Buffer(const size_t size) : m_user_buffer_size(size) { +Buffer::Buffer(const size_t size) : Buffer(size, 0) { +} + +Buffer::Buffer(const size_t size, const uint8_t init_value = 0) : m_user_buffer_size(size) { KAI_ASSUME_MSG(size > 0, "Buffers must be of non-zero size"); const char* val = getenv("KAI_TEST_BUFFER_POLICY"); @@ -57,9 +60,7 @@ Buffer::Buffer(const size_t size) : m_user_buffer_size(size) { default: allocate(); } -} -Buffer::Buffer(const size_t size, uint8_t init_value) : Buffer(size) { memset(data(), init_value, size); } diff --git a/test/common/compare.cpp b/test/common/compare.cpp index 29d96493..97666c66 100644 --- a/test/common/compare.cpp +++ b/test/common/compare.cpp @@ -78,7 +78,7 @@ bool compare_raw( const auto [abs_err, rel_err] = calculate_error(imp_value, ref_value); if (abs_err != 0 || rel_err != 0) { - const auto notifying = !in_roi || handler.handle_data(abs_err, rel_err); + const auto notifying = handler.handle_data(abs_err, rel_err); if (notifying) { if (!block_heading_written) { @@ -175,7 +175,7 @@ bool compare_per_row( const auto [abs_err, rel_err] = calculate_error(imp_value, ref_value); if (abs_err != 0 || rel_err != 0) { - const auto notifying = !in_roi || handler.handle_data(abs_err, rel_err); + const auto notifying = handler.handle_data(abs_err, rel_err); if (notifying) { const auto raw_index = y_block * block_height * block_width + offset; -- GitLab From 3b12ba58ab004c995f20159cb17dcf866867244e Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Thu, 19 Jun 2025 15:39:13 +0100 Subject: [PATCH 2/4] Fail immediately on any mismatch outside ROI Signed-off-by: Jakub Sujak --- test/common/compare.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/common/compare.cpp b/test/common/compare.cpp index 97666c66..e9d3a822 100644 --- a/test/common/compare.cpp +++ b/test/common/compare.cpp @@ -78,6 +78,10 @@ bool compare_raw( const auto [abs_err, rel_err] = calculate_error(imp_value, ref_value); if (abs_err != 0 || rel_err != 0) { + if (!in_roi) { + handler.mark_as_failed(); + } + const auto notifying = handler.handle_data(abs_err, rel_err); if (notifying) { @@ -175,6 +179,10 @@ bool compare_per_row( const auto [abs_err, rel_err] = calculate_error(imp_value, ref_value); if (abs_err != 0 || rel_err != 0) { + if (!in_roi) { + handler.mark_as_failed(); + } + const auto notifying = handler.handle_data(abs_err, rel_err); if (notifying) { -- GitLab From 3cd2729b7d7786261cb3b5cc97793e28ea685912 Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Thu, 19 Jun 2025 16:42:08 +0100 Subject: [PATCH 3/4] Skip portions with empty dimensions Signed-off-by: Jakub Sujak --- test/tests/imatmul_test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/tests/imatmul_test.cpp b/test/tests/imatmul_test.cpp index ca4b71b3..8f4922dd 100644 --- a/test/tests/imatmul_test.cpp +++ b/test/tests/imatmul_test.cpp @@ -472,6 +472,10 @@ TEST_P(IndirectMatMulTest, Output) { ReferenceGenerator::get_test_reference({shape, method.pack_shape, method.format, k_chunk_length, clamp_rate}); const Rect portion = output_portion.compute_portion(shape.m, shape.n, method.pack_shape.m, method.pack_shape.n); + if (portion.height() == 0 || portion.width() == 0) { + GTEST_SKIP() << "Empty dimension of matrix(" << portion.width() << "," << portion.height() << ")"; + } + // Call packing kernels, and then imatmul kernel Buffer lhs_packed = pack_lhs(method.lhs, portion, test_data, shape.m, k_chunk); Buffer rhs_packed = pack_rhs(method.rhs, portion, test_data, shape.n, k_chunk, method.format.rhs.data_type()); -- GitLab From d3e03e61430a1ef4f645a4b130619cb4a104c205 Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Thu, 19 Jun 2025 16:45:32 +0100 Subject: [PATCH 4/4] Restore previous line Signed-off-by: Jakub Sujak --- test/common/compare.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/common/compare.cpp b/test/common/compare.cpp index e9d3a822..4f503b14 100644 --- a/test/common/compare.cpp +++ b/test/common/compare.cpp @@ -82,7 +82,7 @@ bool compare_raw( handler.mark_as_failed(); } - const auto notifying = handler.handle_data(abs_err, rel_err); + const auto notifying = !in_roi || handler.handle_data(abs_err, rel_err); if (notifying) { if (!block_heading_written) { @@ -183,7 +183,7 @@ bool compare_per_row( handler.mark_as_failed(); } - const auto notifying = handler.handle_data(abs_err, rel_err); + const auto notifying = !in_roi || handler.handle_data(abs_err, rel_err); if (notifying) { const auto raw_index = y_block * block_height * block_width + offset; -- GitLab