Skip to content

Commit 0312501

Browse files
upsjBenBrock
andauthored
generate unsorted matrices by default (#37)
Co-authored-by: Benjamin Brock <[email protected]>
1 parent 67671a5 commit 0312501

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

include/spblas/backend/generate.hpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ auto generate_coo(std::size_t m, std::size_t n, std::size_t nnz,
4747
}
4848

4949
template <typename T = float, typename I = index_t, typename O = I>
50-
auto generate_csr(std::size_t m, std::size_t n, std::size_t nnz,
51-
std::size_t seed = 0) {
52-
auto&& [values, rowind, colind, shape, _] =
50+
auto generate_csr_sorted(std::size_t m, std::size_t n, std::size_t nnz,
51+
std::size_t seed = 0) {
52+
auto&& [values, rowind, colind, shape, nnz_] =
5353
generate_coo<T, I>(m, n, nnz, seed);
5454

5555
std::vector<O> rowptr(m + 1);
@@ -61,6 +61,31 @@ auto generate_csr(std::size_t m, std::size_t n, std::size_t nnz,
6161
return std::tuple(values, rowptr, colind, shape, I(nnz));
6262
}
6363

64+
template <typename T = float, typename I = index_t, typename O = I>
65+
auto generate_csr(std::size_t m, std::size_t n, std::size_t nnz,
66+
std::size_t seed = 0) {
67+
auto&& [values, rowptr, colind, shape, nnz_] =
68+
generate_csr_sorted<T, I, O>(m, n, nnz, seed);
69+
70+
for (std::size_t row = 0; row < m; row++) {
71+
const auto row_begin = rowptr[row];
72+
const auto row_end = rowptr[row + 1];
73+
std::shuffle(colind.begin() + row_begin, colind.begin() + row_end,
74+
std::mt19937(seed));
75+
}
76+
77+
return std::tuple(values, rowptr, colind, shape, I(nnz));
78+
}
79+
80+
template <typename T = float, typename I = index_t, typename O = I>
81+
auto generate_csc_sorted(std::size_t m, std::size_t n, std::size_t nnz,
82+
std::size_t seed = 0) {
83+
auto&& [values, colptr, rowind, shape_, nnz_] =
84+
generate_csr_sorted<T, I, O>(n, m, nnz, seed);
85+
return std::tuple(std::move(values), std::move(colptr), std::move(rowind),
86+
spblas::index<I>(m, n), I(nnz));
87+
}
88+
6489
template <typename T = float, typename I = index_t, typename O = I>
6590
auto generate_csc(std::size_t m, std::size_t n, std::size_t nnz,
6691
std::size_t seed = 0) {

0 commit comments

Comments
 (0)