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

6.3 KiB
Raw Blame History

Задание 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, достаточно:

scp -r task1 polytech:~/supercomputers/

2. Подключиться

ssh polytech
cd ~/supercomputers/task1

3. Запустить собственную CUDA-реализацию

sbatch scripts/run_cuda.slurm

Сразу после отправки Slurm вернёт job id. Дальше:

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, значит её не надо добавлять вручную.

После завершения посмотри:

less results/task1-cuda-<JOBID_CUDA>.out
cat results/task1-cuda-<JOBID_CUDA>.csv

Если на кластере нужна другая GPU-архитектура, можно пересобрать так:

CUDA_ARCH=sm_70 ./scripts/build.sh

По умолчанию в build.sh стоит sm_35, потому что пример ориентирован на tornado-k40.

4. Запустить стандартный Intel LINPACK

sbatch scripts/run_intel_linpack.slurm

Проверка статуса и итогов:

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 на кластере другой, отправь задание так:

sbatch --export=ALL,LINPACK_DIR=/linux/share/mkl/benchmarks/linpack scripts/run_intel_linpack.slurm

Что нужно собрать для отчёта

Ниже последовательность, которая даст все обязательные материалы для отчёта и скриншотов.

Шаг 1. Скрин входа с логином

На login-узле выполни:

whoami
hostname
date

Сделай скрин терминала. На нём должен быть виден логин tm3u21.

Шаг 2. Скрин конфигурации узла и GPU

После завершения CUDA-задачи открой:

less results/task1-cuda-<JOBID_CUDA>.out

В начале файла уже будут:

  • whoami, hostname, date;
  • scontrol show job ...;
  • scontrol show node ...;
  • lscpu;
  • nvidia-smi.

Сделай отдельные скрины с этой информацией.

Шаг 3. Скрин времени выполнения и числа узлов

Выполни:

sacct -j <JOBID_CUDA>,<JOBID_INTEL> --format=JobID,JobName,Partition,State,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode

На этом скрине будут:

  • время выполнения;
  • количество узлов;
  • список узлов;
  • тип выделенных ресурсов.

Шаг 4. Вынести численные результаты

Для собственной программы значения бери из файла:

cat results/task1-cuda-<JOBID_CUDA>.csv

Для Intel LINPACK значения времени и GFLOPS бери из:

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:

--start 1000 --step 500 --count 6

Если удобнее задать точный набор размеров, используй:

./bin/linpack_cuda --sizes 1000,2000,3000

Ограничения

Этот код я здесь локально не компилировал, потому что в окружении нет гарантированно настроенного CUDA toolchain и GPU. Поэтому первый реальный прогон лучше делать сразу на СКЦ; если что-то упадёт по модулю, архитектуре GPU или пути к Intel LINPACK, пришли ошибку, и я быстро подправлю.