# Задание 2: MPI-реализация волнового алгоритма MPI-версия волнового алгоритма (алгоритм Ли) для поиска кратчайшего пути робота на полигоне. Для сравнения также подготовлена CUDA-версия того же алгоритма. ## Структура - `src/wave_mpi.c` — MPI-реализация (декомпозиция по строкам, ghost rows). - `src/wave_cuda.cu` — CUDA-реализация (глобальная память, по мотивам программы прошлого семестра). - `scripts/build_mpi.sh` — сборка MPI-версии. - `scripts/build_cuda.sh` — сборка CUDA-версии. - `scripts/run_mpi.slurm` — пакетный запуск MPI на кластере. - `scripts/run_cuda.slurm` — пакетный запуск CUDA на кластере. - `scripts/plot_task2_results.py` — построение графика для отчёта. ## Что сделать на СКЦ ### 1. Передать папку на кластер ```bash scp -r task2 polytech:~/supercomputers/ ``` ### 2. Подключиться ```bash ssh polytech cd ~/supercomputers/task2 ``` ### 3. Проверить доступные MPI-модули ```bash module avail mpi ``` Если модуль `mpi/openmpi` не найден, посмотри список и подставь нужное имя в `scripts/run_mpi.slurm` (строка `module load mpi/openmpi`). ### 4. Запустить CUDA-версию (для сравнения) ```bash sbatch scripts/run_cuda.slurm ``` ### 5. Запустить MPI на 1, 2, 4 узлах ```bash sbatch --nodes=1 scripts/run_mpi.slurm sbatch --nodes=2 scripts/run_mpi.slurm sbatch --nodes=4 scripts/run_mpi.slurm ``` ### 6. Проверить статус ```bash squeue -u tm3u21 sacct -j --format=JobID,JobName,Partition,State,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode ``` ### 7. Посмотреть результаты ```bash less results/task2-mpi-.out cat results/task2-mpi-1n-.csv cat results/task2-mpi-2n-.csv cat results/task2-mpi-4n-.csv cat results/task2-cuda-.csv ``` ### 8. Построить график На локальной машине (нужен `matplotlib`): ```bash python3 scripts/plot_task2_results.py \ --mpi1 results/task2-mpi-1n-XXXXX.csv \ --mpi2 results/task2-mpi-2n-XXXXX.csv \ --mpi4 results/task2-mpi-4n-XXXXX.csv \ --cuda results/task2-cuda-XXXXX.csv \ -o ../report/img/task2-time-comparison.png ``` ## Что нужно собрать для отчёта ### Скриншот 1: `task2-mpi-run.png` — вывод MPI-программы После завершения MPI-задач открой вывод одной из них: ```bash less results/task2-mpi-.out ``` Сделай скрин блока `===== benchmark =====` — там будут все размеры с временем. ### Скриншот 2: `task2-cuda-run.png` — вывод CUDA-программы ```bash less results/task2-cuda-.out ``` Сделай скрин блока `===== benchmark =====`. ### Скриншот 3: `task2-sacct.png` — сведения Slurm Собери все JOBID (3 MPI + 1 CUDA) и выполни: ```bash sacct -j ,,, \ --format=JobID,JobName,Partition,State,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode ``` ### Скриншот 4: `task2-time-comparison.png` — график Генерируется скриптом `plot_task2_results.py` (см. шаг 8 выше). ### Куда положить скриншоты Все картинки кладутся в `report/img/`: - `report/img/task2-mpi-run.png` - `report/img/task2-cuda-run.png` - `report/img/task2-sacct.png` - `report/img/task2-time-comparison.png`