CUDA

Для запуска программы на кластере, необходимо написать скрипт. Покажем это на примере программы, использующей CUDA.

# Копируем программу перемножения матриц.
mkdir -p ~/cuda-examples/0_Simple
cp -irv /box/soft/cuda/9.0/samples/0_Simple/matrixMul ~/cuda-examples/0_Simple
cp -irv /box/soft/cuda/9.0/samples/common ~/cuda-examples
# Подключаем CUDA и совместимую версиюю GCC через модули.
module load cuda/10.1
module load gcc/8
module load make
# Собираем программу (переменная CUDA_PATH нужна только для сборки примера).
export CUDA_PATH=$(realpath $(dirname $(realpath $(which nvcc)))/..)
cd ~/cuda-examples/0_Simple/matrixMul
make
Для написания скрипта используем любой редактор, например, nano. Для создания файла job.sh набираем в консоли nano job.sh. В файле пишем команды для запуска нашей программы.
#!/bin/sh
module load cuda/10.1
~/cuda-examples/bin/x86_64/linux/release/matrixMul
Делаем скрипт исполняемым и отправляем в очередь на исполнение. Раздел указываем с помощью опции -p gpulab.
$ chmod +x job.sh
# Здесь вместо gpulab можно указать любой другой раздел (capybara)
$ sbatch -p gpulab job.sh
Submitted batch job 25999
После завершения задачи в текущей директории появится файл со стандартным выводом и потоком ошибок. Проверяем содержимое файла командой cat.
$ cat slurm-25999.out
[Matrix Multiply Using CUDA] - Starting...
GPU Device 0: "GeForce GTX 1060 6GB" with compute capability 6.1

MatrixA(320,320), MatrixB(640,320)
Computing result using CUDA Kernel...
done
Performance= 515.14 GFlop/s, Time= 0.254 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
Checking computed result for correctness: Result = PASS

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.