Skip to content

[FIXED]Ермаков Алексей. Технология SEQ. Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS). Вариант 6#236

Closed
nixonxd wants to merge 7 commits intolearning-process:masterfrom
nixonxd:ermakov_a_spar_mat_mult

Conversation

@nixonxd
Copy link
Contributor

@nixonxd nixonxd commented Mar 3, 2026

Описание

  • Задача: Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS).
  • Вариант: 7
  • Технология: SEQ
  • Описание Реализация использует строковый формат хранения (CRS) для всех матриц. Матрицы хранятся через три массива: values (ненулевые элементы), col_index (индексы столбцов) и row_ptr (смещения начала каждой строки). Алгоритм последовательно проходит по строкам первой матрицы, умножает ненулевые элементы на соответствующие строки второй матрицы и аккумулирует результат. Итоговая матрица также формируется в формате CRS.

Чек-лист

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

@nixonxd
Copy link
Contributor Author

nixonxd commented Mar 3, 2026

@allnes Первый вариант был замержен, в этом я переименовал namespace и имя папки как было сказано на лекции от 02.03.2026. Сейчас работа полностью исправлена

@nixonxd nixonxd changed the title Ермаков Алексей SEQ Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS). Вариант 6 [FIXED]Ермаков Алексей SEQ Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS). Вариант 6 Mar 3, 2026
@nixonxd nixonxd closed this Mar 3, 2026
@nixonxd nixonxd reopened this Mar 3, 2026
@nixonxd nixonxd closed this Mar 3, 2026
@nixonxd nixonxd reopened this Mar 3, 2026
@nixonxd nixonxd closed this Mar 3, 2026
@nixonxd nixonxd reopened this Mar 3, 2026
@nixonxd nixonxd closed this Mar 3, 2026
@nixonxd nixonxd reopened this Mar 3, 2026
@nixonxd nixonxd closed this Mar 4, 2026
@nixonxd nixonxd reopened this Mar 4, 2026
Ramzan8-88 pushed a commit to Ramzan8-88/ppc-2026-threads that referenced this pull request Mar 4, 2026
… Элементы типа double. Формат хранения матрицы – строковый (CRS). Вариант 4. (learning-process#236)

<!--
Требования к названию pull request:

"<Фамилия> <Имя>. Технология <TECHNOLOGY_NAME:SEQ|OMP|TBB|STL|MPI>.
<Полное название задачи>. Вариант <Номер>"
-->

- **Задача**: _Подсчет числа несовпадающих символов двух строк_
- **Вариант**: _4_
- **Технология**: _SEQ, MPI_
- **Описание** вашей реализации и отчёта.  
_Реализация: алгоритм умножения разреженных матриц в формате CRS
(Compressed Row Storage) с элементами типа double с последовательной
(SEQ) и параллельной MPI-версией. Отчёт: содержит описание алгоритмов,
схему распараллеливания, тестирование (53 теста) и результаты (ускорение
до 3.68×)_

---

## Описание

Реализован алгоритм умножения двух разреженных матриц в формате CRS
(Compressed Row Storage) с элементами типа double. Алгоритм эффективно
работает с разреженными матрицами, обрабатывая только ненулевые
элементы, что значительно сокращает объём вычислений и использование
памяти.
### Технологии реализации
- **SEQ**: Последовательная версия с обработкой строк матрицы A и
умножением на матрицу B в формате CRS
- **MPI**: Параллельная версия с горизонтальной схемой распределения:
распределение строк матрицы A между процессами, полная репликация
матрицы B на всех процессах

### Ключевые особенности реализации
1. **Эффективная работа с разреженными матрицами:**: использование
формата CRS для минимизации памяти и вычислений, обработка только
ненулевых элементов с порогом 1e-12
2. **Обработка граничных случаев**: корректная работа с пустыми
матрицами, матрицами разных размеров, проверка корректности формата CRS
3. **Эффективная коммуникация**: циклическое распределение строк матрицы
A (i % world_size_ == rank_) обеспечивает равномерную загрузку процессов

### Архитектурные решения
- Раздельная компиляция последовательной и MPI версий
- Единый интерфейс для обеих реализаций
- Сортировка элементов по столбцам для соблюдения формата CRS
- Изолированные тестовые модули для функциональности и
производительности
- Поддержка матриц произвольных размеров с контролем использования
памяти

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

### Структура отчёта
1. **Введение** - практическая значимость задачи и цели работы
2. **Постановка задачи** - формальное определение и ограничения
3. **Базовый алгоритм** - последовательная реализация с псевдокодом
4. **Схема распараллеливания** - распределение данных, топология, роли
процессов
5. **Детали реализации** - файловая структура, архитектурные особенности
6. **Экспериментальная установка** - аппаратное и программное окружение
7. **Результаты и обсуждение** - анализ корректности и
производительности
8. **Выводы** - достижения и ограничения реализации
9. **Список литературы** - использованные источники

### Основные результаты
- **Корректность**: 53 функциональных теста с полным покрытием граничных
случаев (34 основных + 19 тестов покрытия)
- **Производительность**: ускорение до 3.68× на 3 процессах для
разреженных матриц размером 50000×50000
- **Эффективность**: до 120% эффективности при чистых вычислениях
(task_run), оптимальная производительность на 3 процессах

### Экспериментальная часть
- Тестирование на процессоре Apple M2 с 8 ядрами
- Сравнение времени выполнения SEQ и MPI версий
- Анализ масштабируемости от 1 до 8 процессов
- Измерение как чистого времени вычислений, так и полного цикла
обработки
- Комплексное тестирование включающее:
  - 34  основных функциональных теста различных сценариев
  - 19 дополнительных тестов покрытия для граничных случаев

Отчёт демонстрирует эффективное применение MPI для распараллеливания
задачи умножения разреженных матриц с использованием формата CRS, с
хорошими показателями масштабируемости и детальным анализом
производительности, подтверждённым 53 тестовыми случаями.



## Чек-лист
<!--
Пожалуйста, убедитесь, что следующие пункты выполнены **до** отправки
pull request'а и запроса его ревью:
-->

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

<!--
ПРИМЕЧАНИЕ: Ложные сведения в этом чек-листе могут привести к отклонению
PR и получению нулевого балла за соответствующую задачу.
-->

---------

Co-authored-by: sashoshaa <a.soosnina@naash.ru>
@nixonxd nixonxd changed the title [FIXED]Ермаков Алексей SEQ Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS). Вариант 6 [FIXED]Ермаков Алексей. Технология SEQ. Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS). Вариант 6 Mar 5, 2026
@allnes
Copy link
Member

allnes commented Mar 7, 2026

вы новую директорию дублирующую создаете а не переименовываете

@nixonxd
Copy link
Contributor Author

nixonxd commented Mar 7, 2026

вы новую директорию дублирующую создаете а не переименовываете

@allnes я же не могу перейти на ветку которая в мастер замержена, если не открывать новый PR с по факту дублированием старой, просто переименованной директорией, что тогда делать

@nixonxd
Copy link
Contributor Author

nixonxd commented Mar 7, 2026

вы новую директорию дублирующую создаете а не переименовываете

@allnes Вариант сейчас перейти на мастер и подтянуть изменения, создать ветку, написать git mv <неправильное название папки> <правильное название папки>, вручную изменить все namespace и импорты, закомитеть и запушить?

@nixonxd
Copy link
Contributor Author

nixonxd commented Mar 7, 2026

вы новую директорию дублирующую создаете а не переименовываете

@allnes и еще вопрос, у вас на github указаны 2 почты, на какую конкретно писать если возникают вопросы?

@nixonxd
Copy link
Contributor Author

nixonxd commented Mar 7, 2026

вы новую директорию дублирующую создаете а не переименовываете

@allnes открыл новый PR в котором не дублирую директорию, а действительно меняю namespace #269

@nixonxd nixonxd closed this Mar 8, 2026
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