Использование IBM XL компиляторов на Blue Gene/P

Постфикс _r в названии скрипта, применяемого для компиляции, говорит о том, что будут использованы потокобезопасные компоненты. Такие скрипты необходимо вызывать при сборке OpenMP- и pthreads-программ, т.е. кодов, использующих SMP- и DUAL-режимы. Скрипты расположены в директории /bgsys/drivers/ppcfloor/comm/bin.

Компилятор C/C++ Fortran
C C++ Fortran 77 Fortran 90 Fortran 95 Fortran 2003
GCC mpicc mpicxx mpif77
IBM XL mpixlc mpixlcxx mpixlf77 mpixlf90 mpixlf95 mpixlf2003
потокобезопасная версия mpixlc_r mpixlcxx_r mpixlf77_r mpixlf90_r mpixlf95_r mpixlf2003_r

Необходимо четко понимать, что на системе Blue Gene/P используется механизм кросс-компиляции. Это значит, что компилятор запускается на frontend-сервере на базе процессора Power5 и генерирует код, предназначенный для процессора PowerPC 450. Компиляторы для Blue Gene/P выполняют особого рода оптимизацию, чтобы максимально использовать преимущества архитектуры системы. В частности, XL-компиляторы генерируют код для сдвоенного устройства вычислений с плавающей точкой (double floating-point unit, double FPU) ядра процессора процессора PowerPC 450. Также они учитывают особенности диспетчеризации инструкций и иерархии памяти. В дополнение к XL-компиляторам доступны компиляторы семейства GNU (GNU compiler collection, GCC) для C/C++ и Fortran 77. Кроме того, на вычислительных узлах можно запускать программы, написанные на языке Python.

Также имеется возможность использовать более быструю версию MPI. Соответствующие скрипты расположены в директории /bgsys/drivers/ppcfloor/comm/fast/bin. Их особенностью является то, что в этом случае полностью отключена проверка ошибок. Поэтому использовать эти скрипты нужно только на отлаженном коде, который уже был успешно запущен на BG/P при условии компиляции обычными скриптами. Некоторую информацию об оптимизации на BG/P можно почерпнуть в слайдах: www.nccs.gov/wp-content/training/2008_bluegene/ORNLCompOptimization.pdf

Параметрами по умолчанию для компиляторов с префиксом bg являются (не приведены настройки кэш-памяти с помощью ключа -qcache):

  • -qarch=450
    Эта опция генерирует код только для одного FPU, и может быть полезна, если с использованием настройки -qarch=450d получается неправильный код
  • -qtune=450
    Оптимизирует код для процессора PowerPC 450. Задействует лишь один FPU.
  • -qnoautoconfig
    При уровнях оптимизации -O4 и -O5 отключает автонастройку под параметры машины, используемой для компиляции, т.е. сохраняет ключи -qarch=450, -qtune=450 и установки кэша, прописанные с помощью ключа -qcache.

Доступны следующие скрипты:

Имя скрипта
обычный потокобезопасный
C bgc89, bgc99, bgcc, bgxlc bgc89_r, bgc99_r bgcc_r, bgxlc_r
C++ bgxlc++, bgxlC bgxlc++_r, bgxlC_r
Fortran bgxlf, bgxlf90, bgxlf95, bgxlf2003, bgf77, bgfort77, bgf90, bgf95, bgf2003 bgxlf_r, bgxlf90_r, bgxlf95_r, bgxlf2003_r

Потокобезопасные компиляторы (т.е. имеющие постфикс _r) должны применяться для любых приложений, использующих потоки, основанных на OpenMP или работающих в режиме симметричного мультипроцессинга.

Некоторые полезные опции XL-компиляторов для C и Fortran:

Опция Описание
-qversion Узнать версию компилятора
-g, -qdbg Включать в исполняемый файл отладочную информацию
-qfullpath При совместном использовании с ключом -g сохраняет полный путь к исходным файлам
-qcompact Не использует оптимизации, которые увеличивают размер исполняемого файла; рекомендуется применять только при возникновении нехватки памяти и только к исходным файлам, содержащие некритичные ко времени исполнения функции.

Некоторые полезные опции XL-компилятора для Fortran:

Опция Описание
-qcclines Распознавать директивы условной компиляции !$, C$, c$ и *$
-C, -qcheck Осуществляет проверку выхода за границы массива или строки символов при каждом обращении; может значительно снизить производительность, поэтому рекомендуется для использования только на этапе разработке
-qessl Компилятор автоматически заменит встроенные функции процедурами ESSL; на этапе связывания необходимо будет добавить опцию -lessl для подключения последовательной версии ESSL или -lesslsmp — для многонитевой.
-qhot Выполнять высокоуровневую оптимизацию циклов; полный набор параметров ключа доступен в официальной документации.
-qipa Выполнять межпроцедурную оптимизацию; ключ может указываться при компиляции и/или связывании; полный набор параметров ключа доступен в официальной документации.

Текст составлен на основе материала главы 8, «Developing applications with IBM XL compilers», 2-го издания книги «IBM System Blue Gene Solution: Blue Gene/P Application Development» и официальной документации по компиляторам IBM XL серии