Skip to content

Кутергин Валентин. Teхнология TBB. Вычисление многомерных интегралов с использованием многошаговой схемы (метод прямоугольников). Вариант 9#486

Open
VALancaster wants to merge 1 commit intolearning-process:masterfrom
VALancaster:kutergin_v_multidimensional_integration_rect_method_tbb

Conversation

@VALancaster
Copy link
Contributor

Описание:

Описание

Задача: Вычисление многомерных интегралов с использованием многошаговой схемы (метод прямоугольников).
Вариант: 9
Технология: TBB

Описание алгоритма

Реализована параллельная версия алгоритма численного интегрирования функций произвольной размерности ($N$-мерных интегралов) с использованием библиотеки Intel TBB. Используется метод средних прямоугольников, который обеспечивает высокую точность за счет вычисления значения функции в центрах элементарных гиперпрямоугольников.

Принцип работы:
Алгоритм разбивает заданный гиперкуб интегрирования на сетку из элементарных элементов. Общий объем (интеграл) вычисляется как сумма объемов этих элементов.

Валидация:
Проверяется корректность входных данных:

  1. Количество пар границ интегрирования (limits) должно строго совпадать с количеством указанных шагов разбиения (n_steps).
  2. Векторы входных данных не должны быть пустыми (размерность интеграла $d \ge 1$).
  3. Количество шагов по каждой оси должно быть строго положительным ($n_i > 0$).

Предобработка:
Вычисляется элементарный гиперобъем (произведение шагов по всем осям): $dV = h_1 \cdot h_2 \cdot \dots \cdot h_N$. Данные сохраняются в локальные переменные класса.

Вычисление (Параллельный подход TBB):
Для эффективного распределения нагрузки использована высокоуровневая библиотека Intel TBB:

  • Параллельное суммирование реализовано через функцию tbb::parallel_reduce, которая автоматически разбивает диапазон итераций на блоки (tbb::blocked_range) и выполняет итоговую редукцию (сложение результатов разных потоков).
  • Количество одновременно работающих потоков ограничивается с помощью tbb::global_control в соответствии с настройками фреймворка.
  • Основная математическая логика вынесена в функцию CalculateChunkSum. Внутри неё многомерный индекс восстанавливается из линейного номера итерации (используются операции / и %).
  • Потокобезопасность обеспечивается тем, что каждый поток внутри лямбда-выражения работает со своим локальным вектором координат coords.

Постобработка:
Итоговая сумма, полученная после завершения parallel_reduce, умножается на элементарный гиперобъем $dV$ и записывается в выходной контейнер.

Тестирование:
Функциональные тесты покрывают расчеты в пространствах от 1D до 5D:

  • 1D_Linear — интегрирование $f(x) = x$.
  • 2D_Linear — интегрирование $f(x, y) = x + y$.
  • 3D_Constant — объем параллелепипеда (константа).
  • 4D_Sum_Small_Grid — сумма координат в 4D.
  • 5D_Sum_Small_Grid — сумма координат в 5D.
    Допустимая погрешность: 1e-4.

Чек-лист

  • Статус CI: Все CI-задачи (сборка, тесты, генерация отчёта) успешно проходят на моей ветке в моем форке
  • Директория и именование задачи: Я создал директорию с именем kutergin_v_multidimensional_integration_rect_method
  • Полное описание задачи: Я предоставил полное описание задачи в теле pull request
  • clang-format: Мои изменения успешно проходят clang-format локально в моем форке
  • clang-tidy: Мои изменения успешно проходят clang-tidy локально в моем форке
  • Функциональные тесты: Все функциональные тесты успешно проходят локально
  • Тесты производительности: Все тесты производительности успешно проходят локально
  • Ветка: Я работаю в ветке kutergin_v_multidimensional_integration_rect_method_tbb
  • Правдивое содержание: Я подтверждаю, что все сведения, указанные в этом

@codecov-commenter
Copy link

Codecov Report

❌ Patch coverage is 92.85714% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.33%. Comparing base (97dd371) to head (9588984).

Files with missing lines Patch % Lines
...ntegration_rect_method/tbb/src/rect_method_tbb.cpp 92.85% 1 Missing and 2 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #486      +/-   ##
==========================================
+ Coverage   79.16%   79.33%   +0.16%     
==========================================
  Files         267      271       +4     
  Lines        9325     9435     +110     
  Branches     3963     4008      +45     
==========================================
+ Hits         7382     7485     +103     
- Misses       1374     1376       +2     
- Partials      569      574       +5     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants