Выбор пaраметров распараллеливания для целевых программ комплекса PARALG вычисления сингулярных чисел и векторов матриц
Эта служебная подпрограмма выбирает и вычисляет за пользователя параметры распараллеливания, которые конкретизируют распределение вычислений между параллельными процессами и значения которых необходимо передавать целевым программам вычисления сингулярных чисел и векторов матриц
Литература:
http://num_anal.srcc.msu.ru/par_prog/
http://software.intel.com/en-us/articles/intel-math-kernel-library-documentation/
http://www.netlib.org/scalapack/slug/index.html
CALL PAR_GESVD2(NAME, M, N, SV, NPROCS, MMIN, NB, NPROW, NPCOL)
Параметры
NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDGESVD2, PDGESVD3, PDGESVD5, PDGESVD6); (входной параметр, тип символьный); |
M - | число строк исходной матрицы (входной параметр, тип целый); |
N - | число столбцов исходной матрицы (входной параметр, тип целый); |
SV - |
если SV = 'R' - требуется вычислить только правые сингулярные векторы матрицы; если SV = 'L' - требуется вычислить только левые сингулярные векторы матрицы; если SV = 'A' - требуется вычислить и левые и правые сингулярные векторы матрицы; (входной параметр, тип символьный); |
NPROCS - | число процессов, которое может выделить пользователь для решения задачи (входной параметр, тип целый); |
MMIN - | минимальное количество локальной памяти, которое необходимо выделить на каждом из параллельных процессов для решения задачи (выходной параметр, тип целый); |
NB - | величина блока, на которые делится исходная матрица; NB полагается равным 0, если пользователь доверяет выбор его значения этой подпрограмме (входной и выходной параметр, тип целый); |
NPROW - | число строк в решетке процессов (выходной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов (выходной параметр, тип целый); |
Вызываемые подпрограммы: нет
Замечания по использованию
1. | Подпрограмма является последовательной фортранной программой и не использует распределенную память (требуется только один процессор) | |
2. | Используются подпрограммы ICEIL, NUMROC ( из библиотеки ScaLAPACK_TOOLS) |
Необходимо выбрать размер блока NB, число строк и столбцов решетки процессов
(NPROW,NPCOL) и вычислить размер локальной памяти, необходимой для
вычисления всех сингулярных чисел и векторов квадратной матрицы
с помощью подпрограммы PDGESVD2.
Матрица - квадратная порядка 5.
Выделяемое число процессов NPROCS = 4. NB = 0.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tpr_gesvd2.zip)
PROGRAM TPR_GESVD2 * INTEGER M, N, NPROCS, MMIN, NB, NPROW, NPCOL CHARACTER*(*) NAME, SV PARAMETER ( NAME = 'PDGESVD2', SV = 'A' ) EXTERNAL PAR_GESVD2 * M = 5 N = 5 NPROCS = 4 NB=0 * CALL PAR_GESVD2(NAME, M, N, SV, NPROCS, MMIN, NB, NPROW, NPCOL) STOP END Результаты: NB = 4 NPROW = 2 NPCOL = 2 MMIN = 104