From aaf2d08622ad1022351d0f20fc0d53bda35caf2b Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Mon, 2 Mar 2026 11:55:47 +0100 Subject: [PATCH 1/6] feat: configure leading dimensions explicitly --- include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp index cbf18e0..7c9b328 100644 --- a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp +++ b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp @@ -118,10 +118,10 @@ class BlasCuda { } } - void AddLayoutConfig(std::size_t m, std::size_t n, std::size_t k) { - CheckAndAddLayout(k, m); - CheckAndAddLayout(k, n); - CheckAndAddLayout(m, n); + void AddLayoutConfig(std::size_t m, std::size_t n, std::size_t k, std::size_t lda, std::size_t ldb, std::size_t ldc) { + CheckAndAddLayout(k, m, lda); + CheckAndAddLayout(k, n, ldb); + CheckAndAddLayout(m, n, ldc); } template @@ -313,11 +313,10 @@ gemmrelu(char transa, char transb, const unsigned int m, private: alpaka::QueueCudaRtNonBlocking m_queue; - void CheckAndAddLayout(size_t rows, size_t cols) { + void CheckAndAddLayout(size_t rows, size_t cols, size_t ld) { auto key = std::make_pair(rows, cols); if (LayoutStore.find(key) == LayoutStore.end()) { cublasLtMatrixLayout_t temp = nullptr; - size_t ld = rows; CHECK_CUBLAS( cublasLtMatrixLayoutCreate(&temp, CUDA_R_32F, rows, cols, ld)); LayoutStore.emplace(key, temp); From 9aa4b884854ed82985667e8481710f3124d7dd48 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Mon, 2 Mar 2026 14:31:55 +0100 Subject: [PATCH 2/6] fix: set stream while initializing handle --- include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp index 7c9b328..58c0f27 100644 --- a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp +++ b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp @@ -49,7 +49,6 @@ struct PairEq { class BlasCuda { cublasLtHandle_t ltHandle = nullptr; - cublasHandle_t handle = nullptr; cublasLtMatmulDesc_t operationDesc = nullptr; cublasLtMatmulPreference_t preference = nullptr; void *d_workspace = nullptr; @@ -72,7 +71,7 @@ class BlasCuda { BlasCuda(alpaka::QueueCudaRtNonBlocking &queue) : m_queue{queue} { stream = static_cast(m_queue.getNativeHandle()); CHECK_CUBLAS(cublasLtCreate(<Handle)); - CHECK_CUBLAS(cublasCreate(&handle)); + CHECK_CUBLAS(cublasSetStream(ltHandle, stream)); heuristic = {}; CHECK_CUBLAS(cublasLtMatmulDescCreate(&operationDesc, CUBLAS_COMPUTE_32F, CUDA_R_32F)); From 2498197aec00d4c65f4c46eec23d75e253b468b6 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Mon, 2 Mar 2026 14:52:00 +0100 Subject: [PATCH 3/6] feat: print requested workspace --- include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp index 58c0f27..1c9dd24 100644 --- a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp +++ b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp @@ -71,7 +71,6 @@ class BlasCuda { BlasCuda(alpaka::QueueCudaRtNonBlocking &queue) : m_queue{queue} { stream = static_cast(m_queue.getNativeHandle()); CHECK_CUBLAS(cublasLtCreate(<Handle)); - CHECK_CUBLAS(cublasSetStream(ltHandle, stream)); heuristic = {}; CHECK_CUBLAS(cublasLtMatmulDescCreate(&operationDesc, CUBLAS_COMPUTE_32F, CUDA_R_32F)); @@ -170,7 +169,8 @@ gemm(char transa, char transb, const unsigned int m, 1, &localHeuristic, &returnedResults)); - + std::cout << "Requested workspace: " + << localHeuristic.workspaceSize << std::endl; if (returnedResults == 0) { cublasLtMatmulDescDestroy(localDesc); std::cerr << "No suitable cuBLASLt algorithm found!\n"; @@ -237,7 +237,8 @@ gemmrelu(char transa, char transb, const unsigned int m, 1, &localHeuristic, &error_flag)); - + std::cout << "Requested workspace: " + << localHeuristic.workspaceSize << std::endl; if (error_flag == 0) { cublasLtMatmulDescDestroy(localDesc); std::cerr << "No suitable cuBLASLt algorithm found!\n"; From 901c5ae33fd687b7c3ad0b01babf0b0008846ca7 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Mon, 2 Mar 2026 17:31:13 +0100 Subject: [PATCH 4/6] fix: provide layout order during adding --- include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp index 1c9dd24..e921ebb 100644 --- a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp +++ b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp @@ -319,6 +319,8 @@ gemmrelu(char transa, char transb, const unsigned int m, cublasLtMatrixLayout_t temp = nullptr; CHECK_CUBLAS( cublasLtMatrixLayoutCreate(&temp, CUDA_R_32F, rows, cols, ld)); + cublasLtMatrixLayoutSetAttribute( + temp, CUBLASLT_MATRIX_LAYOUT_ORDER, CUBLASLT_ORDER_COL, sizeof(int)); LayoutStore.emplace(key, temp); } } From 8a27ffe044d87c4f87269bd3e5d8772769edae7d Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Tue, 3 Mar 2026 10:38:08 +0100 Subject: [PATCH 5/6] fix: layout order configuration --- include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp index e921ebb..1c9dd24 100644 --- a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp +++ b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp @@ -319,8 +319,6 @@ gemmrelu(char transa, char transb, const unsigned int m, cublasLtMatrixLayout_t temp = nullptr; CHECK_CUBLAS( cublasLtMatrixLayoutCreate(&temp, CUDA_R_32F, rows, cols, ld)); - cublasLtMatrixLayoutSetAttribute( - temp, CUBLASLT_MATRIX_LAYOUT_ORDER, CUBLASLT_ORDER_COL, sizeof(int)); LayoutStore.emplace(key, temp); } } From 54dce6320accc9aea63bb3401cb19da36dbef779 Mon Sep 17 00:00:00 2001 From: Sanjiban Sengupta Date: Tue, 3 Mar 2026 10:46:56 +0100 Subject: [PATCH 6/6] fix: remove look for requested workspace --- include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp index 1c9dd24..47d4b98 100644 --- a/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp +++ b/include/sofieBLAS/backends/cuda/sofieBLAS_cublas.hpp @@ -169,8 +169,6 @@ gemm(char transa, char transb, const unsigned int m, 1, &localHeuristic, &returnedResults)); - std::cout << "Requested workspace: " - << localHeuristic.workspaceSize << std::endl; if (returnedResults == 0) { cublasLtMatmulDescDestroy(localDesc); std::cerr << "No suitable cuBLASLt algorithm found!\n";