From 0286361343fa78108714f4ad495935284b0e2b35 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Mon, 16 Mar 2026 18:20:06 +0300 Subject: [PATCH] task1 --- task1/README.md | 62 ++++++++++++++++++++++++--- task1/scripts/build.sh | 1 + task1/scripts/run_intel_linpack.slurm | 54 +++++++++++++++++------ 3 files changed, 98 insertions(+), 19 deletions(-) diff --git a/task1/README.md b/task1/README.md index cc6ebce..5b25dd9 100644 --- a/task1/README.md +++ b/task1/README.md @@ -67,21 +67,73 @@ CUDA_ARCH=sm_70 ./scripts/build.sh ### 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` для удобства. + +2. На локальной машине скопируй архив на кластер: + ```bash -sbatch scripts/run_intel_linpack.slurm +scp linpack.tgz polytech:~/linpack.tgz ``` -Проверка статуса и итогов: +3. Подключись к кластеру: + +```bash +ssh polytech +``` + +4. Распакуй архив в домашнюю папку: + +```bash +mkdir -p ~/LINPACK +tar -xzf ~/linpack.tgz -C ~/LINPACK +``` + +5. Найди каталог, в котором реально лежит `xlinpack_xeon64`: + +```bash +find ~/LINPACK -name xlinpack_xeon64 2>/dev/null +``` + +Если команда вернёт, например, путь +`/home/ipmmstudy1/tm3u21/LINPACK/benchmarks/linpack/xlinpack_xeon64`, +то нужный каталог для запуска: +`/home/ipmmstudy1/tm3u21/LINPACK/benchmarks/linpack`. + +6. Подготовь этот каталог, как в примере: + +```bash +cd <НУЖНЫЙ_КАТАЛОГ_С_XLINPACK> +mkdir -p stdio +chmod +x * +chmod -x *.* +``` + +7. Отправь batch-задачу с явным указанием `LINPACK_DIR`: + +```bash +cd ~/supercomputers/task1 +sbatch --export=ALL,LINPACK_DIR=<НУЖНЫЙ_КАТАЛОГ_С_XLINPACK> scripts/run_intel_linpack.slurm +``` + +8. Проверь статус: ```bash sacct -j --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode -less results/task1-intel-linpack-.out ``` -Если каталог с Intel LINPACK на кластере другой, отправь задание так: +9. Посмотри вывод: ```bash -sbatch --export=ALL,LINPACK_DIR=/linux/share/mkl/benchmarks/linpack scripts/run_intel_linpack.slurm +less <НУЖНЫЙ_КАТАЛОГ_С_XLINPACK>/stdio/task1-intel-linpack-.out ``` ## Что нужно собрать для отчёта diff --git a/task1/scripts/build.sh b/task1/scripts/build.sh index 004165e..de79491 100755 --- a/task1/scripts/build.sh +++ b/task1/scripts/build.sh @@ -17,6 +17,7 @@ nvcc \ -O3 \ -std=c++14 \ -lineinfo \ + -Wno-deprecated-gpu-targets \ -arch="${CUDA_ARCH}" \ -o bin/linpack_cuda \ src/main.cu diff --git a/task1/scripts/run_intel_linpack.slurm b/task1/scripts/run_intel_linpack.slurm index 545d301..69d253f 100755 --- a/task1/scripts/run_intel_linpack.slurm +++ b/task1/scripts/run_intel_linpack.slurm @@ -5,28 +5,54 @@ #SBATCH --ntasks=1 #SBATCH --cpus-per-task=56 #SBATCH --time=00:20:00 -#SBATCH --output=results/%x-%j.out -#SBATCH --error=results/%x-%j.err +#SBATCH --output=stdio/%x-%j.out +#SBATCH --error=stdio/%x-%j.err set -euo pipefail -cd "${SLURM_SUBMIT_DIR}" -ROOT_DIR="${SLURM_SUBMIT_DIR}" - module purge -mkdir -p results - -LINPACK_DIR="${LINPACK_DIR:-/linux/share/mkl/benchmarks/linpack}" +LINPACK_DIR="${LINPACK_DIR:-$HOME/LINPACK}" LINPACK_INPUT="${LINPACK_INPUT:-lininput_xeon64}" -if [ ! -x "${LINPACK_DIR}/xlinpack_xeon64" ]; then - echo "Intel LINPACK binary not found: ${LINPACK_DIR}/xlinpack_xeon64" - echo "If the path differs on the cluster, submit with:" - echo "sbatch --export=ALL,LINPACK_DIR=/path/to/linpack scripts/run_intel_linpack.slurm" +if [ ! -d "${LINPACK_DIR}" ]; then + echo "LINPACK directory not found: ${LINPACK_DIR}" + echo "Prepare Intel LINPACK in your home directory first." + echo "Example:" + echo " mkdir -p \$HOME/LINPACK" + echo " tar -xzf \$HOME/linpack.tgz -C \$HOME/LINPACK" exit 1 fi +resolve_linpack_dir() { + if [ -x "${LINPACK_DIR}/xlinpack_xeon64" ]; then + printf '%s\n' "${LINPACK_DIR}" + return 0 + fi + + local found + found="$(find "${LINPACK_DIR}" -name xlinpack_xeon64 2>/dev/null | head -n 1 || true)" + if [ -n "${found}" ]; then + dirname "${found}" + return 0 + fi + + return 1 +} + +if ! LINPACK_DIR="$(resolve_linpack_dir)"; then + echo "Intel LINPACK binary not found under: ${LINPACK_DIR}" + echo "Check archive contents with:" + echo " find ${LINPACK_DIR} -name xlinpack_xeon64 2>/dev/null" + exit 1 +fi + +cd "${LINPACK_DIR}" + +chmod +x ./* || true +chmod -x ./*.* || true +mkdir -p stdio + echo "===== account info =====" whoami hostname @@ -51,8 +77,8 @@ fi echo echo "===== intel linpack =====" +echo "LINPACK_DIR=${LINPACK_DIR}" export OMP_NUM_THREADS="${SLURM_CPUS_PER_TASK:-56}" export MKL_NUM_THREADS="${SLURM_CPUS_PER_TASK:-56}" -cd "${LINPACK_DIR}" -./xlinpack_xeon64 "${LINPACK_INPUT}" +srun ./xlinpack_xeon64 "${LINPACK_INPUT}"