Skip to content

Сабиров Савелий. Технология TBB. Вычисление многомерных интегралов методом Монте-Карло. Вариант 12#562

Open
SabirovSR wants to merge 2 commits intolearning-process:masterfrom
SabirovSR:sabirov_s_monte_carlo_tbb
Open

Сабиров Савелий. Технология TBB. Вычисление многомерных интегралов методом Монте-Карло. Вариант 12#562
SabirovSR wants to merge 2 commits intolearning-process:masterfrom
SabirovSR:sabirov_s_monte_carlo_tbb

Conversation

@SabirovSR
Copy link
Copy Markdown
Contributor

Описание

  • Задача: Вычисление многомерных интегралов методом Монте-Карло
  • Вариант: 12
  • Технология: TBB

Вычисление многомерных интегралов методом Монте-Карло (TBB)

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

Реализована параллельная версия того же метода Монте-Карло с использованием Intel oneTBB (Threading Building Blocks). Формула оценки интеграла совпадает с последовательной и OMP-версией:

I ≈ V · (1/N) · Σ f(x₁, ..., xₙ)

где V — объём области интегрирования, N — количество случайных точек, равномерно распределённых в параллелепипеде, заданном векторами lower и upper.

Применение TBB

  • Диапазон индексов выборок [0, N) разбивается алгоритмом tbb::parallel_reduce на поддиапазоны; для каждого поддиапазона накапливается локальная сумма значений подынтегральной функции, затем частичные суммы объединяются лямбдой-редуктором (a + b).
  • Итоговая оценка: volume * sum / N, как в SEQ.
  • Потокобезопасность при генерации случайных чисел: для каждого поддиапазона создаётся свой std::mt19937, инициализируемый через std::seed_seq от границ поддиапазона и N, чтобы подзадачи не делили один генератор и не возникали гонки.
  • Вектор распределений std::uniform_real_distribution<double> по осям собирается до parallel_reduce и используется задачами только для чтения и вызова operator() (константная часть с точки зрения использования из параллельных подзадач).
  • Объём области V и размерность считаются до параллельного редукции.

Общее с SEQ

  • Входные данные — те же MCInput (lower, upper, num_samples, func_type).
  • Поддерживаются те же 8 типов функций (FuncType: kLinear, kSumCubes, kCosProduct, kExpNeg, kMixedPoly, kSinSum, kSqrtSum, kQuarticSum).
  • Вычисление значения функции в точке вынесено в заголовок ops_tbb.hpp: пространство имён detail с EvaluateAt и вспомогательными Eval*, по смыслу совпадающими с последовательной реализацией.
  • Этапы ValidationImpl, PreProcessingImpl, PostProcessingImpl и проверки входа согласованы с SEQ.

Тестирование

  • Функциональные тесты: те же 13 сценариев прогоняются для SEQ, OMP и TBB (всего 39 тестов). Допуск: 5.0 / √N.
  • Тесты производительности: в набор входят SEQ, OMP и TBB; для каждой реализации — оба режима (pipeline и task_run). Конфигурация перф-теста: kLinear на [0, 1]³, N = 10 000 000.

Чек-лист

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

Сабиров Савелий. Технология OMP. Вычисление многомерных интегралов методом Монте-Карло. Вариант 12
@SabirovSR SabirovSR force-pushed the sabirov_s_monte_carlo_tbb branch from f3c3e62 to b269cc9 Compare April 4, 2026 17:29
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.85714% with 8 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (master@af9cace). Learn more about missing BASE report.

Files with missing lines Patch % Lines
tasks/sabirov_s_monte_carlo/omp/src/ops_omp.cpp 92.00% 0 Missing and 4 partials ⚠️
tasks/sabirov_s_monte_carlo/tbb/src/ops_tbb.cpp 90.47% 0 Missing and 4 partials ⚠️
Additional details and impacted files
@@            Coverage Diff            @@
##             master     #562   +/-   ##
=========================================
  Coverage          ?   81.78%           
=========================================
  Files             ?      429           
  Lines             ?    17086           
  Branches          ?     6947           
=========================================
  Hits              ?    13973           
  Misses            ?     2164           
  Partials          ?      949           

☔ 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