Skip to content

Ремизов Кирилл. Технология TBB. Умножение плотных матриц алгоритмом Кэннона. Вариант 1#667

Open
BlackCorbeau wants to merge 19 commits intolearning-process:masterfrom
BlackCorbeau:remizov_k_dense_matrix_multiplication_cannon_algorithm
Open

Ремизов Кирилл. Технология TBB. Умножение плотных матриц алгоритмом Кэннона. Вариант 1#667
BlackCorbeau wants to merge 19 commits intolearning-process:masterfrom
BlackCorbeau:remizov_k_dense_matrix_multiplication_cannon_algorithm

Conversation

@BlackCorbeau
Copy link
Copy Markdown
Contributor

Описание

  • Задача: Умножение плотных матриц алгоритмом Кэннона (Cannon‘s algorithm) для квадратных матриц, размер которых кратен размеру блока.

  • Вариант: 1

  • Технология: TBB (Intel Threading Building Blocks)

  • Описание реализации и отчёта:

    В данной работе реализован алгоритм Кэннона для параллельного умножения плотных матриц.
    Алгоритм:

    • Входные матрицы A и B разбиваются на квадратные блоки заданного размера block_dim.
    • Выполняется начальная циклическая перестановка блоков: для A блоки сдвигаются по строкам на i позиций влево, для B – по столбцам на j позиций вверх, где i, j – индексы строки и столбца блока.
    • Далее в течение block_count шагов на каждой итерации:
      • параллельно перемножаются соответствующие блоки (стандартное тройное вложение циклов);
      • выполняется циклический сдвиг блоков A влево на одну позицию по каждой строке и B вверх на одну позицию по каждому столбцу.
    • Результат собирается из блоков итоговой матрицы C.

    Применение TBB:

    • Для параллельного умножения блоков используется tbb::parallel_for с blocked_range2d, что позволяет равномерно распределить нагрузку между потоками.
    • Параллельные сдвиги блоков (ShiftBlocksLeft, ShiftBlocksUp) реализованы через tbb::parallel_for по независимым строкам (или столбцам).
    • Инициализация блоков и сборка результата также выполняются параллельно с помощью tbb::parallel_for по двумерной сетке.
    • Все обращения к данным защищены от гонок за счёт того, что каждый поток работает с собственными блоками или с разделяемыми данными только на чтение.

    Содержание отчёта:

    • Обоснование выбора алгоритма Кэннона (минимизация пересылок между процессами/потоками).
    • Описание последовательной и параллельной (TBB) реализаций, сравнение сложности и эффективности.
    • Результаты функционального тестирования (сравнение с эталонным умножением).
    • Анализ производительности: ускорение и эффективность при разных размерах матриц и блоков, сравнение с OpenMP-версией.
    • Графики зависимости времени выполнения от числа потоков и размера задачи.

Чек-лист

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

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.02564% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.30%. Comparing base (f7f3d46) to head (75b6bcd).

Files with missing lines Patch % Lines
...ultiplication_cannon_algorithm/tbb/src/ops_tbb.cpp 91.02% 3 Missing and 4 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #667      +/-   ##
==========================================
+ Coverage   82.27%   82.30%   +0.03%     
==========================================
  Files         497      498       +1     
  Lines       21191    21269      +78     
  Branches     8691     8721      +30     
==========================================
+ Hits        17434    17505      +71     
- Misses       2614     2616       +2     
- Partials     1143     1148       +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