Программная поддержка ускорителей 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
Для запуска программы в интерактивном режиме на одном узле кластера (ускорители 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, который использовался при ее компиляции и линковке. Возможно, также потребуется загрузить другие модули, которые использовались при сборке.