This commit is contained in:
2026-03-17 11:21:20 +03:00
parent 6f718668c8
commit bbb1b91e95
10 changed files with 627 additions and 0 deletions

122
task2/README.md Normal file
View File

@@ -0,0 +1,122 @@
# Задание 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 <JOBID> --format=JobID,JobName,Partition,State,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode
```
### 7. Посмотреть результаты
```bash
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`):
```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-<JOBID>.out
```
Сделай скрин блока `===== benchmark =====` — там будут все размеры с временем.
### Скриншот 2: `task2-cuda-run.png` — вывод CUDA-программы
```bash
less results/task2-cuda-<JOBID>.out
```
Сделай скрин блока `===== benchmark =====`.
### Скриншот 3: `task2-sacct.png` — сведения Slurm
Собери все JOBID (3 MPI + 1 CUDA) и выполни:
```bash
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`