GCC Code Coverage Report


Directory: ./
File: tasks/boltenkov_s_gaussian_kernel/tbb/src/ops_tbb.cpp
Date: 2026-06-04 20:25:32
Exec Total Coverage
Lines: 45 45 100.0%
Functions: 9 9 100.0%
Branches: 27 52 51.9%

Line Branch Exec Source
1 #include "boltenkov_s_gaussian_kernel/tbb/include/ops_tbb.hpp"
2
3 #include <tbb/tbb.h>
4
5 #include <algorithm>
6 #include <cstddef>
7 #include <vector>
8
9 #include "boltenkov_s_gaussian_kernel/common/include/common.hpp"
10 #include "util/include/util.hpp"
11
12 namespace boltenkov_s_gaussian_kernel {
13
14
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
8 BoltenkovSGaussianKernelTBB::BoltenkovSGaussianKernelTBB(const InType &in)
15
5/12
✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 24 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
32 : kernel_{{{1, 2, 1}, {2, 4, 2}, {1, 2, 1}}} {
16 SetTypeOfTask(GetStaticTypeOfTask());
17 GetInput() = in;
18 8 GetOutput() = std::vector<std::vector<int>>();
19
3/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
16 }
20
21 8 bool BoltenkovSGaussianKernelTBB::ValidationImpl() {
22 8 std::size_t n = std::get<0>(GetInput());
23
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 std::size_t m = std::get<1>(GetInput());
24
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 if (std::get<2>(GetInput()).size() != n) {
25 return false;
26 }
27
2/2
✓ Branch 0 taken 220 times.
✓ Branch 1 taken 8 times.
228 for (std::size_t i = 0; i < n; i++) {
28
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 220 times.
220 if (std::get<2>(GetInput())[i].size() != m) {
29 return false;
30 }
31 }
32 return true;
33 }
34
35 8 bool BoltenkovSGaussianKernelTBB::PreProcessingImpl() {
36 8 GetOutput().resize(std::get<0>(GetInput()));
37
2/2
✓ Branch 0 taken 220 times.
✓ Branch 1 taken 8 times.
228 for (std::size_t i = 0; i < std::get<0>(GetInput()); i++) {
38 220 GetOutput()[i].resize(std::get<1>(GetInput()));
39 }
40 8 return true;
41 }
42
43 8 bool BoltenkovSGaussianKernelTBB::RunImpl() {
44 8 std::size_t n = std::get<0>(GetInput());
45 8 std::size_t m = std::get<1>(GetInput());
46 8 std::vector<std::vector<int>> data = std::get<2>(GetInput());
47
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 std::vector<std::vector<int>> tmp_data(n + 2, std::vector<int>(m + 2, 0));
48 std::vector<std::vector<int>> &res = GetOutput();
49
50
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
8 tbb::task_arena arena(ppc::util::GetNumThreads());
51
52
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
8 arena.execute([&] {
53 228 tbb::parallel_for(tbb::blocked_range<std::size_t>(1, n + 1), [&](const tbb::blocked_range<std::size_t> &r) {
54
2/2
✓ Branch 0 taken 220 times.
✓ Branch 1 taken 220 times.
440 for (std::size_t i = r.begin(); i != r.end(); ++i) {
55 220 std::copy(data[i - 1].begin(), data[i - 1].end(), tmp_data[i].begin() + 1);
56 }
57 220 });
58 8 });
59
60
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
8 auto kernel = kernel_;
61 8 int shift = shift_;
62
63
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
8 arena.execute([&] {
64 228 tbb::parallel_for(tbb::blocked_range<std::size_t>(1, n + 1), [&](const tbb::blocked_range<std::size_t> &r) {
65 440 for (std::size_t i = r.begin(); i != r.end(); ++i) {
66
2/2
✓ Branch 0 taken 14140 times.
✓ Branch 1 taken 220 times.
14360 for (std::size_t j = 1; j <= m; ++j) {
67 14140 res[i - 1][j - 1] = (tmp_data[i - 1][j - 1] * kernel[0][0]) + (tmp_data[i - 1][j] * kernel[0][1]) +
68 14140 (tmp_data[i - 1][j + 1] * kernel[0][2]) + (tmp_data[i][j - 1] * kernel[1][0]) +
69 14140 (tmp_data[i][j] * kernel[1][1]) + (tmp_data[i][j + 1] * kernel[1][2]) +
70 14140 (tmp_data[i + 1][j - 1] * kernel[2][0]) + (tmp_data[i + 1][j] * kernel[2][1]) +
71 14140 (tmp_data[i + 1][j + 1] * kernel[2][2]);
72 14140 res[i - 1][j - 1] >>= shift;
73 }
74 }
75 220 });
76 8 });
77
78 8 return true;
79 16 }
80
81 8 bool BoltenkovSGaussianKernelTBB::PostProcessingImpl() {
82 8 return true;
83 }
84
85 } // namespace boltenkov_s_gaussian_kernel
86