Компиляторы PGI (pgcc/pgCC/pgf77/pgfortran) позволяют создавать приложения для запуска на GPU (см. [1-3]). Поддержка стандарта OpenACC [4] добавлена в 2012 году с версии 12.6 (см. [5]; в частности, о переходе на OpenACC в [6]). Приложения могут быть запущены на узлах с графическими ускорителями кластера "Уран" (umt).
Настроиться на компиляторы PGI можно с помощью команды mpiset
(на текущую рабочую версию)
mpiset 7
или, загрузив модуль с нужной версией, с помощью команды module
. Например, в начале сеанса
module switch mpi/default mvapich2/pgi_12.10
Для компиляции тогда можно использовать, например, команду pgcc
или mpicc
mpicc -o exam_pgi exam.c -ta=nvidia -Minfo=accel -fast
где опция -ta=nvidia
подключает компиляцию на GPU,
а необязательная опция -Minfo=accel
служит для выдачи дополнительной информации о генерации кода для GPU (accelerator kernel).
Для версий компилятора с поддержкой OpenACC можно вместо опции -ta=nvidia
использовать опцию -acc
.
Опция -ta=nvidia,time
(где time
- подопция) используется для выдачи времени, потраченного на инициализацию GPU (init), перемещение данных (data) и вычисления на GPU (kernels).
Использование же -ta=nvidia,host
задаст генерацию единого кода для host (CPU) и GPU: при наличии GPU программа будет выполняться на GPU, иначе на host.
Например,
mpicc -o exam_gh exam.c -ta=nvidia,host -Minfo
Можно узнать, выполняется ли программа на GPU, если установить переменную окружения ACC_NOTIFY в 1
export ACC_NOTIFY=1
и запустить программу. При каждом вызове функции GPU (kernel) будет выдаваться сообщение вида
launch kernel file=...
что полезно при разработке и отладке программы.
Примеры C и Fortran программ есть на umt, например в каталоге
/opt/pgi/linux86-64/11.1/EXAMPLES/accelerator
и рассматриваются в [2].
Замечания.
double
. Поэтому в [2, First Program] для вычислений с одинарной точностью используется 2.0f вместо 2.0.restrict
. Такие указатели ссылаются на непересекающиеся области памяти.Запуск приложения на счет с использованием GPU можно осуществить с помощью команды
srun --gres=gpu:1 exam_pgi
Опция -C k40m
(или -C m2090
) позволяет указать желаемый тип GPU (см. Кластер "Уран"), например,
srun --gres=gpu:1 -C k40m exam_pgi
С помощью программы pgaccelinfo
[2, Setting Up] можно получить информацию о технических характеристиках GPU конкретного узла, указав опцию -w
, например
srun -w tesla52 --gres=gpu:1 pgaccelinfo
Возможно совместное использование OpenMP и GPU.
Общие замечания.
by Michael Wolfe
/ PGI GPU Programming Tutorial. Mar 2011by Michael Wolfe
/ June 2009 by Michael Wolfe
/ August 2009by Michael Wolfe
/ March 2012, revised in August 2012