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

123 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Задание 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`