Пользователям суперкомпьютера СКИФ "Чебышев" НИВЦ МГУ

Описываемый на настоящем сайте Комплекс подпрограмм для параллельных вычислений с распределенной памятью (PARALG) с 2009 года доступен пользователям суперкомпьютера СКИФ "Чебышев" в НИВЦ МГУ в виде откомпилированных библиотек. Пакеты (BLAS, BLACS, ScaLAPACK и др.), модули которых используются подпрограммами Комплекса, входят в состав MKL-библиотеки, установленной на СКИФ и должны быть подсоединены при получении исполнимой программы. Объектные модули самого Комплекса могут быть взяты из библиотеки libparalg.a, указанной в последней строке скрипта. Ниже в приводимом конкретном примере дается гиперссыка на эту библиотеку.

Ниже представлен текст скрипта с именем  bld-tcl, предназначенного для компиляции и получения исполнимой программы, которая может быть затем запущена в параллельном режиме на суперкомпьютере СКИФ.

#! /bin/sh
EXEDIR=.
EXE="<имя исполнимой программы>"
OBJ="<список имен объектных модулей>"
F77OPTS="-O2"
F77=mpif77
#
$F77 -c $F77OPTS <имя исходного фортранного модуля>
#
echo Linking executable $EXE
#
$F77 -o $EXEDIR/$EXE  $OBJ \
             -Wl,--start-group  -lmkl_scalapack_lp64  -lmkl_blacs_lp64  -lmkl_intel_lp64 \
             -lmkl_sequential  -lmkl_core \
             -Wl,--end-group \
             -lpthread -libparalg.a
здесь:

В bld-tcl подключаются все пакеты из MKL-библиотеки, содержащие все вызываемые подпрограммы, используемые при работе описываемых параллельных подпрограмм Комплекса.

Полученная исполнимая программа может быть затем запущена на счет с помощью команды mpirun с параметрами (подробнее о запуске программ на СКИФе).

Например, в случае, если тестовый пример рассчитан на запуск на шести процессорах, команда запуска может выглядеть так:

  mpirun  -np 6  -maxtime 1  ./tcl_gesv.e 

В тестах к подпрограммам, выдача исходных матриц и полученных результатов осуществляется с помощью обращения к подпрограмме PDLAPRNT, из пакета ScaLAPACK(TOOLS). Она распечатывает всю распределенную матрицу (вектор) полностью по столбцам по одному элементу в строке, получая элементы со всех, участвующих в вычислениях процессоров.

В случае обращения пользователей к подпрограммам Комплекса с помощью подпрограмм автоматизации конкретный вид скрипта показывает следующий пример (для решения системы уравнений с помощью подпрограммы Комплекса PDGESV1).

#! /bin/sh
EXEDIR=.
EXE="tcl_gesv.e"
OBJ="tcl_gesv.o  cal_gesv.o  pdgesv1.o  pdlaprnt.o  pdlaread.o  pdlawrite.o"
#
F77OPTS="-O2"
F77=mpif77
#
$F77 -c  $F77OPTS  tcl_gesv.f
#
$F77 -o $EXEDIR/$EXE  $OBJ \
             -Wl,--start-group  -lmkl_scalapack_lp64  -lmkl_blacs_lp64  -lmkl_intel_lp64 \
             -lmkl_sequential  -lmkl_core \
             -Wl,--end-group \
             -lpthread -libparalg.a

Чтобы не указывать все объектные модули подпрограмм Комплекса PARALG, которые необходимо вызвать для решения конкретной задачи, достаточно указать в последней строке скрипта объектную библиотеку Комплекса libparalg.a. Тогда строка с объектными модулями будет содержать только объектный модуль головной программы OBJ="tcl_gesv.o".

Здесь подпрограммы pdlaread.o и pdlawrite.o - входящие в Комплекс служебные подпрограммы для считывания из файла исходных матриц и распределения их по паралельным процессам и записи в файл полученного вектора решения.