Сборка и запуск программ, использующих ускорители NVIDIA Tesla M2090 (технология CUDA) в разделе «gpu»

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

Программная поддержка ускорителей NVidia Tesla M2090 (Compute Capability 2.0) не позволяет использовать последние версии CUDA Toolkit для работы с ними. В нашей текущей конфигурации можно использовать только версии 6.0, 6.5, 7.0, 7.5, 8.0. Для этого нужно загрузить соответствующий модуль:

user@master ~$ module load cuda/cuda-6.0 # или
user@master ~$ module load cuda/cuda-7.5 # или другой

Если программа содержит не-CUDA модули или использует MPI, то необходимо дополнительно загрузить соответствующие модули для компилятора или MPI-библиотеки.

Компиляция и линковка программы, содержащей код CUDA, производится командой следующего вида:

user@master ~$ echo '#include <stdio.h>
#include <cuda.h>
__global__ void mykernel(void){
    printf("Hello World from thread %d block %d on device\n", threadIdx.x , blockIdx.x);
}
int main (void ) {
    mykernel<<<2,2>>>();
    cudaDeviceSynchronize();
    return 0;
}' >helloCUDA.cu
user@master ~$ nvcc -o helloCUDA_sm20 --gpu-architecture=sm_20 -lcudart helloCUDA.cu

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

Для запуска программы в интерактивном режиме на одном узле кластера (ускорители NVidia Tesla M2090 установлены на узлах node1-node90) нужно выполнить команду следующего вида:

user@master ~$ srun -N 1 -p gpu ./helloCUDA_sm20
Hello World from thread 0 block 1 on device
Hello World from thread 1 block 1 on device
Hello World from thread 0 block 0 on device
Hello World from thread 1 block 0 on device

Здесь «-N 1» — запрос на выделение для запуска одного узла, «-p gpu» — выбор раздела для запуска (обязательный параметр).

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

user@master ~$ echo '#!/bin/sh
#SBATCH -N 1
#SBATCH --time=10
#SBATCH --partition=gpu
./helloCUDA_sm20' >batch_helloCUDA_sm20.sh
user@master ~$ sbatch batch_helloCUDA_sm20.sh
Submitted batch job 2420644

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

user@master ~$ scontrol show job 2420644
JobId=2420644 JobName=batch_helloCUDA_sm20.sh
UserId=user(userid) GroupId=Users(10000) MCS_label=N/A
Priority=1057677109 Nice=0 Account=user QOS=normal
JobState=COMPLETED Reason=None Dependency=(null)
...
user@master ~$ cat slurm-2420644.out
Hello World from thread 0 block 0 on device
Hello World from thread 1 block 0 on device
Hello World from thread 0 block 1 on device
Hello World from thread 1 block 1 on device

Если вы запускаете ранее собранную программу, необходимо предварительно загрузить тот модуль CUDA, который использовался при ее компиляции и линковке. Возможно, также потребуется загрузить другие модули, которые использовались при сборке.