64 const RightColumns_ right_columns,
65 GetRightColumn_ get_right_column,
66 Output_*
const output,
69 const auto left_NR = left.
nrow();
70 const auto common_dim = left.
ncol();
78 for (LeftIndex_ lr = 0; lr < length; ++lr) {
79 const auto range = ext->fetch(vbuffer.data(), ibuffer.data());
80 for (RightColumns_ rc = 0; rc < right_columns; ++rc) {
81 output[sanisizer::nd_offset<std::size_t>(start + lr, left_NR, rc)] = sparse_dot_product<accumulators_>(
86 static_cast<Output_
>(0)
97 std::vector<std::vector<LeftValue_> > left_vbuffers;
98 std::vector<std::vector<LeftIndex_> > left_ibuffers;
99 std::vector<tatami::SparseRange<LeftValue_, LeftIndex_> > left_ranges;
101 const LeftIndex_ max_block_rows = sanisizer::min(length, options.
block_size);
102 left_vbuffers.reserve(max_block_rows);
103 left_ibuffers.reserve(max_block_rows);
104 for (LeftIndex_ lr = 0; lr < max_block_rows; ++lr) {
108 sanisizer::resize(left_ranges, max_block_rows);
112 while (lr < length) {
116 const LeftIndex_ lr_num = sanisizer::min(options.
block_size, length - lr);
117 for (LeftIndex_ lr_counter = 0; lr_counter < lr_num; ++lr_counter) {
118 left_ranges[lr_counter] = ext->fetch(left_vbuffers[lr_counter].data(), left_ibuffers[lr_counter].data());
121 for (RightColumns_ rc = 0; rc < right_columns; ++rc) {
122 const auto rcol = get_right_column(rc);
123 for (LeftIndex_ lr_counter = 0; lr_counter < lr_num; ++lr_counter) {
124 const auto& currange = left_ranges[lr_counter];
125 output[sanisizer::nd_offset<std::size_t>(start + lr + lr_counter, left_NR, rc)] = sparse_dot_product<accumulators_>(
130 static_cast<Output_
>(0)
void multiply_sparse_row_with_dense_column_matrix_to_column_output(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightColumns_ right_columns, GetRightColumn_ get_right_column, Output_ *const output, const MultiplySparseRowWithDenseColumnMatrixToColumnOutputOptions &options)
Definition column_to_column.hpp:62
auto consecutive_extractor(const Matrix< Value_, Index_ > &matrix, const bool row, const Index_ iter_start, const Index_ iter_length, Args_ &&... args)