task2
This commit is contained in:
122
task2/README.md
Normal file
122
task2/README.md
Normal 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`
|
||||
Reference in New Issue
Block a user