О параллельном программировании для вычислительного комплекса IBM Regatta.

В качестве средства для написания параллельных программ для многопроцессорных систем чаще всего используют 2 стандарта:
  • OpenMP - стандарт для написания параллельных программ в условиях общей памяти. Программа представляется как набор потоков объединённых общей памятью, где проблема синхронизации решается введением критических секций и приватных переменных,. информацию о нём можно найти на http://www.openmp.org. (на русском языке http://www.parallel.ru/tech/tech_dev/openmp.html.)
  • Message Passing Interface (MPI) - стандарт, предназначенный для написания программ в условиях разделённой памяти, данный стандарт описывает параллельную программу как набор нитей, взаимодействующих посредством передачи сообщений. информацию о нём можно найти на http://www.mpi-forum.org. (на русском языке http://www.parallel.ru/tech/tech_dev/mpi.html)

Подготовка заданий (компиляция программ)

Для компилирования программ на комплексе установлены фирменные компиляторы IBM поддерживающие языки программирования C, C++, Fortran77, Fortran90. С помощью комплекта компиляторов, присутствующих на системе можно собирать как обычные программы, так и программы, использующие OpenMP и MPI.
компилятор   Программы   Программы    Обычные 
              OpenMP        MPI       программы
C              Xlc_r       mpicc        xlc
С++            XlC_r       mpiCC        xlC
Fortran77      Xlf_r       mpif         xlf
Fortran90     xlf90_r      mpif90       xlf90



Для всех компиляторов, не только компиляторов IBM, но и gcc, а так же большинства других компиляторов, имеются следующие ключи:

-I include_dir - опция, которая задаёт пути для поиска include файлов.
-L library_dir - задаёт пути для поиска подключаемых библиотек.
-l library_name - линкует с указанной библиотекой,
-c - только компиляция без линковки.
-g - добавление отладочной информации в бинарный код, после этого при запуске программы через отладчик будет доступна информация об исходном коде программы.
-o file_name - задаёт имя файла, который будет получен как результат деятельности компилятора, например: xlc -o test test.c sub_test.c будет создан бинарный файл, который собственно и есть программа, которую можно исполнять.
-O - Опция начального уровня оптимизации.

Нестандартные ключи компиляторов IBM:

-qsmp=omp обеспечивает возможность писать программы с использованием OpenMP стандарта.
-qsmp=auto для автоматического распараллеливания программ для SMP архитектур,
-qarch=pwr4 - тогда компилятор будет генерировать оптимальный код для Power4 процессоров.
-q64, -q32 - используются для указания, сколько разрядный код генерировать. Если ключ не указан, то по умолчанию установлен ключ -q64
-b64, -b32 - указывает линкеру ld связывать 64-битные объекты или 32-х битные.
-qlanglvl=extc99:ucs для использования в тексте кода комментариев на русском языке;
-cpluscmt при использовании символа комментария "//" в коде на С.
-qhot оптимизация кода с принудительным внедрением параллелизма внутрь кода, здесь начинает использоваться параллелизм функциональных устройств архитектуры Power4. Тем самым, можно добиться ускорения на одном Power4 процессоре до 8-раз. При этом нарушается последовательность команд, которая была задана в исходном файле. В результате, программа становится недетерминированной.
-bmaxdata=size которая задаёт максимальный размер выделяемой динамически памяти в байтах. Эту опцию стоит использовать если возникают проблемы с использованием большого объёма динамической памяти программой написанной на C или C++. ( bmaxdata=0x1000000000 - размер выделяемой динамической памяти в 1Gb. )
-qlargepage будут использоваться большие таблицы виртуальной памяти, что увеличит производительность программы, если она использует большие объёмы памяти.

Посмотреть более подробную информацию об опциях компиляторов вы можете, набрав в командной строке xlc - для С, и xlf - для Фортрана.

Примеры:

xlc_r -qsmp=omp -O3 -qarch=pwr4 -q64 -o my_c_program.c

скомпилирует все находящиеся в данной директории .c файлы в исполняемый 64-х разрядный файл с именем my_с_program, оптимизирует его под имеющуюся архитектуру, и учтет все директивы OpenMP. Можно попытаться использовать опцию автоматического распараллеливания:

xlf_r -qsmp=auto -qarch=pwr4 -q64 -o my_fortran_program.f

Посмотреть более подробную информацию об опциях компиляторов вы можете, набрав в командной строке xlc - для С, и xlf - для Фортрана.

Для сборки собственных программ рекомендуется использовать make. На комплексе установлена GNU разновидность make. Она вызывается по команде gmake. Для использования make необходимо написать Makefile. Самое начальное описание того, как писать Makefile на русском языке http://www.linux.org.ru/books/make.html. Полное описание GNU make можно найти на сайте http://www.gnu.org/software/make/.

Для создания и запуска программ написанных с использованием MPI стандарта на комплексе установлен пакет mpich версии 1.2.5. Компиляция программ, использующих MPI производится при помощи стандартных для Mpich утилит:
  • mpicc - C компилятор;
  • mpiCC - С++ компилятор;
  • mpif - Fortran 77 компилятор;
  • mpif90 - Fortran 90 компилятор.
Для получения дополнительной информации можно читать мануалы (man mpirun, man mpicc, man mpiCC, ... )

-- CostyaZhukov - 19 Jun 2013
Topic revision: r3 - 25 Jun 2013, CostyaZhukov
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WikiCMC? Send feedback