[FIXED]Ермаков Алексей. Технология SEQ. Умножение разреженных матриц. Элементы комплексного типа. Формат хранения матрицы – строковый (CRS). Вариант 6#236
Conversation
|
@allnes Первый вариант был замержен, в этом я переименовал namespace и имя папки как было сказано на лекции от 02.03.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>
|
вы новую директорию дублирующую создаете а не переименовываете |
@allnes я же не могу перейти на ветку которая в мастер замержена, если не открывать новый PR с по факту дублированием старой, просто переименованной директорией, что тогда делать |
@allnes Вариант сейчас перейти на мастер и подтянуть изменения, создать ветку, написать git mv <неправильное название папки> <правильное название папки>, вручную изменить все namespace и импорты, закомитеть и запушить? |
@allnes и еще вопрос, у вас на github указаны 2 почты, на какую конкретно писать если возникают вопросы? |
Описание
Чек-лист
<фамилия>_<первая_буква_имени>_<короткое_название_задачи>clang-formatлокально в моем форке (нет ошибок форматирования)clang-tidyлокально в моем форке (нет предупреждений/ошибок)(например,
nesterov_a_vector_sum), а не вmasterдостоверными