Задание 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. Передать папку на кластер
scp -r task2 polytech:~/supercomputers/
2. Подключиться
ssh polytech
cd ~/supercomputers/task2
3. Проверить доступные MPI-модули
module avail mpi
Если модуль mpi/openmpi не найден, посмотри список и подставь нужное имя в scripts/run_mpi.slurm (строка module load mpi/openmpi).
4. Запустить CUDA-версию (для сравнения)
sbatch scripts/run_cuda.slurm
5. Запустить MPI на 1, 2, 4 узлах
sbatch --nodes=1 scripts/run_mpi.slurm
sbatch --nodes=2 scripts/run_mpi.slurm
sbatch --nodes=4 scripts/run_mpi.slurm
6. Проверить статус
squeue -u tm3u21
sacct -j <JOBID> --format=JobID,JobName,Partition,State,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode
7. Посмотреть результаты
less results/task2-mpi-<JOBID>.out
cat results/task2-mpi-1n-<JOBID>.csv
cat results/task2-mpi-2n-<JOBID>.csv
cat results/task2-mpi-4n-<JOBID>.csv
cat results/task2-cuda-<JOBID>.csv
8. Построить график
На локальной машине (нужен matplotlib):
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-задач открой вывод одной из них:
less results/task2-mpi-<JOBID>.out
Сделай скрин блока ===== benchmark ===== — там будут все размеры с временем.
Скриншот 2: task2-cuda-run.png — вывод CUDA-программы
less results/task2-cuda-<JOBID>.out
Сделай скрин блока ===== benchmark =====.
Скриншот 3: task2-sacct.png — сведения Slurm
Собери все JOBID (3 MPI + 1 CUDA) и выполни:
sacct -j <JOB_MPI1>,<JOB_MPI2>,<JOB_MPI4>,<JOB_CUDA> \
--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.pngreport/img/task2-cuda-run.pngreport/img/task2-sacct.pngreport/img/task2-time-comparison.png