Использование CUDA

Запуск задач на графических процессорах в системе SLURM задается опцией --gres=gpu:N, где N - число GPU.

Свежая версия библиотеки CUDA находится в каталоге /opt/cuda/.

  /opt/cuda/include/ — заголовочные файлы;
  /opt/cuda/lib /— библиотека CUDA;
  /opt/cuda/doc/ — документация.
Чтобы использовать библиотеку CUDA, необходимо при компиляции программы заказать данную библиотеку, например:

gcc mytest.c -o mytest -lcuda -L/opt/cuda/lib -I/opt/cuda/include

Можно использовать компилятор nvcc:

nvcc <имя файла для компиляции> -o <имя выходного файла> 

На кластере "Уран" при выполнении данной команды по умолчанию подключается библиотека CUDA . Можно компилировать программы на языках C и C++ (файлы с расширением .c и .cpp) и программы, написанные с использованием технологии CUDA (файлы с расширением .cu), например:

u9999@umt:~$ nvcc main.c -o gputest

Пример
Пусть файл cuda_test.cu (из домашнего каталога) содержит программу на CUDA:

#include <cuda.h>
#include <stdio.h>
int main() {
  int GPU_N;
  int dev;
  cudaGetDeviceCount(&GPU_N);
  printf("Device count: %d\n", GPU_N);
  for(dev=0;dev<GPU_N;dev++) {
    cudaDeviceProp deviceProp;
    cudaGetDeviceProperties(&deviceProp, dev);
    printf("PCI Bus id: %d\n",deviceProp.pciBusID);
  }
  return 0;
}

Тогда компиляция программы и запуск задачи на кластере могут иметь вид:

u9999@umt:~$  nvcc cuda_test.cu -o cuda_test
u9999@umt:~$ srun --gres=gpu:1 ./cuda_test
Device count: 1
PCI Bus id: 8
u9999@umt:~$ srun --gres=gpu:2 ./cuda_test
Device count: 2
PCI Bus id: 10
PCI Bus id: 26

Поддержка CUDA есть в компиляторе Portland Group.
Инструкции по использованию CUDA в Фортране можно найти на сайте Portland Group (http://www.pgroup.com/resources/cudafortran.htm).
Для компиляции Fortran-программы с CUDA следует установить переменные окружения командой module или mpiset, выбрав связку MVAPICH+PGI, например:

module  switch  mpi/default mvapich2/pgi_12.10

или соответственно

mpiset 7

и откомпилировать программу компилятором pgfortran с опцией -Mcuda, указав при необходимости оптимизированные библиотеки, например:

pgfortran  -o mytest test.cuf -Mcuda -lcublas

Ссылки на руководства по CUDA

Сообщество пользователей CUDA ВМК МГУ (выложены лекции в виде слайдов и есть активный форум, на котором можно задавать вопросы по CUDA. В работе форума активно участвуют сотрудники Nvidia)
https://sites.google.com/site/cudacsmsusu/home

CUDA zone: сборник приложений на CUDA, многие с документацией и исходными кодами
http://www.nvidia.ru/object/cuda_apps_flash_new_ru.html#state=home

Записи семинаров по CUDA:
a) введение в CUDA
http://www.gotdotnet.ru/blogs/parallel-computing/9966/
b) библиотеки с поддержкой CUDA
http://www.gotdotnet.ru/blogs/parallel-computing/10070/
c) отладка и профилировка CUDA приложений
http://www.gotdotnet.ru/blogs/parallel-computing/10362/

Чтобы быстро задействовать GPU (хотя и с меньшей эффективностью) можно использовать директивные средства распараллеливания, а именно PGI Accelerator, доступ к триальной версии которого можно получить на месяц бесплатно
http://www.nvidia.ru/object/openacc-gpu-directives-ru.html

вот ссылки на записи презентаций по применению данного ПО для C и Fortran кодов
http://youtu.be/5tDhWkSc4BI
http://youtu.be/MjGEcZ7LHAQ

25 июня по 7 июля 2012 в Москве в МГУ будет проходить Международная Летняя Суперкомпьютерная Академия, на которой будут курсы по CUDA.
http://academy.hpc-russia.ru/