Files
2026-03-17 09:04:26 +03:00
..
2026-03-16 18:44:11 +03:00
2026-03-16 17:31:49 +03:00
2026-03-17 09:04:26 +03:00
2026-03-16 17:31:49 +03:00
2026-03-16 18:44:11 +03:00
2026-03-16 19:48:50 +03:00
2026-03-16 19:48:50 +03:00

Задание 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. Сам скрипт запускается из SLURM_SUBMIT_DIR, как в рабочем примере из методички, чтобы сборка и логи всегда шли именно в ~/supercomputers/task1, а не во временную директорию Slurm.

Модули compiler/gcc/11 и nvidia/cuda/11.6u2 загружаются прямо внутри run_cuda.slurm до запуска программы. Это важно: если загрузить их только в отдельном build.sh, бинарник может собраться с новой libstdc++, а запускаться уже с системной, что даёт ошибки вида GLIBCXX_* not found.

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

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

В примере эталонный LINPACK сначала подготавливается отдельно. Для вашей учётной записи не нужно писать в /linux/share/...; правильнее развернуть архив в домашнем каталоге и запускать оттуда.

Пошагово:

  1. Скачай официальный архив Intel oneMKL Benchmarks Suite for Linux с сайта Intel:
  • страница загрузки: https://www.intel.com/content/www/us/en/download/780783/intel-oneapi-math-kernel-library-onemkl-benchmarks-suite-for-linux.html
  • на 2026-03-16 там доступен файл l_onemklbench_p_2025.3.0_422.tgz

Сохрани его локально и при желании переименуй в linpack.tgz для удобства.

  1. На локальной машине скопируй архив на кластер:
scp linpack.tgz polytech:~/linpack.tgz
  1. Подключись к кластеру:
ssh polytech
  1. Распакуй архив в домашнюю папку:
mkdir -p ~/LINPACK
tar -xzf ~/linpack.tgz -C ~/LINPACK
  1. Найди каталог, в котором реально лежит xlinpack_xeon64:
find ~/LINPACK -name xlinpack_xeon64 2>/dev/null

В вашем случае по логам нужный каталог уже известен: /home/ipmmstudy1/tm3u21/LINPACK/benchmarks_2025.3/linux/share/mkl/benchmarks/linpack.

  1. Подготовь этот каталог, как в примере:
cd /home/ipmmstudy1/tm3u21/LINPACK/benchmarks_2025.3/linux/share/mkl/benchmarks/linpack
mkdir -p stdio
chmod +x *
chmod -x *.*
  1. Отправь batch-задачу с явным указанием LINPACK_DIR:
cd ~/supercomputers/task1
sbatch --export=ALL,LINPACK_DIR=/home/ipmmstudy1/tm3u21/LINPACK/benchmarks_2025.3/linux/share/mkl/benchmarks/linpack scripts/run_intel_linpack.slurm

По умолчанию скрипт использует файл task1/intel/lininput_report_xeon64, где уже зафиксированы размеры 1000 1500 2000 2500 3000 3500, чтобы Intel LINPACK можно было напрямую сравнить с вашей CUDA-реализацией в отчёте.

  1. Проверь статус:
sacct -j <JOBID_INTEL> --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode
  1. Посмотри вывод:
less ~/supercomputers/task1/stdio/task1-intel-linpack-<JOBID_INTEL>.out

В этом файле ищи строки с размерами 1000, 1500, 2000, 2500, 3000, 3500, а внизу --- секцию Performance Summary.

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

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

Шаг 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 ~/supercomputers/task1/stdio/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, пришли ошибку, и я быстро подправлю.