Автоматизация подготовки входных данных и вызова целевых программ комплекса PARALG вычисления сингулярных чисел матриц
Эта служебная подпрограмма организует за пользователя правильный вызов целевых программ вычисления сингулярных чисел матриц на распределенной памяти. Она считывает из внешнего файла исходную матрицу, распределяет ее части(блоки) по параллельным процессам в соответствии с используемыми алгоритмами и формирует правильный список фактических параметров для выбранной пользователем целевой программы. После чего осуществляет вызов этой программы. Полученный в результате счета массив сингулярных чисел записывается во внешний файл.
Литература:
http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/
http://www.netlib.org/scalapack/slug/index.html
http://num_anal.srcc.msu.ru/par_prog/
CALL CAL_GESVD1(NAME, M, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, INFILEA, OUTFILE)
Параметры
NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDGESVD1, PDGESVD4); (входной параметр, тип символьный); |
M - | число строк исходной матрицы (входной параметр, тип целый); |
N - | число столбцов исходной матрицы (входной параметр, тип целый); |
NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_GESVD1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_GESVD1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
AMEM - | массив локальной рабочей памяти, в которую распределяется локальная часть исходной матрицы, хранятся элементы рабочих массивов, где формируются локальные части массива сингулярных чисел (входной параметр, тип DOUBLE PRECISION); |
MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_GESVD1 (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_GESVD1 (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
INFILEA - | имя файла, содержащего исходную матрицу (A) (входной параметр, тип символьный); |
OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий массив сингулярных чисел (входной параметр, тип символьный). |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
PDGESVD1 - PDGESVD4 |
сингулярное разложение квадратной матрицы с вычислением всех сингулярных чисел; сингулярное разложение прямоугольной матрицы с вычислением всех сингулярных чисел; соответственно |
Замечания по использованию
1. | Используются подпрограммы BLACS_EXIT, BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO BLACS_GRIDINIT, BLACS_PINFO, BLACS_SETUP, IGSUM2D ( из пакета BLACS в составе MKL-библиотеки), DESCINIT, ICEIL, NUMROC, PDLAPRNT ( из пакета ScaLAPACK(TOOLS) в составе MKL-библиотеки), PDLAREAD, PDLAWRITE |
Необходимо вычислить сингулярные числа матрицы с помощью программы PDGESVD1.
Пользователь может выделить для решения задачи 4 параллельных процессора.
Матрица - квадратная порядка 5.
Пусть матрица А имеет вид:
| 1 2 3 4 5 | | 2 1 3 4 5 | | 3 3 1 4 5 | | 4 4 4 1 5 | | 5 5 5 5 1 |
При предварительном обращении к подпрограмме PAR_GESVD1 были получены следующие
значения необходимых параметров.
Решетка процессов: NPROW = 2, NPCOL = 2;
NB = 2 (т.е. матрица разбивается на блоки размера 2 на 2),
Минимальный размер локальной памяти MMIN = 67.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_gesvd1.zip)
PROGRAM TCL_GESVD1 include 'mpif.h' INTEGER M, N, NPROW, NPCOL, NB, MEMSIZE PARAMETER ( M=5, N=5, NB=2, MEMSIZE=67 ) * DOUBLE PRECISION AMEM( MEMSIZE ) CHARACTER*(*) NAME CHARACTER INFILEA*(*), OUTFILE*(*) PARAMETER ( INFILEA = 'gesvdA_5.dat', $ OUTFILE = 'gesvd1_5.res') * PARAMETER ( NAME = 'PDGESVD1') EXTERNAL CAL_GESVD1 * NPROW = 2 NPCOL = 2 * CALL CAL_GESVD1(NAME, M, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, $ INFILEA, OUTFILE) * STOP END Содержимое файла с исходной матрицей 'gesvdA_5.dat': 5 5 0.10000D+01 0.20000D+01 0.30000D+01 0.40000D+01 0.50000D+01 0.20000D+01 0.10000D+01 0.30000D+01 0.40000D+01 0.50000D+01 0.30000D+01 0.30000D+01 0.10000D+01 0.40000D+01 0.50000D+01 0.40000D+01 0.40000D+01 0.40000D+01 0.10000D+01 0.50000D+01 0.50000D+01 0.50000D+01 0.50000D+01 0.50000D+01 0.10000D+01 Результаты: сингулярные числа (в файле OUTFILE) S( 1 ) = 17.2323289653599; S( 2 ) = 5.42527830414530; S( 3 ) = 3.51682585287666; S( 4 ) = 2.29022480833794; S( 5 ) = 0.999999999999999;