GCC Code Coverage Report


Directory: ./
File: tasks/tabalaev_a_matrix_mul_strassen/seq/include/ops_seq.hpp
Date: 2026-04-02 17:12:27
Exec Total Coverage
Lines: 1 1 100.0%
Functions: 0 0 -%
Branches: 0 0 -%

Line Branch Exec Source
1 #pragma once
2
3 #include <cstddef>
4 #include <stack>
5 #include <vector>
6
7 #include "tabalaev_a_matrix_mul_strassen/common/include/common.hpp"
8 #include "task/include/task.hpp"
9
10 namespace tabalaev_a_matrix_mul_strassen {
11
12 13776 struct StrassenFrame {
13 std::vector<double> mat_a;
14 std::vector<double> mat_b;
15 size_t n;
16 int stage;
17 };
18
19 class TabalaevAMatrixMulStrassenSEQ : public BaseTask {
20 public:
21 static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() {
22 return ppc::task::TypeOfTask::kSEQ;
23 }
24 explicit TabalaevAMatrixMulStrassenSEQ(const InType &in);
25
26 private:
27 bool ValidationImpl() override;
28 bool PreProcessingImpl() override;
29 bool RunImpl() override;
30 bool PostProcessingImpl() override;
31
32 static std::vector<double> StrassenMultiply(const std::vector<double> &mat_a, const std::vector<double> &mat_b,
33 size_t n);
34 static std::vector<double> Add(const std::vector<double> &mat_a, const std::vector<double> &mat_b);
35 static std::vector<double> Subtract(const std::vector<double> &mat_a, const std::vector<double> &mat_b);
36 static std::vector<double> BaseMultiply(const std::vector<double> &mat_a, const std::vector<double> &mat_b, size_t n);
37 static void PushStrassenSubtasks(std::stack<StrassenFrame> &frames, const std::vector<double> &mat_a,
38 const std::vector<double> &mat_b, size_t n);
39 static std::vector<double> CombineStrassenResults(std::stack<std::vector<double>> &results, size_t n);
40
41 size_t a_rows_ = 0;
42 size_t a_cols_b_rows_ = 0;
43 size_t b_cols_ = 0;
44
45 size_t padded_n_ = 0;
46
47 std::vector<double> padded_a_;
48 std::vector<double> padded_b_;
49 std::vector<double> result_c_;
50 };
51
52 } // namespace tabalaev_a_matrix_mul_strassen
53