From 83ec29be001ecc0ee6f5f5cc6b95156278cd9663 Mon Sep 17 00:00:00 2001 From: Pylaeva Svetlana Date: Fri, 17 Apr 2026 17:39:52 +0300 Subject: [PATCH 1/3] tbb done --- .../tbb/include/ops_tbb.hpp | 22 +++++ .../tbb/src/ops_tbb.cpp | 84 +++++++++++++++++++ .../tests/functional/main.cpp | 3 + .../tests/performance/main.cpp | 3 +- 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp create mode 100644 tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp new file mode 100644 index 000000000..793721f0c --- /dev/null +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "pylaeva_s_inc_contrast_img_by_lsh/common/include/common.hpp" +#include "task/include/task.hpp" + +namespace pylaeva_s_inc_contrast_img_by_lsh { + +class PylaevaSIncContrastImgByLshTBB : public BaseTask { + public: + static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { + return ppc::task::TypeOfTask::kTBB; + } + explicit PylaevaSIncContrastImgByLshTBB(const InType &in); + + private: + bool ValidationImpl() override; + bool PreProcessingImpl() override; + bool RunImpl() override; + bool PostProcessingImpl() override; +}; + +} // namespace pylaeva_s_inc_contrast_img_by_lsh diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp new file mode 100644 index 000000000..5d8180cf4 --- /dev/null +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp @@ -0,0 +1,84 @@ +#include "pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp" + +#include +#include +#include +#include +#include + +#include + +#include "pylaeva_s_inc_contrast_img_by_lsh/common/include/common.hpp" +#include "oneapi/tbb/parallel_for.h" + +namespace pylaeva_s_inc_contrast_img_by_lsh { + +PylaevaSIncContrastImgByLshTBB::PylaevaSIncContrastImgByLshTBB(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = {}; +} + +bool PylaevaSIncContrastImgByLshTBB::ValidationImpl() { + return !(GetInput().empty()); +} + +bool PylaevaSIncContrastImgByLshTBB::PreProcessingImpl() { + GetOutput().resize(GetInput().size()); + return true; +} + +bool PylaevaSIncContrastImgByLshTBB::RunImpl() { + const auto &input = GetInput(); + auto &output = GetOutput(); + + size_t size = input.size(); + + if (size == 0) return false; + + using MinMax = std::pair; + + auto [min_pixel, max_pixel] = tbb::parallel_reduce( + tbb::blocked_range(1, size), + MinMax{input[0], input[0]}, + [&](const auto& range, MinMax init) -> MinMax { + for (size_t i = range.begin(); i != range.end(); ++i) { + init.first = std::min(init.first, input[i]); + init.second = std::max(init.second, input[i]); + } + return init; + }, + [](const MinMax& a, const MinMax& b) -> MinMax { + return {std::min(a.first, b.first), std::max(a.second, b.second)}; + } + ); + + if (min_pixel == max_pixel) { + tbb::parallel_for( + tbb::blocked_range(0, size), + [&](const auto& r) { + const uint8_t* src = input.data() + r.begin(); + uint8_t* dst = output.data() + r.begin(); + std::copy(src, src + r.size(), dst); + }, + tbb::simple_partitioner() + ); + return true; + } + + const float scale = 255.0F / static_cast(max_pixel - min_pixel); + + tbb::parallel_for(tbb::blocked_range(0, size), [&](const auto &r) { + for (auto i = r.begin(); i != r.end(); ++i) { + output[i] = static_cast(std::round((input[i] - min_pixel) * scale)); + } + }, tbb::static_partitioner()); + + return true; +} + +bool PylaevaSIncContrastImgByLshTBB::PostProcessingImpl() { + return true; +} + +} // namespace pylaeva_s_inc_contrast_img_by_lsh diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/functional/main.cpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/functional/main.cpp index 0c8b1819b..321aed854 100644 --- a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/functional/main.cpp +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/functional/main.cpp @@ -11,6 +11,7 @@ #include "pylaeva_s_inc_contrast_img_by_lsh/common/include/common.hpp" #include "pylaeva_s_inc_contrast_img_by_lsh/omp/include/ops_omp.hpp" #include "pylaeva_s_inc_contrast_img_by_lsh/seq/include/ops_seq.hpp" +#include "pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp" #include "util/include/func_test_util.hpp" #include "util/include/util.hpp" @@ -139,6 +140,8 @@ const std::array kTestParam = {std::make_tuple(kImage1, kExpected1 const auto kTestTasksList = std::tuple_cat(ppc::util::AddFuncTask( kTestParam, PPC_SETTINGS_pylaeva_s_inc_contrast_img_by_lsh), ppc::util::AddFuncTask( + kTestParam, PPC_SETTINGS_pylaeva_s_inc_contrast_img_by_lsh), + ppc::util::AddFuncTask( kTestParam, PPC_SETTINGS_pylaeva_s_inc_contrast_img_by_lsh)); const auto kGtestValues = ppc::util::ExpandToValues(kTestTasksList); diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp index 941084c46..790050773 100644 --- a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp @@ -7,6 +7,7 @@ #include "pylaeva_s_inc_contrast_img_by_lsh/common/include/common.hpp" #include "pylaeva_s_inc_contrast_img_by_lsh/omp/include/ops_omp.hpp" #include "pylaeva_s_inc_contrast_img_by_lsh/seq/include/ops_seq.hpp" +#include "pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp" #include "util/include/perf_test_util.hpp" namespace pylaeva_s_inc_contrast_img_by_lsh { @@ -46,7 +47,7 @@ TEST_P(PylaevaSRunPerfTestThreads, RunPerfModes) { namespace { const auto kAllPerfTasks = - ppc::util::MakeAllPerfTasks( + ppc::util::MakeAllPerfTasks( PPC_SETTINGS_pylaeva_s_inc_contrast_img_by_lsh); const auto kGtestValues = ppc::util::TupleToGTestValues(kAllPerfTasks); From 0ff4ce2545ca2edfae2c89bb174a652cd4678a05 Mon Sep 17 00:00:00 2001 From: Pylaeva Svetlana Date: Fri, 17 Apr 2026 17:49:41 +0300 Subject: [PATCH 2/3] clang-format --- .../tbb/src/ops_tbb.cpp | 56 +++++++++---------- .../tests/performance/main.cpp | 4 +- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp index 5d8180cf4..f8166244d 100644 --- a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp @@ -1,15 +1,15 @@ #include "pylaeva_s_inc_contrast_img_by_lsh/tbb/include/ops_tbb.hpp" +#include + #include -#include +#include #include #include #include -#include - -#include "pylaeva_s_inc_contrast_img_by_lsh/common/include/common.hpp" #include "oneapi/tbb/parallel_for.h" +#include "pylaeva_s_inc_contrast_img_by_lsh/common/include/common.hpp" namespace pylaeva_s_inc_contrast_img_by_lsh { @@ -34,44 +34,38 @@ bool PylaevaSIncContrastImgByLshTBB::RunImpl() { size_t size = input.size(); - if (size == 0) return false; + if (size == 0) { + return false; + } using MinMax = std::pair; - auto [min_pixel, max_pixel] = tbb::parallel_reduce( - tbb::blocked_range(1, size), - MinMax{input[0], input[0]}, - [&](const auto& range, MinMax init) -> MinMax { - for (size_t i = range.begin(); i != range.end(); ++i) { - init.first = std::min(init.first, input[i]); - init.second = std::max(init.second, input[i]); - } - return init; - }, - [](const MinMax& a, const MinMax& b) -> MinMax { - return {std::min(a.first, b.first), std::max(a.second, b.second)}; - } - ); + auto [min_pixel, max_pixel] = tbb::parallel_reduce(tbb::blocked_range(1, size), MinMax{input[0], input[0]}, + [&](const auto &range, MinMax init) -> MinMax { + for (size_t i = range.begin(); i != range.end(); ++i) { + init.first = std::min(init.first, input[i]); + init.second = std::max(init.second, input[i]); + } + return init; + }, [](const MinMax &a, const MinMax &b) -> MinMax { + return {std::min(a.first, b.first), std::max(a.second, b.second)}; + }); if (min_pixel == max_pixel) { - tbb::parallel_for( - tbb::blocked_range(0, size), - [&](const auto& r) { - const uint8_t* src = input.data() + r.begin(); - uint8_t* dst = output.data() + r.begin(); - std::copy(src, src + r.size(), dst); - }, - tbb::simple_partitioner() - ); + tbb::parallel_for(tbb::blocked_range(0, size), [&](const auto &r) { + const uint8_t *src = input.data() + r.begin(); + uint8_t *dst = output.data() + r.begin(); + std::copy(src, src + r.size(), dst); + }, tbb::simple_partitioner()); return true; } const float scale = 255.0F / static_cast(max_pixel - min_pixel); tbb::parallel_for(tbb::blocked_range(0, size), [&](const auto &r) { - for (auto i = r.begin(); i != r.end(); ++i) { - output[i] = static_cast(std::round((input[i] - min_pixel) * scale)); - } + for (auto i = r.begin(); i != r.end(); ++i) { + output[i] = static_cast(std::round((input[i] - min_pixel) * scale)); + } }, tbb::static_partitioner()); return true; diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp index 790050773..545c3dd89 100644 --- a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tests/performance/main.cpp @@ -47,8 +47,8 @@ TEST_P(PylaevaSRunPerfTestThreads, RunPerfModes) { namespace { const auto kAllPerfTasks = - ppc::util::MakeAllPerfTasks( - PPC_SETTINGS_pylaeva_s_inc_contrast_img_by_lsh); + ppc::util::MakeAllPerfTasks(PPC_SETTINGS_pylaeva_s_inc_contrast_img_by_lsh); const auto kGtestValues = ppc::util::TupleToGTestValues(kAllPerfTasks); From 080dadccafa2649656aa79b6bbf452f633311c86 Mon Sep 17 00:00:00 2001 From: Pylaeva Svetlana Date: Fri, 17 Apr 2026 19:24:21 +0300 Subject: [PATCH 3/3] clang-tidy: add missing include for std::pair --- tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp index f8166244d..d21a83be4 100644 --- a/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp +++ b/tasks/pylaeva_s_inc_contrast_img_by_lsh/tbb/src/ops_tbb.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "oneapi/tbb/parallel_for.h"