From 28172214fce1a71dea1c61880ae93491dfa8095e Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 03:15:54 +0300 Subject: [PATCH 01/13] first_try --- .../common/include/common.hpp | 15 ++++ .../telnov_a_integral_rectangle/data/pic.ppm | Bin 0 -> 23 bytes tasks/telnov_a_integral_rectangle/info.json | 9 ++ tasks/telnov_a_integral_rectangle/report.md | 0 .../seq/include/ops_seq.hpp | 22 +++++ .../telnov_a_integral_rectangle/seq/report.md | 0 .../seq/src/ops_seq.cpp | 63 ++++++++++++++ .../telnov_a_integral_rectangle/settings.json | 10 +++ .../tests/functional/main.cpp | 82 ++++++++++++++++++ .../tests/performance/main.cpp | 45 ++++++++++ 10 files changed, 246 insertions(+) create mode 100644 tasks/telnov_a_integral_rectangle/common/include/common.hpp create mode 100644 tasks/telnov_a_integral_rectangle/data/pic.ppm create mode 100644 tasks/telnov_a_integral_rectangle/info.json create mode 100644 tasks/telnov_a_integral_rectangle/report.md create mode 100644 tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp create mode 100644 tasks/telnov_a_integral_rectangle/seq/report.md create mode 100644 tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp create mode 100644 tasks/telnov_a_integral_rectangle/settings.json create mode 100644 tasks/telnov_a_integral_rectangle/tests/functional/main.cpp create mode 100644 tasks/telnov_a_integral_rectangle/tests/performance/main.cpp diff --git a/tasks/telnov_a_integral_rectangle/common/include/common.hpp b/tasks/telnov_a_integral_rectangle/common/include/common.hpp new file mode 100644 index 000000000..6fed885e3 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/common/include/common.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +#include "task/include/task.hpp" + +namespace telnov_a_integral_rectangle { + +using InType = std::pair; +using OutType = double; +using TestType = std::tuple; +using BaseTask = ppc::task::Task; + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/data/pic.ppm b/tasks/telnov_a_integral_rectangle/data/pic.ppm new file mode 100644 index 0000000000000000000000000000000000000000..637624238c89d914613ed301968bffbf462bc110 GIT binary patch literal 23 bcmWGA<1$h(;xaNd<@(RSzyQYo|NjR7KDY +#include + +#include "telnov_a_integral_rectangle/common/include/common.hpp" +#include "util/include/util.hpp" + +namespace telnov_a_integral_rectangle { + +TelnovAIntegralRectangleSEQ::TelnovAIntegralRectangleSEQ(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = 0; +} + +bool TelnovAIntegralRectangleSEQ::ValidationImpl() { + return GetInput().first > 0 && GetInput().second > 0; +} + +bool TelnovAIntegralRectangleSEQ::PreProcessingImpl() { + GetOutput() = 0.0; + return true; +} + +bool TelnovAIntegralRectangleSEQ::RunImpl() { + const int N = GetInput().first; + const int D = GetInput().second; + + const double a = 0.0; + const double b = 1.0; + const double h = (b - a) / N; + + const long long total_points = static_cast(std::pow(N, D)); + + double result = 0.0; + + for (long long idx = 0; idx < total_points; idx++) { + long long tmp = idx; + double f_value = 0.0; + + for (int dim = 0; dim < D; dim++) { + int coord_index = tmp % N; + tmp /= N; + + double x = a + (coord_index + 0.5) * h; + f_value += x; + } + + result += f_value; + } + + result *= std::pow(h, D); + + GetOutput() = result; + return true; +} + +bool TelnovAIntegralRectangleSEQ::PostProcessingImpl() { + return true; +} + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/settings.json b/tasks/telnov_a_integral_rectangle/settings.json new file mode 100644 index 000000000..0be0208fc --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/settings.json @@ -0,0 +1,10 @@ +{ + "tasks": { + "all": "enabled", + "omp": "enabled", + "seq": "enabled", + "stl": "enabled", + "tbb": "enabled" + }, + "tasks_type": "threads" +} diff --git a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp new file mode 100644 index 000000000..a1daf8ce3 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp @@ -0,0 +1,82 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "telnov_a_integral_rectangle/common/include/common.hpp" +#include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" +#include "util/include/func_test_util.hpp" +#include "util/include/util.hpp" + +namespace telnov_a_integral_rectangle { + +class TelnovAIntegralRectangleFuncTests : public ppc::util::BaseRunFuncTests { + public: + static std::string PrintTestParam(const TestType &test_param) { + const auto &in = std::get<0>(test_param); + return std::to_string(in.first) + "_" + std::to_string(in.second); + } + + protected: + void SetUp() override { + TestType params = std::get(ppc::util::GTestParamIndex::kTestParams)>(GetParam()); + + input_data_ = std::get<0>(params); + } + + bool CheckTestOutputData(OutType &output_data) final { + const int D = input_data_.second; + const int N = input_data_.first; + + const double expected = static_cast(D) / 2.0; + + double tolerance = 1.0 / N; + + return std::abs(output_data - expected) < tolerance; + } + + InType GetTestInputData() final { + return input_data_; + } + + private: + InType input_data_; +}; + +namespace { + +TEST_P(TelnovAIntegralRectangleFuncTests, MatmulFromPic) { + ExecuteTest(GetParam()); +} + +const std::array kTestParam = { + std::make_tuple(InType{1, 1}, "1D_N1"), std::make_tuple(InType{5, 1}, "1D_small"), + std::make_tuple(InType{20, 1}, "1D"), + + std::make_tuple(InType{10, 2}, "2D_small"), std::make_tuple(InType{20, 2}, "2D"), + + std::make_tuple(InType{10, 3}, "3D_small"), std::make_tuple(InType{15, 3}, "3D"), + + std::make_tuple(InType{8, 5}, "5D")}; + +const auto kTestTasksList = std::tuple_cat( + ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle)); + +const auto kGtestValues = ppc::util::ExpandToValues(kTestTasksList); + +const auto kPerfTestName = TelnovAIntegralRectangleFuncTests::PrintFuncTestName; + +INSTANTIATE_TEST_SUITE_P(PicMatrixTests, TelnovAIntegralRectangleFuncTests, kGtestValues, kPerfTestName); + +} // namespace + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp new file mode 100644 index 000000000..f4d4397c6 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp @@ -0,0 +1,45 @@ +#include + +#include "telnov_a_integral_rectangle/common/include/common.hpp" +#include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" +#include "util/include/perf_test_util.hpp" + +namespace telnov_a_integral_rectangle { + +class TelnovAIntegralRectanglePerfTests : public ppc::util::BaseRunPerfTests { + protected: + void SetUp() override { + input_data_ = {50, 4}; + } + + bool CheckTestOutputData(OutType &output_data) final { + const double expected = 4.0 / 2.0; + return std::abs(output_data - expected) < 1e-2; + } + + InType GetTestInputData() final { + return input_data_; + } + + private: + InType input_data_; +}; + +TEST_P(TelnovAIntegralRectanglePerfTests, RunPerfModes) { + ExecuteTest(GetParam()); +} + +namespace { + +const auto kAllPerfTasks = + ppc::util::MakeAllPerfTasks(PPC_SETTINGS_telnov_a_integral_rectangle); + +const auto kGtestValues = ppc::util::TupleToGTestValues(kAllPerfTasks); + +const auto kPerfTestName = TelnovAIntegralRectanglePerfTests::CustomPerfTestName; + +INSTANTIATE_TEST_SUITE_P(RunModeTests, TelnovAIntegralRectanglePerfTests, kGtestValues, kPerfTestName); + +} // namespace + +} // namespace telnov_a_integral_rectangle From 11da6314b864207d6d855f1192abc365ef1acb8b Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 04:17:14 +0300 Subject: [PATCH 02/13] fix_clang --- .../common/include/common.hpp | 3 +- .../telnov_a_integral_rectangle/data/pic.ppm | Bin 23 -> 0 bytes tasks/telnov_a_integral_rectangle/info.json | 2 +- .../seq/src/ops_seq.cpp | 33 ++++++++---------- .../tests/functional/main.cpp | 29 +++++---------- .../tests/performance/main.cpp | 2 ++ 6 files changed, 28 insertions(+), 41 deletions(-) delete mode 100644 tasks/telnov_a_integral_rectangle/data/pic.ppm diff --git a/tasks/telnov_a_integral_rectangle/common/include/common.hpp b/tasks/telnov_a_integral_rectangle/common/include/common.hpp index 6fed885e3..aafa9a989 100644 --- a/tasks/telnov_a_integral_rectangle/common/include/common.hpp +++ b/tasks/telnov_a_integral_rectangle/common/include/common.hpp @@ -2,8 +2,7 @@ #include #include - -#include "task/include/task.hpp" +#include namespace telnov_a_integral_rectangle { diff --git a/tasks/telnov_a_integral_rectangle/data/pic.ppm b/tasks/telnov_a_integral_rectangle/data/pic.ppm deleted file mode 100644 index 637624238c89d914613ed301968bffbf462bc110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 bcmWGA<1$h(;xaNd<@(RSzyQYo|NjR7KDY -#include - -#include "telnov_a_integral_rectangle/common/include/common.hpp" -#include "util/include/util.hpp" +#include namespace telnov_a_integral_rectangle { @@ -24,33 +21,33 @@ bool TelnovAIntegralRectangleSEQ::PreProcessingImpl() { } bool TelnovAIntegralRectangleSEQ::RunImpl() { - const int N = GetInput().first; - const int D = GetInput().second; + const int n = GetInput().first; + const int d = GetInput().second; const double a = 0.0; const double b = 1.0; - const double h = (b - a) / N; + const double h = (b - a) / n; - const long long total_points = static_cast(std::pow(N, D)); + const int64_t totalPoints = static_cast(std::pow(n, d)); double result = 0.0; - for (long long idx = 0; idx < total_points; idx++) { - long long tmp = idx; - double f_value = 0.0; + for (int64_t idx = 0; idx < totalPoints; idx++) { + int64_t tmp = idx; + double fValue = 0.0; - for (int dim = 0; dim < D; dim++) { - int coord_index = tmp % N; - tmp /= N; + for (int dim = 0; dim < d; dim++) { + int coordIndex = static_cast(tmp % n); + tmp /= n; - double x = a + (coord_index + 0.5) * h; - f_value += x; + double x = a + ((coordIndex + 0.5) * h); + fValue += x; } - result += f_value; + result += fValue; } - result *= std::pow(h, D); + result *= std::pow(h, d); GetOutput() = result; return true; diff --git a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp index a1daf8ce3..cd1629a87 100644 --- a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp @@ -1,21 +1,15 @@ #include #include -#include #include -#include -#include -#include -#include +#include #include #include #include -#include #include "telnov_a_integral_rectangle/common/include/common.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" #include "util/include/func_test_util.hpp" -#include "util/include/util.hpp" namespace telnov_a_integral_rectangle { @@ -34,12 +28,11 @@ class TelnovAIntegralRectangleFuncTests : public ppc::util::BaseRunFuncTests(D) / 2.0; - - double tolerance = 1.0 / N; + const double expected = static_cast(d) / 2.0; + const double tolerance = 1.0 / n; return std::abs(output_data - expected) < tolerance; } @@ -59,14 +52,10 @@ TEST_P(TelnovAIntegralRectangleFuncTests, MatmulFromPic) { } const std::array kTestParam = { - std::make_tuple(InType{1, 1}, "1D_N1"), std::make_tuple(InType{5, 1}, "1D_small"), - std::make_tuple(InType{20, 1}, "1D"), - - std::make_tuple(InType{10, 2}, "2D_small"), std::make_tuple(InType{20, 2}, "2D"), - - std::make_tuple(InType{10, 3}, "3D_small"), std::make_tuple(InType{15, 3}, "3D"), - - std::make_tuple(InType{8, 5}, "5D")}; + std::make_tuple(InType{1, 1}, "1D_N1"), std::make_tuple(InType{5, 1}, "1D_small"), + std::make_tuple(InType{20, 1}, "1D"), std::make_tuple(InType{10, 2}, "2D_small"), + std::make_tuple(InType{20, 2}, "2D"), std::make_tuple(InType{10, 3}, "3D_small"), + std::make_tuple(InType{15, 3}, "3D"), std::make_tuple(InType{8, 5}, "5D")}; const auto kTestTasksList = std::tuple_cat( ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle)); diff --git a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp index f4d4397c6..f26cc4c93 100644 --- a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp @@ -1,5 +1,7 @@ #include +#include + #include "telnov_a_integral_rectangle/common/include/common.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" #include "util/include/perf_test_util.hpp" From 7812a1ffd16f28d7aa1a2803751cef2ec5cf1e89 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 04:43:42 +0300 Subject: [PATCH 03/13] include_task --- tasks/telnov_a_integral_rectangle/common/include/common.hpp | 2 ++ tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tasks/telnov_a_integral_rectangle/common/include/common.hpp b/tasks/telnov_a_integral_rectangle/common/include/common.hpp index aafa9a989..cdeb5aa59 100644 --- a/tasks/telnov_a_integral_rectangle/common/include/common.hpp +++ b/tasks/telnov_a_integral_rectangle/common/include/common.hpp @@ -4,6 +4,8 @@ #include #include +#include "../../modules/task/include/task.hpp" + namespace telnov_a_integral_rectangle { using InType = std::pair; diff --git a/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp b/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp index 1973f75d0..b287c49a5 100644 --- a/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp +++ b/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp @@ -1,6 +1,6 @@ #pragma once -#include "task/include/task.hpp" +#include "../../modules/task/include/task.hpp" #include "telnov_a_integral_rectangle/common/include/common.hpp" namespace telnov_a_integral_rectangle { From b6dd9c6b92242da0eb5849b660ae1de6806c8996 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 04:56:07 +0300 Subject: [PATCH 04/13] update_include --- tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp | 10 ++++++---- .../tests/functional/main.cpp | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp index e9d912d4d..11eec4e5d 100644 --- a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp +++ b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp @@ -3,6 +3,8 @@ #include #include +#include "telnov_a_integral_rectangle/common/include/common.hpp" + namespace telnov_a_integral_rectangle { TelnovAIntegralRectangleSEQ::TelnovAIntegralRectangleSEQ(const InType &in) { @@ -28,23 +30,23 @@ bool TelnovAIntegralRectangleSEQ::RunImpl() { const double b = 1.0; const double h = (b - a) / n; - const int64_t totalPoints = static_cast(std::pow(n, d)); + auto total_points = static_cast(std::pow(n, d)); double result = 0.0; for (int64_t idx = 0; idx < totalPoints; idx++) { int64_t tmp = idx; - double fValue = 0.0; + double f_Value = 0.0; for (int dim = 0; dim < d; dim++) { int coordIndex = static_cast(tmp % n); tmp /= n; double x = a + ((coordIndex + 0.5) * h); - fValue += x; + f_Value += x; } - result += fValue; + result += f_Value; } result *= std::pow(h, d); diff --git a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp index cd1629a87..64d4cc400 100644 --- a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include From 4217bbe1f3d15e83dc4976ee669ef121edf50424 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 05:06:37 +0300 Subject: [PATCH 05/13] name_peremennih --- .../telnov_a_integral_rectangle/seq/src/ops_seq.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp index 11eec4e5d..521faf3cd 100644 --- a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp +++ b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp @@ -34,19 +34,19 @@ bool TelnovAIntegralRectangleSEQ::RunImpl() { double result = 0.0; - for (int64_t idx = 0; idx < totalPoints; idx++) { + for (int64_t idx = 0; idx < total_points; idx++) { int64_t tmp = idx; - double f_Value = 0.0; + double f_value = 0.0; for (int dim = 0; dim < d; dim++) { - int coordIndex = static_cast(tmp % n); + int coord_index = static_cast(tmp % n); tmp /= n; - double x = a + ((coordIndex + 0.5) * h); - f_Value += x; + double x = a + ((coord_index + 0.5) * h); + f_value += x; } - result += f_Value; + result += f_value; } result *= std::pow(h, d); From 3c4f28ac787a35cb7f1c58024bb6b70e33d9636d Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 05:17:03 +0300 Subject: [PATCH 06/13] update_util_for_func --- tasks/telnov_a_integral_rectangle/tests/functional/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp index 64d4cc400..2b20dc0f7 100644 --- a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp @@ -11,6 +11,7 @@ #include "telnov_a_integral_rectangle/common/include/common.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" #include "util/include/func_test_util.hpp" +#include "util/include/util.hpp" namespace telnov_a_integral_rectangle { From 0868f51fa30f22b75af8a7f2de3df838a4233727 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 05:44:28 +0300 Subject: [PATCH 07/13] fix_info_pre_commit_json --- tasks/telnov_a_integral_rectangle/info.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasks/telnov_a_integral_rectangle/info.json b/tasks/telnov_a_integral_rectangle/info.json index 52bcc635d..32811833c 100644 --- a/tasks/telnov_a_integral_rectangle/info.json +++ b/tasks/telnov_a_integral_rectangle/info.json @@ -1,9 +1,9 @@ { "student": { - "first_name": "Анатолий", - "group_number": "3823Б1ФИ1", - "last_name": "Тельнов", - "middle_name": "Викторович", + "first_name": "Anatoliy", + "group_number": "3823B1FI1", + "last_name": "Telnov", + "middle_name": "Viktorovich", "task_number": "1" } } From 071c7c84a77246c24ae2d779140140a6929513b4 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Fri, 27 Feb 2026 17:01:09 +0300 Subject: [PATCH 08/13] delete_md --- tasks/telnov_a_integral_rectangle/report.md | 0 tasks/telnov_a_integral_rectangle/seq/report.md | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tasks/telnov_a_integral_rectangle/report.md delete mode 100644 tasks/telnov_a_integral_rectangle/seq/report.md diff --git a/tasks/telnov_a_integral_rectangle/report.md b/tasks/telnov_a_integral_rectangle/report.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/tasks/telnov_a_integral_rectangle/seq/report.md b/tasks/telnov_a_integral_rectangle/seq/report.md deleted file mode 100644 index e69de29bb..000000000 From 780501c32272fb32c549bdaa3ebe631ce738b971 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Thu, 12 Mar 2026 00:58:33 +0300 Subject: [PATCH 09/13] omp_first_try --- .../omp/include/ops_omp.hpp | 22 +++++++ .../omp/src/ops_omp.cpp | 65 +++++++++++++++++++ .../tests/functional/main.cpp | 4 +- .../tests/performance/main.cpp | 9 ++- 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 tasks/telnov_a_integral_rectangle/omp/include/ops_omp.hpp create mode 100644 tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp diff --git a/tasks/telnov_a_integral_rectangle/omp/include/ops_omp.hpp b/tasks/telnov_a_integral_rectangle/omp/include/ops_omp.hpp new file mode 100644 index 000000000..2737b53a6 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/omp/include/ops_omp.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "../../modules/task/include/task.hpp" +#include "telnov_a_integral_rectangle/common/include/common.hpp" + +namespace telnov_a_integral_rectangle { + +class TelnovAIntegralRectangleOMP : public BaseTask { + public: + static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { + return ppc::task::TypeOfTask::kOMP; + } + explicit TelnovAIntegralRectangleOMP(const InType &in); + + private: + bool ValidationImpl() override; + bool PreProcessingImpl() override; + bool RunImpl() override; + bool PostProcessingImpl() override; +}; + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp b/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp new file mode 100644 index 000000000..d32beda28 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp @@ -0,0 +1,65 @@ +#include "telnov_a_integral_rectangle/omp/include/ops_omp.hpp" + +#include + +#include +#include + +#include "telnov_a_integral_rectangle/common/include/common.hpp" + +namespace telnov_a_integral_rectangle { + +TelnovAIntegralRectangleOMP::TelnovAIntegralRectangleOMP(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = 0; +} + +bool TelnovAIntegralRectangleOMP::ValidationImpl() { + return GetInput().first > 0 && GetInput().second > 0; +} + +bool TelnovAIntegralRectangleOMP::PreProcessingImpl() { + GetOutput() = 0.0; + return true; +} + +bool TelnovAIntegralRectangleOMP::RunImpl() { + const int n = GetInput().first; + const int d = GetInput().second; + + const double a = 0.0; + const double b = 1.0; + const double h = (b - a) / static_cast(n); + + const int64_t total_points = static_cast(std::pow(n, d)); + + double result = 0.0; + +#pragma omp parallel for reduction(+ : result) + for (int64_t idx = 0; idx < total_points; idx++) { + int64_t tmp = idx; + double f_value = 0.0; + + for (int dim = 0; dim < d; dim++) { + const int coord_index = static_cast(tmp % n); + tmp /= n; + + const double x = a + (static_cast(coord_index) + 0.5) * h; + f_value += x; + } + + result += f_value; + } + + result *= std::pow(h, d); + + GetOutput() = result; + return true; +} + +bool TelnovAIntegralRectangleOMP::PostProcessingImpl() { + return true; +} + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp index 2b20dc0f7..07e5e4412 100644 --- a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp @@ -9,6 +9,7 @@ #include #include "telnov_a_integral_rectangle/common/include/common.hpp" +#include "telnov_a_integral_rectangle/omp/include/ops_omp.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" #include "util/include/func_test_util.hpp" #include "util/include/util.hpp" @@ -60,7 +61,8 @@ const std::array kTestParam = { std::make_tuple(InType{15, 3}, "3D"), std::make_tuple(InType{8, 5}, "5D")}; const auto kTestTasksList = std::tuple_cat( - ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle)); + ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle), + ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle)); const auto kGtestValues = ppc::util::ExpandToValues(kTestTasksList); diff --git a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp index f26cc4c93..6dfe78837 100644 --- a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp @@ -1,8 +1,10 @@ #include #include +#include #include "telnov_a_integral_rectangle/common/include/common.hpp" +#include "telnov_a_integral_rectangle/omp/include/ops_omp.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" #include "util/include/perf_test_util.hpp" @@ -33,9 +35,14 @@ TEST_P(TelnovAIntegralRectanglePerfTests, RunPerfModes) { namespace { -const auto kAllPerfTasks = +const auto kSeqPerfTasks = ppc::util::MakeAllPerfTasks(PPC_SETTINGS_telnov_a_integral_rectangle); +const auto kOmpPerfTasks = + ppc::util::MakeAllPerfTasks(PPC_SETTINGS_telnov_a_integral_rectangle); + +const auto kAllPerfTasks = std::tuple_cat(kSeqPerfTasks, kOmpPerfTasks); + const auto kGtestValues = ppc::util::TupleToGTestValues(kAllPerfTasks); const auto kPerfTestName = TelnovAIntegralRectanglePerfTests::CustomPerfTestName; From 60dead85d95a712faa6bbbe989b8511eb93ad334 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Thu, 12 Mar 2026 01:36:37 +0300 Subject: [PATCH 10/13] fix_clang --- tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp b/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp index d32beda28..0ed5d9455 100644 --- a/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp +++ b/tasks/telnov_a_integral_rectangle/omp/src/ops_omp.cpp @@ -32,11 +32,11 @@ bool TelnovAIntegralRectangleOMP::RunImpl() { const double b = 1.0; const double h = (b - a) / static_cast(n); - const int64_t total_points = static_cast(std::pow(n, d)); + const auto total_points = static_cast(std::pow(n, d)); double result = 0.0; -#pragma omp parallel for reduction(+ : result) +#pragma omp parallel for default(none) reduction(+ : result) shared(total_points, n, d, a, h) for (int64_t idx = 0; idx < total_points; idx++) { int64_t tmp = idx; double f_value = 0.0; @@ -45,7 +45,7 @@ bool TelnovAIntegralRectangleOMP::RunImpl() { const int coord_index = static_cast(tmp % n); tmp /= n; - const double x = a + (static_cast(coord_index) + 0.5) * h; + const double x = a + ((static_cast(coord_index) + 0.5) * h); f_value += x; } From e8a38e5145ceeaf6d72cceb6db3c83401e19591e Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Thu, 12 Mar 2026 13:15:11 +0300 Subject: [PATCH 11/13] delete_seq --- .../seq/include/ops_seq.hpp | 22 ------- .../seq/src/ops_seq.cpp | 62 ------------------- 2 files changed, 84 deletions(-) delete mode 100644 tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp delete mode 100644 tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp diff --git a/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp b/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp deleted file mode 100644 index b287c49a5..000000000 --- a/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "../../modules/task/include/task.hpp" -#include "telnov_a_integral_rectangle/common/include/common.hpp" - -namespace telnov_a_integral_rectangle { - -class TelnovAIntegralRectangleSEQ : public BaseTask { - public: - static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { - return ppc::task::TypeOfTask::kSEQ; - } - explicit TelnovAIntegralRectangleSEQ(const InType &in); - - private: - bool ValidationImpl() override; - bool PreProcessingImpl() override; - bool RunImpl() override; - bool PostProcessingImpl() override; -}; - -} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp deleted file mode 100644 index 521faf3cd..000000000 --- a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" - -#include -#include - -#include "telnov_a_integral_rectangle/common/include/common.hpp" - -namespace telnov_a_integral_rectangle { - -TelnovAIntegralRectangleSEQ::TelnovAIntegralRectangleSEQ(const InType &in) { - SetTypeOfTask(GetStaticTypeOfTask()); - GetInput() = in; - GetOutput() = 0; -} - -bool TelnovAIntegralRectangleSEQ::ValidationImpl() { - return GetInput().first > 0 && GetInput().second > 0; -} - -bool TelnovAIntegralRectangleSEQ::PreProcessingImpl() { - GetOutput() = 0.0; - return true; -} - -bool TelnovAIntegralRectangleSEQ::RunImpl() { - const int n = GetInput().first; - const int d = GetInput().second; - - const double a = 0.0; - const double b = 1.0; - const double h = (b - a) / n; - - auto total_points = static_cast(std::pow(n, d)); - - double result = 0.0; - - for (int64_t idx = 0; idx < total_points; idx++) { - int64_t tmp = idx; - double f_value = 0.0; - - for (int dim = 0; dim < d; dim++) { - int coord_index = static_cast(tmp % n); - tmp /= n; - - double x = a + ((coord_index + 0.5) * h); - f_value += x; - } - - result += f_value; - } - - result *= std::pow(h, d); - - GetOutput() = result; - return true; -} - -bool TelnovAIntegralRectangleSEQ::PostProcessingImpl() { - return true; -} - -} // namespace telnov_a_integral_rectangle From 30da3c825a80c0f0c484288567858d0f07910771 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Thu, 12 Mar 2026 13:20:34 +0300 Subject: [PATCH 12/13] try --- .../seq/include/ops_seq.hpp | 22 +++++++ .../seq/src/ops_seq.cpp | 62 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp create mode 100644 tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp diff --git a/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp b/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp new file mode 100644 index 000000000..b287c49a5 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/seq/include/ops_seq.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "../../modules/task/include/task.hpp" +#include "telnov_a_integral_rectangle/common/include/common.hpp" + +namespace telnov_a_integral_rectangle { + +class TelnovAIntegralRectangleSEQ : public BaseTask { + public: + static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { + return ppc::task::TypeOfTask::kSEQ; + } + explicit TelnovAIntegralRectangleSEQ(const InType &in); + + private: + bool ValidationImpl() override; + bool PreProcessingImpl() override; + bool RunImpl() override; + bool PostProcessingImpl() override; +}; + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp new file mode 100644 index 000000000..521faf3cd --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/seq/src/ops_seq.cpp @@ -0,0 +1,62 @@ +#include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" + +#include +#include + +#include "telnov_a_integral_rectangle/common/include/common.hpp" + +namespace telnov_a_integral_rectangle { + +TelnovAIntegralRectangleSEQ::TelnovAIntegralRectangleSEQ(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = 0; +} + +bool TelnovAIntegralRectangleSEQ::ValidationImpl() { + return GetInput().first > 0 && GetInput().second > 0; +} + +bool TelnovAIntegralRectangleSEQ::PreProcessingImpl() { + GetOutput() = 0.0; + return true; +} + +bool TelnovAIntegralRectangleSEQ::RunImpl() { + const int n = GetInput().first; + const int d = GetInput().second; + + const double a = 0.0; + const double b = 1.0; + const double h = (b - a) / n; + + auto total_points = static_cast(std::pow(n, d)); + + double result = 0.0; + + for (int64_t idx = 0; idx < total_points; idx++) { + int64_t tmp = idx; + double f_value = 0.0; + + for (int dim = 0; dim < d; dim++) { + int coord_index = static_cast(tmp % n); + tmp /= n; + + double x = a + ((coord_index + 0.5) * h); + f_value += x; + } + + result += f_value; + } + + result *= std::pow(h, d); + + GetOutput() = result; + return true; +} + +bool TelnovAIntegralRectangleSEQ::PostProcessingImpl() { + return true; +} + +} // namespace telnov_a_integral_rectangle From cb2b5cfec0a12d19b4146e436f0699f5e064f104 Mon Sep 17 00:00:00 2001 From: mollycooddle Date: Sun, 19 Apr 2026 15:18:46 +0300 Subject: [PATCH 13/13] only_tbb --- .../tbb/include/ops_tbb.hpp | 22 +++++++ .../tbb/src/ops_tbb.cpp | 65 +++++++++++++++++++ .../tests/functional/main.cpp | 4 +- .../tests/performance/main.cpp | 6 +- 4 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 tasks/telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp create mode 100644 tasks/telnov_a_integral_rectangle/tbb/src/ops_tbb.cpp diff --git a/tasks/telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp b/tasks/telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp new file mode 100644 index 000000000..72894278f --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "../../modules/task/include/task.hpp" +#include "telnov_a_integral_rectangle/common/include/common.hpp" + +namespace telnov_a_integral_rectangle { + +class TelnovAIntegralRectangleTBB : public BaseTask { + public: + static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() { + return ppc::task::TypeOfTask::kTBB; + } + explicit TelnovAIntegralRectangleTBB(const InType &in); + + private: + bool ValidationImpl() override; + bool PreProcessingImpl() override; + bool RunImpl() override; + bool PostProcessingImpl() override; +}; + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/tbb/src/ops_tbb.cpp b/tasks/telnov_a_integral_rectangle/tbb/src/ops_tbb.cpp new file mode 100644 index 000000000..62724c756 --- /dev/null +++ b/tasks/telnov_a_integral_rectangle/tbb/src/ops_tbb.cpp @@ -0,0 +1,65 @@ +#include "telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp" + +#include +#include + +#include "oneapi/tbb/blocked_range.h" +#include "oneapi/tbb/parallel_reduce.h" +#include "telnov_a_integral_rectangle/common/include/common.hpp" + +namespace telnov_a_integral_rectangle { + +TelnovAIntegralRectangleTBB::TelnovAIntegralRectangleTBB(const InType &in) { + SetTypeOfTask(GetStaticTypeOfTask()); + GetInput() = in; + GetOutput() = 0; +} + +bool TelnovAIntegralRectangleTBB::ValidationImpl() { + return GetInput().first > 0 && GetInput().second > 0; +} + +bool TelnovAIntegralRectangleTBB::PreProcessingImpl() { + GetOutput() = 0.0; + return true; +} + +bool TelnovAIntegralRectangleTBB::RunImpl() { + const int n = GetInput().first; + const int d = GetInput().second; + + const double a = 0.0; + const double b = 1.0; + const double h = (b - a) / static_cast(n); + + const auto total_points = static_cast(std::pow(n, d)); + + const double result = + oneapi::tbb::parallel_reduce(oneapi::tbb::blocked_range(0, total_points), 0.0, + [n, d, a, h](const oneapi::tbb::blocked_range &range, double local_sum) { + for (int64_t idx = range.begin(); idx != range.end(); ++idx) { + int64_t tmp = idx; + double f_value = 0.0; + + for (int dim = 0; dim < d; ++dim) { + const int coord_index = static_cast(tmp % n); + tmp /= n; + + const double x = a + ((static_cast(coord_index) + 0.5) * h); + f_value += x; + } + + local_sum += f_value; + } + return local_sum; + }, [](double lhs, double rhs) { return lhs + rhs; }); + + GetOutput() = result * std::pow(h, d); + return true; +} + +bool TelnovAIntegralRectangleTBB::PostProcessingImpl() { + return true; +} + +} // namespace telnov_a_integral_rectangle diff --git a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp index 07e5e4412..f72ab550d 100644 --- a/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/functional/main.cpp @@ -11,6 +11,7 @@ #include "telnov_a_integral_rectangle/common/include/common.hpp" #include "telnov_a_integral_rectangle/omp/include/ops_omp.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" +#include "telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp" #include "util/include/func_test_util.hpp" #include "util/include/util.hpp" @@ -62,7 +63,8 @@ const std::array kTestParam = { const auto kTestTasksList = std::tuple_cat( ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle), - ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle)); + ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle), + ppc::util::AddFuncTask(kTestParam, PPC_SETTINGS_telnov_a_integral_rectangle)); const auto kGtestValues = ppc::util::ExpandToValues(kTestTasksList); diff --git a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp index 6dfe78837..40dc9c1a0 100644 --- a/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp +++ b/tasks/telnov_a_integral_rectangle/tests/performance/main.cpp @@ -6,6 +6,7 @@ #include "telnov_a_integral_rectangle/common/include/common.hpp" #include "telnov_a_integral_rectangle/omp/include/ops_omp.hpp" #include "telnov_a_integral_rectangle/seq/include/ops_seq.hpp" +#include "telnov_a_integral_rectangle/tbb/include/ops_tbb.hpp" #include "util/include/perf_test_util.hpp" namespace telnov_a_integral_rectangle { @@ -41,7 +42,10 @@ const auto kSeqPerfTasks = const auto kOmpPerfTasks = ppc::util::MakeAllPerfTasks(PPC_SETTINGS_telnov_a_integral_rectangle); -const auto kAllPerfTasks = std::tuple_cat(kSeqPerfTasks, kOmpPerfTasks); +const auto kTbbPerfTasks = + ppc::util::MakeAllPerfTasks(PPC_SETTINGS_telnov_a_integral_rectangle); + +const auto kAllPerfTasks = std::tuple_cat(kSeqPerfTasks, kOmpPerfTasks, kTbbPerfTasks); const auto kGtestValues = ppc::util::TupleToGTestValues(kAllPerfTasks);