From 9281ec811e1cd37886bc312a7985d8f56c5ec8dd Mon Sep 17 00:00:00 2001 From: Ben Ashbaugh Date: Wed, 17 Sep 2025 10:13:41 -0700 Subject: [PATCH] fix the SYCL DCT sample Because the MatrixMultply function is called both on pointers to the global address space and pointers to the private address space, it cannot take a multi_ptr as a function argument. This fixes incorrect execution (page faults) on some GPUs. --- .../DiscreteCosineTransform/src/DCT.cpp | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/DirectProgramming/C++SYCL/SpectralMethods/DiscreteCosineTransform/src/DCT.cpp b/DirectProgramming/C++SYCL/SpectralMethods/DiscreteCosineTransform/src/DCT.cpp index 72db336b48..ba3ce7731a 100644 --- a/DirectProgramming/C++SYCL/SpectralMethods/DiscreteCosineTransform/src/DCT.cpp +++ b/DirectProgramming/C++SYCL/SpectralMethods/DiscreteCosineTransform/src/DCT.cpp @@ -47,8 +47,8 @@ void MatrixTranspose(float x[block_size], float xinv[block_size]) { } // Multiply two matrices x and y and write output to xy -SYCL_EXTERNAL void MatrixMultiply(multi_ptr x, - multi_ptr y, +SYCL_EXTERNAL void MatrixMultiply(const float x[block_size], + const float y[block_size], float xy[block_size]) { for (int i = 0; i < block_dims; ++i) { for (int j = 0; j < block_dims; ++j) { @@ -61,7 +61,8 @@ SYCL_EXTERNAL void MatrixMultiply(multi_ptr indataset, rgb* outdataset, +SYCL_EXTERNAL void ProcessBlock(multi_ptr indataset, + multi_ptr outdataset, multi_ptr dct, multi_ptr dctinv, int start_index, int width) { @@ -111,8 +112,8 @@ SYCL_EXTERNAL void ProcessBlock(multi_ptr(width / block_dims, height / block_dims), [=](auto idx) { int start_index = idx[0] * block_dims + idx[1] * block_dims * width; - ProcessBlock(i_acc.get_multi_ptr(), o_acc.get_multi_ptr().get(), + ProcessBlock(i_acc.get_multi_ptr(), o_acc.get_multi_ptr(), d_acc.get_multi_ptr(), di_acc.get_multi_ptr(), start_index, width); });