tatami_mult
Multiply tatami matrices
Loading...
Searching...
No Matches
dispatch.hpp
Go to the documentation of this file.
1#ifndef TATAMI_MULT_DENSE_MATRIX_DISPATCH_HPP
2#define TATAMI_MULT_DENSE_MATRIX_DISPATCH_HPP
3
8
14namespace tatami_mult {
15
40
48inline void set_num_threads(MultiplyWithDenseMatrixOptions& options, int num_threads) {
49 set_num_threads(options.dense_row, num_threads);
50 set_num_threads(options.dense_column, num_threads);
51 set_num_threads(options.sparse_row, num_threads);
52 set_num_threads(options.sparse_column, num_threads);
53}
54
62inline void set_dense_primary_block_size(MultiplyWithDenseMatrixOptions& options, int primary_block_size) {
63 set_dense_primary_block_size(options.dense_row, primary_block_size);
64 set_dense_primary_block_size(options.dense_column, primary_block_size);
65}
66
75inline void set_dense_secondary_block_size(MultiplyWithDenseMatrixOptions& options, int secondary_block_size) {
76 set_dense_secondary_block_size(options.dense_row, secondary_block_size);
77 set_dense_secondary_block_size(options.dense_column, secondary_block_size);
78}
79
87inline void set_sparse_block_size(MultiplyWithDenseMatrixOptions& options, int block_size) {
88 set_sparse_block_size(options.sparse_row, block_size);
89 set_sparse_block_size(options.sparse_column, block_size);
90}
91
120template<std::size_t accumulators_ = 4, typename LeftValue_, typename LeftIndex_, typename RightValue_, typename RightIndex_, typename Output_>
124 Output_* const output,
125 const bool output_row_major,
126 const MultiplyWithDenseMatrixOptions& options
127) {
128 if (left.is_sparse()) {
129 if (left.prefer_rows()) {
130 multiply_sparse_row_with_dense_matrix<accumulators_>(left, right, output, output_row_major, options.sparse_row);
131 } else {
132 multiply_sparse_column_with_dense_matrix(left, right, output, output_row_major, options.sparse_column);
133 }
134 } else {
135 if (left.prefer_rows()) {
136 multiply_dense_row_with_dense_matrix<accumulators_>(left, right, output, output_row_major, options.dense_row);
137 } else {
138 multiply_dense_column_with_dense_matrix(left, right, output, output_row_major, options.dense_column);
139 }
140 }
141}
142
143}
144
145#endif
virtual bool prefer_rows() const=0
virtual bool is_sparse() const=0
Dense column-major LHS, dense matrix RHS.
Dense row-major LHS, dense matrix RHS.
Sparse column-major LHS, dense matrix RHS.
Sparse row-major LHS, dense matrix RHS.
Multiplication of tatami matrices.
Definition column_to_column.hpp:19
void multiply_sparse_row_with_dense_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplySparseRowWithDenseMatrixOptions &options)
Definition dispatch.hpp:103
void set_dense_primary_block_size(MultiplyDenseColumnWithDenseMatrixOptions &options, int primary_block_size)
Definition dispatch.hpp:68
void set_dense_secondary_block_size(MultiplyDenseColumnWithDenseMatrixOptions &options, int secondary_block_size)
Definition dispatch.hpp:83
void multiply_dense_row_with_dense_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplyDenseRowWithDenseMatrixOptions &options)
Definition dispatch.hpp:119
void multiply_with_dense_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplyWithDenseMatrixOptions &options)
Definition dispatch.hpp:121
void multiply_sparse_column_with_dense_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplySparseColumnWithDenseMatrixOptions &options)
Definition dispatch.hpp:101
void multiply_dense_column_with_dense_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplyDenseColumnWithDenseMatrixOptions &options)
Definition dispatch.hpp:118
void set_sparse_block_size(MultiplyWithDenseMatrixOptions &options, int block_size)
Definition dispatch.hpp:87
void set_num_threads(MultiplyDenseColumnWithDenseMatrixOptions &options, int num_threads)
Definition dispatch.hpp:54
Options for multiply_dense_column_with_dense_matrix().
Definition dispatch.hpp:21
Options for multiply_dense_row_with_dense_matrix().
Definition dispatch.hpp:21
Options for multiply_sparse_column_with_dense_matrix().
Definition dispatch.hpp:21
Options for multiply_sparse_row_with_dense_matrix().
Definition dispatch.hpp:21
Options for multiply_with_dense_matrix().
Definition dispatch.hpp:19
MultiplySparseRowWithDenseMatrixOptions sparse_row
Definition dispatch.hpp:33
MultiplyDenseRowWithDenseMatrixOptions dense_row
Definition dispatch.hpp:23
MultiplySparseColumnWithDenseMatrixOptions sparse_column
Definition dispatch.hpp:38
MultiplyDenseColumnWithDenseMatrixOptions dense_column
Definition dispatch.hpp:28