tatami_mult
Multiply tatami matrices
Loading...
Searching...
No Matches
dispatch.hpp
Go to the documentation of this file.
1#ifndef TATAMI_MULT_SPARSE_MATRIX_DISPATCH_HPP
2#define TATAMI_MULT_SPARSE_MATRIX_DISPATCH_HPP
3
8
14namespace tatami_mult {
15
40
48inline void set_num_threads(MultiplyWithSparseMatrixOptions& 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_sparse_block_size(MultiplyWithSparseMatrixOptions& options, int block_size) {
63 set_sparse_block_size(options.dense_row, block_size);
64 set_sparse_block_size(options.dense_column, block_size);
65 set_sparse_block_size(options.sparse_row, block_size);
66}
67
96template<std::size_t accumulators_ = 4, typename LeftValue_, typename LeftIndex_, typename RightValue_, typename RightIndex_, typename Output_>
100 Output_* const output,
101 const bool output_row_major,
103) {
104 if (left.is_sparse()) {
105 if (left.prefer_rows()) {
106 multiply_sparse_row_with_sparse_matrix<accumulators_>(left, right, output, output_row_major, options.sparse_row);
107 } else {
108 multiply_sparse_column_with_sparse_matrix(left, right, output, output_row_major, options.sparse_column);
109 }
110 } else {
111 if (left.prefer_rows()) {
112 multiply_dense_row_with_sparse_matrix<accumulators_>(left, right, output, output_row_major, options.dense_row);
113 } else {
114 multiply_dense_column_with_sparse_matrix(left, right, output, output_row_major, options.dense_column);
115 }
116 }
117}
118
119}
120
121#endif
virtual bool prefer_rows() const=0
virtual bool is_sparse() const=0
Multiplication of tatami matrices.
Definition column_to_column.hpp:19
void multiply_dense_row_with_sparse_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplyDenseRowWithSparseMatrixOptions &options)
Definition dispatch.hpp:99
void multiply_with_sparse_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplyWithSparseMatrixOptions &options)
Definition dispatch.hpp:97
void multiply_sparse_row_with_sparse_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplySparseRowWithSparseMatrixOptions &options)
Definition dispatch.hpp:102
void multiply_sparse_column_with_sparse_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplySparseColumnWithSparseMatrixOptions &options)
Definition dispatch.hpp:89
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
void multiply_dense_column_with_sparse_matrix(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const tatami::Matrix< RightValue_, RightIndex_ > &right, Output_ *const output, const bool output_row_major, const MultiplyDenseColumnWithSparseMatrixOptions &options)
Definition dispatch.hpp:102
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.
Options for multiply_dense_column_with_sparse_matrix().
Definition dispatch.hpp:21
Options for multiply_dense_row_with_sparse_matrix().
Definition dispatch.hpp:21
Options for multiply_sparse_column_with_sparse_matrix().
Definition dispatch.hpp:21
Options for multiply_sparse_row_with_sparse_matrix().
Definition dispatch.hpp:21
Options for multiply_with_sparse_matrix().
Definition dispatch.hpp:19
MultiplySparseColumnWithSparseMatrixOptions sparse_column
Definition dispatch.hpp:38
MultiplyDenseColumnWithSparseMatrixOptions dense_column
Definition dispatch.hpp:28
MultiplyDenseRowWithSparseMatrixOptions dense_row
Definition dispatch.hpp:23
MultiplySparseRowWithSparseMatrixOptions sparse_row
Definition dispatch.hpp:33