Files
supercomputers/task1/README.md
2026-03-16 17:31:49 +03:00

189 lines
6.3 KiB
Markdown
Raw 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.

# Задание 1: CUDA-реализация LINPACK-подобного теста
В папке лежит готовый каркас под первое задание:
- `src/main.cu` — собственная CUDA-реализация решения плотной СЛАУ методом Якоби.
- `scripts/build.sh` — сборка программы через `nvcc`.
- `scripts/run_cuda.slurm` — пакетный запуск собственной CUDA-версии.
- `scripts/run_intel_linpack.slurm` — пакетный запуск стандартного Intel LINPACK на CPU.
Программа генерирует строго диагонально доминирующую матрицу `A`, заранее известный вектор решения `x_true`, правую часть `b = A * x_true`, после чего решает систему методом Якоби на GPU. В выводе печатаются:
- размер матрицы `N`;
- лучшее время решения в миллисекундах;
- число итераций;
- норма невязки `||Ax - b||_inf`;
- ошибка `||x - x_true||_inf`;
- LINPACK-like производительность в GFLOPS.
## Что сделать на СКЦ
### 1. Передать папку на кластер
Если алиас `polytech` уже прописан в `~/.ssh/config`, достаточно:
```bash
scp -r task1 polytech:~/supercomputers/
```
### 2. Подключиться
```bash
ssh polytech
cd ~/supercomputers/task1
```
### 3. Запустить собственную CUDA-реализацию
```bash
sbatch scripts/run_cuda.slurm
```
Сразу после отправки Slurm вернёт `job id`. Дальше:
```bash
squeue -u tm3u21
sacct -j <JOBID_CUDA> --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode
```
В текущей конфигурации СКЦ в `tornado-k40` GPU выбирается самим разделом, поэтому в `slurm`-скрипте не используется `--gres=gpu:1`. Если снова появится ошибка про `gres`, значит её не надо добавлять вручную.
После завершения посмотри:
```bash
less results/task1-cuda-<JOBID_CUDA>.out
cat results/task1-cuda-<JOBID_CUDA>.csv
```
Если на кластере нужна другая GPU-архитектура, можно пересобрать так:
```bash
CUDA_ARCH=sm_70 ./scripts/build.sh
```
По умолчанию в `build.sh` стоит `sm_35`, потому что пример ориентирован на `tornado-k40`.
### 4. Запустить стандартный Intel LINPACK
```bash
sbatch scripts/run_intel_linpack.slurm
```
Проверка статуса и итогов:
```bash
sacct -j <JOBID_INTEL> --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode
less results/task1-intel-linpack-<JOBID_INTEL>.out
```
Если каталог с Intel LINPACK на кластере другой, отправь задание так:
```bash
sbatch --export=ALL,LINPACK_DIR=/linux/share/mkl/benchmarks/linpack scripts/run_intel_linpack.slurm
```
## Что нужно собрать для отчёта
Ниже последовательность, которая даст все обязательные материалы для отчёта и скриншотов.
### Шаг 1. Скрин входа с логином
На login-узле выполни:
```bash
whoami
hostname
date
```
Сделай скрин терминала. На нём должен быть виден логин `tm3u21`.
### Шаг 2. Скрин конфигурации узла и GPU
После завершения CUDA-задачи открой:
```bash
less results/task1-cuda-<JOBID_CUDA>.out
```
В начале файла уже будут:
- `whoami`, `hostname`, `date`;
- `scontrol show job ...`;
- `scontrol show node ...`;
- `lscpu`;
- `nvidia-smi`.
Сделай отдельные скрины с этой информацией.
### Шаг 3. Скрин времени выполнения и числа узлов
Выполни:
```bash
sacct -j <JOBID_CUDA>,<JOBID_INTEL> --format=JobID,JobName,Partition,State,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode
```
На этом скрине будут:
- время выполнения;
- количество узлов;
- список узлов;
- тип выделенных ресурсов.
### Шаг 4. Вынести численные результаты
Для собственной программы значения бери из файла:
```bash
cat results/task1-cuda-<JOBID_CUDA>.csv
```
Для Intel LINPACK значения времени и GFLOPS бери из:
```bash
less results/task1-intel-linpack-<JOBID_INTEL>.out
```
Ищи секцию `Performance Summary`.
## Какие картинки ожидает `report/report.tex`
В отчёте уже подготовлены следующие пути:
- `report/img/task1-login.png`
- `report/img/task1-cuda-node.png`
- `report/img/task1-cuda-run.png`
- `report/img/task1-cuda-sacct.png`
- `report/img/task1-intel-run.png`
- `report/img/task1-intel-sacct.png`
Просто положи туда свои скриншоты с этими именами.
## Если нужно поменять размеры задач
Собственная программа сейчас запускается на:
- `1000`
- `1500`
- `2000`
- `2500`
- `3000`
- `3500`
Это задаётся параметрами в `scripts/run_cuda.slurm`:
```bash
--start 1000 --step 500 --count 6
```
Если удобнее задать точный набор размеров, используй:
```bash
./bin/linpack_cuda --sizes 1000,2000,3000
```
## Ограничения
Этот код я здесь локально не компилировал, потому что в окружении нет гарантированно настроенного CUDA toolchain и GPU. Поэтому первый реальный прогон лучше делать сразу на СКЦ; если что-то упадёт по модулю, архитектуре GPU или пути к Intel LINPACK, пришли ошибку, и я быстро подправлю.