tatami_mult
Multiply tatami matrices
Loading...
Searching...
No Matches
dispatch.hpp
Go to the documentation of this file.
1#ifndef TATAMI_MULT_SINGLE_VECTOR_DISPATCH_HPP
2#define TATAMI_MULT_SINGLE_VECTOR_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(MultiplyWithSingleVectorOptions& 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
76template<std::size_t accumulators_ = 4, typename Value_, typename Index_, typename Right_, typename Output_>
79 const Right_* const right,
80 Output_* const output,
82) {
83 if (left.is_sparse()) {
84 if (left.prefer_rows()) {
86 } else {
87 multiply_sparse_column_with_single_vector(left, right, output, options.sparse_column);
88 }
89 } else {
90 if (left.prefer_rows()) {
92 } else {
93 multiply_dense_column_with_single_vector(left, right, output, options.dense_column);
94 }
95 }
96}
97
114template<std::size_t accumulators_ = 4, typename Left_, typename Value_, typename Index_, typename Output_>
116 const Left_* const left,
118 Output_* const output,
120) {
121 auto tright = tatami::make_DelayedTranspose(tatami::wrap_shared_ptr(&right));
122 multiply_with_single_vector<accumulators_>(*tright, left, output, options);
123}
124
125}
126
127#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_column_with_single_vector(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightValue_ *const right, Output_ *const output, const MultiplyDenseColumnWithSingleVectorOptions &options)
Definition dense_column.hpp:51
void multiply_sparse_column_with_single_vector(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightValue_ *const right, Output_ *const output, const MultiplySparseColumnWithSingleVectorOptions &options)
Definition sparse_column.hpp:49
void multiply_dense_row_with_single_vector(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightValue_ *const right, Output_ *const output, const MultiplyDenseRowWithSingleVectorOptions &options)
Definition dense_row.hpp:50
void multiply_with_single_vector(const tatami::Matrix< Value_, Index_ > &left, const Right_ *const right, Output_ *const output, const MultiplyWithSingleVectorOptions &options)
Definition dispatch.hpp:77
void multiply_sparse_row_with_single_vector(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightValue_ *const right, Output_ *const output, const MultiplySparseRowWithSingleVectorOptions &options)
Definition sparse_row.hpp:50
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)
Dense column-major LHS, single vector RHS.
Dense row-major LHS, single vector RHS.
Sparse column-major LHS, single vector RHS.
Sparse row-major LHS, single vector RHS.
Options for multiply_dense_column_with_single_vector().
Definition dense_column.hpp:28
Options for multiply_dense_row_with_single_vector().
Definition dense_row.hpp:25
Options for multiply_sparse_column_with_single_vector().
Definition sparse_column.hpp:26
int num_threads
Definition sparse_column.hpp:31
Options for multiply_sparse_row_with_single_vector().
Definition sparse_row.hpp:25
Options for multiply_with_single_vector().
Definition dispatch.hpp:19
MultiplySparseRowWithSingleVectorOptions sparse_row
Definition dispatch.hpp:33
MultiplyDenseColumnWithSingleVectorOptions dense_column
Definition dispatch.hpp:28
MultiplySparseColumnWithSingleVectorOptions sparse_column
Definition dispatch.hpp:38
MultiplyDenseRowWithSingleVectorOptions dense_row
Definition dispatch.hpp:23