tatami_mult
Multiply tatami matrices
Loading...
Searching...
No Matches
dispatch.hpp
Go to the documentation of this file.
1#ifndef TATAMI_MULT_MULTIPLE_VECTORS_DISPATCH_HPP
2#define TATAMI_MULT_MULTIPLE_VECTORS_DISPATCH_HPP
3
4#include "dense_row.hpp"
5#include "dense_column.hpp"
6#include "sparse_row.hpp"
7#include "sparse_column.hpp"
8
14namespace tatami_mult {
15
40
48inline void set_num_threads(MultiplyWithMultipleVectorsOptions& options, int num_threads) {
49 options.dense_row.num_threads = num_threads;
50 options.dense_column.num_threads = num_threads;
51 options.sparse_row.num_threads = num_threads;
52 options.sparse_column.num_threads = num_threads;
53}
54
62inline void set_dense_primary_block_size(MultiplyWithMultipleVectorsOptions& options, int primary_block_size) {
63 options.dense_row.primary_block_size = primary_block_size;
64 options.dense_column.primary_block_size = primary_block_size;
65}
66
75inline void set_dense_secondary_block_size(MultiplyWithMultipleVectorsOptions& options, int secondary_block_size) {
76 options.dense_row.secondary_block_size = secondary_block_size;
77 options.dense_column.secondary_block_size = secondary_block_size;
78}
79
87inline void set_sparse_block_size(MultiplyWithMultipleVectorsOptions& options, int block_size) {
88 options.sparse_row.block_size = block_size;
89 options.sparse_column.block_size = block_size;
90}
91
113template<std::size_t accumulators_ = 4, typename Value_, typename Index_, typename Right_, typename Output_>
116 const std::vector<Right_*>& right,
117 const std::vector<Output_*>& output,
119) {
120 if (left.is_sparse()) {
121 if (left.prefer_rows()) {
123 } else {
125 }
126 } else {
127 if (left.prefer_rows()) {
129 } else {
130 multiply_dense_column_with_multiple_vectors(left, right, output, options.dense_column);
131 }
132 }
133}
134
152template<std::size_t accumulators_ = 4, typename Left_, typename Value_, typename Index_, typename Output_>
154 const std::vector<Left_*>& left,
156 const std::vector<Output_*>& output,
158) {
159 auto tright = tatami::make_DelayedTranspose(tatami::wrap_shared_ptr(&right));
160 multiply_with_multiple_vectors<accumulators_>(*tright, left, output, options);
161}
162
163}
164
165#endif
virtual bool prefer_rows() const=0
virtual bool is_sparse() const=0
Dense column-major LHS, multiple vectors RHS.
Dense row-major LHS, multiple vectors RHS.
Sparse column-major LHS, multiple vectors RHS.
Sparse row-major LHS, multiple vectors RHS.
Multiplication of tatami matrices.
Definition column_to_column.hpp:19
void multiply_sparse_column_with_multiple_vectors(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightVectors_ right_vectors, GetRightVector_ get_right_vector, GetOutputVector_ get_output_vector, const MultiplySparseColumnWithMultipleVectorsOptions &options)
Definition sparse_column.hpp:175
void multiply_with_multiple_vectors(const tatami::Matrix< Value_, Index_ > &left, const std::vector< Right_ * > &right, const std::vector< Output_ * > &output, const MultiplyWithMultipleVectorsOptions &options)
Definition dispatch.hpp:114
void multiply_dense_row_with_multiple_vectors(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightVectors_ right_vectors, GetRightVector_ get_right_vector, GetOutputVector_ get_output_vector, const MultiplyDenseRowWithMultipleVectorsOptions &options)
Definition dense_row.hpp:70
void set_dense_primary_block_size(MultiplyDenseColumnWithDenseMatrixOptions &options, int primary_block_size)
Definition dispatch.hpp:68
void multiply_dense_column_with_multiple_vectors(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightVectors_ right_vectors, GetRightVector_ get_right_vector, GetOutput_ get_output_vector, const MultiplyDenseColumnWithMultipleVectorsOptions &options)
Definition dense_column.hpp:148
void set_dense_secondary_block_size(MultiplyDenseColumnWithDenseMatrixOptions &options, int secondary_block_size)
Definition dispatch.hpp:83
void multiply_sparse_row_with_multiple_vectors(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightVectors_ right_vectors, GetRightVector_ get_right_vector, GetOutputVector_ get_output_vector, const MultiplySparseRowWithMultipleVectorsOptions &options)
Definition sparse_row.hpp:61
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
std::shared_ptr< const Matrix< Value_, Index_ > > wrap_shared_ptr(const Matrix< Value_, Index_ > *const ptr)
Options for multiply_dense_column_with_multiple_vectors().
Definition dense_column.hpp:29
int primary_block_size
Definition dense_column.hpp:41
int secondary_block_size
Definition dense_column.hpp:48
Options for multiply_dense_row_with_multiple_vectors().
Definition dense_row.hpp:27
Options for multiply_sparse_column_with_multiple_vectors().
Definition sparse_column.hpp:30
Options for multiply_sparse_row_with_multiple_vectors().
Definition sparse_row.hpp:26
Options for multiply_with_multiple_vectors().
Definition dispatch.hpp:19
MultiplyDenseRowWithMultipleVectorsOptions dense_row
Definition dispatch.hpp:23
MultiplyDenseColumnWithMultipleVectorsOptions dense_column
Definition dispatch.hpp:28
MultiplySparseColumnWithMultipleVectorsOptions sparse_column
Definition dispatch.hpp:38
MultiplySparseRowWithMultipleVectorsOptions sparse_row
Definition dispatch.hpp:33