Краткая инструкция по работе на сопроцессорах Xeon Phi
Многоядерные сопроцессоры Intel Xeon Phi являются аналогами (заменой) графических ускорителей. С помощью многоядерного сопроцессора Intel Xeon Phi Вы можете получить значительное ускорение в расчётах. Intel Xeon Phi поддерживает 3 режима работы —native, offload и symetric. В режиме offload параллельная часть программы копируется из памяти вычислительного узла в память сопроцессора и вычисляется там. В symmetric-режиме вычислительную нагрузку на себя берет как CPU, так и сопроцессор. Многоядерные сопроцессоры поддерживают технологии программирования OpenMP и MPI. Дополнительную информацию по многоядерным сопроцессорам Intel Xeon Phi Вы можете найти здесь.
Перед тем, как начать работать с компилятором, необходимо экспортировать необходимые переменные среды, подгрузив следующий модуль:
[user@login ~]# module load compilers/composer_xe/2013_sp1_parallel/mpi.intel/4.1.0.024 launcher/mic
Для того, чтобы скомпилировать параллельную программу, совместимую с Intel Xeon Phi, необходимо использовать компилятор Intel, установленном на суперкомпьютере.
Компиляция (режим offload)
Переходим в директорию с исходным кодом:
[user@login ~]# cd /the/location/of/your/program
Компилируем версию для сопроцессора:
[user@login ~]# mpiicc ./program.c -o ./program.exe
Компиляция (режим symmetric)
Исполняемый код на процессоре и на сопроцессоре Intel Xeon Phi компилируется по-разному ввиду разности архитектур. При дальнейшем запуске скомпилированной программы, оба полученных при компиляции исполняемых файла (для CPU и и для Xeon Phi) должны находиться в одной и той же директории.
Переходим в директорию с исходным кодом:
[user@login ~]# cd /the/location/of/your/program
Для процессора:
[user@login ~]# mpiicc ./program.c -o ./program.exe
Для сопроцессора:
[user@login ~]# mpiicc -mmic ./program.c -o ./program.exe.mic
Постановка задачи в очередь осуществляется следующим образом:
sbatch -C mic_online -N <количество узлов> -p <тип очереди (work|quick)> symmetric_run_tcp.sh --ppn=<количество mpi процессов на каждом из узлов> --ppnmic=<количество mpi процессов на каждом из ускорителей> <полный или относительный путь (относительно каталога, где будет вызвана команда sbatch) до файла program.exe>
Скрипт symmetric_run_tcp.sh устроен следующим образом: Вам не нужно явно указывать файл, исполняемый на сопроцессоре (в данном случае это program.exe.mic), скрипт автоматически допишет в конец входного файла расширение .mic и найдет соответствующий исполняемый файл для сопроцессора.
Ниже приведен код программы, запускаемой в симметричном режиме:
#include <stdio.h> #include <mpi.h> int main (int argc, char *argv[]) { char name[BUFSIZ]; int length; int rank; int size; MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); MPI_Get_processor_name (name, &length); printf ( «Hello world from %d / %d from %s\n», rank, size, name) ; fflush (stdout); MPI_Finalize (); return 0; }
Строка для запуска на двух узлах по 12 процессов на каждом процессоре и по одному процессу на каждом сопроцессоре:
sbatch -N 2 -p quick symmetric_run_tcp.sh --ppn=12 --ppnmic=1 /share/cae_samples/xeon_phi/test.exe
Вывод:
Hello world from 0 / 26 from node281 Hello world from 1 / 26 from node281 Hello world from 8 / 26 from node281 Hello world from 13 / 26 from node282 Hello world from 9 / 26 from node281 Hello world from 24 / 26 from node282 Hello world from 2 / 26 from node281 Hello world from 3 / 26 from node281 Hello world from 22 / 26 from node282 Hello world from 4 / 26 from node281 Hello world from 23 / 26 from node282 Hello world from 5 / 26 from node281 Hello world from 10 / 26 from node281 Hello world from 11 / 26 from node281 Hello world from 18 / 26 from node282 Hello world from 20 / 26 from node282 Hello world from 19 / 26 from node282 Hello world from 16 / 26 from node282 Hello world from 17 / 26 from node282 Hello world from 12 / 26 from node281-mic0 Hello world from 6 / 26 from node281 Hello world from 21 / 26 from node282 Hello world from 7 / 26 from node281 Hello world from 14 / 26 from node282 Hello world from 15 / 26 from node282 Hello world from 25 / 26 from node282-mic0
Пример задачи можно найти на кластере, перейдя в директорию /share/cae_samples/xeon_phi/.
--------
Составитель инструкции — Порозов Алексей Сергеевич.
|