Skip to content

Commit 112b567

Browse files
committed
++ is incorrect
1 parent 5557f52 commit 112b567

2 files changed

Lines changed: 23 additions & 16 deletions

File tree

cpp/include/raft/linalg/detail/cublaslt_wrappers.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,14 @@ inline auto needs_cublaslt_13_6_workaround(const matmul_key_t& args, std::size_t
112112
}
113113

114114
/**
115-
* Querying with a physical A leading dimension that is one element larger suppresses algorithm 68
116-
* by removing its required 16-byte alignment. The returned algorithm is then used with the real
117-
* descriptors.
115+
* Querying with a physical A leading dimension that is not 16-byte aligned suppresses algorithm 68.
116+
* The returned algorithm is then used with the real descriptors.
118117
*/
119118
inline auto get_cublaslt_13_6_heuristic_args(const matmul_key_t& args) noexcept -> matmul_key_t
120119
{
121-
auto heuristic_args = args;
122-
++heuristic_args.lda;
120+
constexpr uint64_t fp32_elements_per_16_bytes = 4;
121+
auto heuristic_args = args;
122+
if (heuristic_args.lda % fp32_elements_per_16_bytes == 0) { ++heuristic_args.lda; }
123123
return heuristic_args;
124124
}
125125

cpp/tests/linalg/gemm_basic.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -200,17 +200,24 @@ TEST(Raft, GemmCublasLt136WorkaroundPredicate)
200200

201201
TEST(Raft, GemmCublasLt136WorkaroundHeuristicArgs)
202202
{
203-
const detail::matmul_key_t transposed{134217728, 1, 2, 16, 1, 134217728, true, true};
204-
const auto transposed_query = detail::get_cublaslt_13_6_heuristic_args(transposed);
205-
EXPECT_EQ(transposed_query.m, transposed.m);
206-
EXPECT_EQ(transposed_query.lda, transposed.lda + 1);
207-
EXPECT_EQ(transposed_query.ldc, transposed.ldc);
208-
209-
const detail::matmul_key_t non_transposed{2, 1, 134217728, 2, 134217728, 2, false, false};
210-
const auto non_transposed_query = detail::get_cublaslt_13_6_heuristic_args(non_transposed);
211-
EXPECT_EQ(non_transposed_query.m, non_transposed.m);
212-
EXPECT_EQ(non_transposed_query.lda, non_transposed.lda + 1);
213-
EXPECT_EQ(non_transposed_query.ldc, non_transposed.ldc);
203+
const auto query_lda = [](uint64_t lda) {
204+
const detail::matmul_key_t args{134217728, 1, 2, lda, 1, 134217728, true, true};
205+
return detail::get_cublaslt_13_6_heuristic_args(args).lda;
206+
};
207+
208+
EXPECT_EQ(query_lda(12), 13);
209+
EXPECT_EQ(query_lda(15), 15);
210+
EXPECT_EQ(query_lda(16), 17);
211+
212+
const detail::matmul_key_t args{134217728, 1, 2, 16, 1, 134217728, true, true};
213+
const auto heuristic_args = detail::get_cublaslt_13_6_heuristic_args(args);
214+
EXPECT_EQ(heuristic_args.m, args.m);
215+
EXPECT_EQ(heuristic_args.n, args.n);
216+
EXPECT_EQ(heuristic_args.k, args.k);
217+
EXPECT_EQ(heuristic_args.ldb, args.ldb);
218+
EXPECT_EQ(heuristic_args.ldc, args.ldc);
219+
EXPECT_EQ(heuristic_args.trans_a, args.trans_a);
220+
EXPECT_EQ(heuristic_args.trans_b, args.trans_b);
214221
}
215222

216223
} // namespace raft::linalg

0 commit comments

Comments
 (0)