Files
supercomputers/task2/README.md
2026-03-17 11:21:20 +03:00

3.9 KiB
Raw Permalink Blame History

Задание 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.png
  • report/img/task2-cuda-run.png
  • report/img/task2-sacct.png
  • report/img/task2-time-comparison.png