Сборка и запуск последовательных программ или программ для общей памяти (технологии OpenMP/TBB/OpenCL/oneAPI/…) в разделе «gpu»

Сборка программы на языке C/С++

На суперкомпьютере установлено несколько компиляторов. По умолчанию будет использоваться gcc 4.8.5, для использования другого компилятора необходимо загрузить соответствующий модуль.

user@master ~$ module load gcc-9.4.0 # для использования gcc 9.4.0
user@master ~$ module load intel2017 # для использования icc 17.0.0 
user@master ~$ module load compiler/2022.0.2 # для использования icpc (ICC) 2021.5.0 (из пакета oneAPI)

Далее нужно выполнить компиляцию и линковку вашей программы

user@master ~$ echo '#include <stdio.h>
int main() {
    printf("Hello World!\n");
    return 0;
}' >hello.c
user@master ~$ cc -o hello_gcc_4.8.5 hello.c # если используется компилятор по умолчанию, или
user@master ~$ icc -o hello_icc_17.0.0 #  если загружен модуль load intel2017

Запуск программы через систему управления кластером Slurm

Для запуска программы в интерактивном режиме на одном узле кластера нужно выполнить команду следующего вида:

user@master ~$ srun -N 1 -p gpu -t 10 ./hello_gcc_4.8.5 # Пример №1
Hello World!
user@master ~$ srun -N 1 -p gpu -t 5 /home/user/hello_icc_17.0.0 # Пример №2
Hello World!

Для запуска в пакетном режиме необходимо подготовить файл задания и поставить его в очередь заданий:

user@master ~$ echo '#!/bin/sh
#SBATCH --time=10
#SBATCH --partition=gpu
./hello_gcc_4.8.5' >batch_hello_gcc_4.8.5.sh
user@master ~$ sbatch -N 1 batch_hello_gcc_4.8.5.sh
Submitted batch job 2420505

Параметры запуска задания (time, partition, N etc) могут быть указаны как в файле задания, так и в командной строке sbatch. Номер задания может быть использован для просмотра его состояния. После завершения выполнения задания стандартный вывод и стандартный вывод ошибки записываются в файлы slurm-JOBID.out и slurm-JOBID.err (можно задать файлы с другими именами).

user@master ~$ scontrol show job 2420505
JobId=2420505 JobName=batch_hello_gcc_4.8.5.sh
UserId=user(userid) GroupId=Users(10000) MCS_label=N/A
Priority=1052937772 Nice=0 Account=user QOS=normal
JobState=PENDING Reason=None Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
RunTime=00:00:00 TimeLimit=00:10:00 TimeMin=N/A
...
user@master ~$ cat slurm-2420505.out
Hello World!

Обратите внимание, что при запуске программы может потребоваться загрузка модулей, которые использовались при ее сборке.