Организация вызова целевой подпрограммы Комплекса для решения систем линейных алгебраических уравнений с невырожденными матрицами общего вида и вычисление времени, затраченного на решение задачи
Эта служебная подпрограмма организует за пользователя правильный вызов
целевой подпрограммы решения систем линейных алгебраических
уравнений с невырожденными матрицами общего вида и вычисляет время решения
задачи на заданном числе параллельных процессов (NPROCS) с матрицей заданного
порядка (N) и при заданных параметрах распараллеливания (NPROW, NPCOL, NB ).
Сначала она либо считывает из внешних файлов, заданные пользователем исходную
матрицу системы и вектор (матрицу) правой части, либо строит некую "стандартную"
матрицу и вектор порядка N; распределяет их части(блоки) по параллельным
процессам в соответствии с используемыми алгоритмами и формирует правильный список
фактических параметров для выбранной пользователем целевой подпрограммы.
После этого осуществляет вызов и счет по этой подпрограмме, вычисляя при этом время,
прошедшее с момента обращения к подпрограмме до момента выхода из неё. Полученный вектор
решения задачи записывается во внешний файл.
Литература:
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_GESVN( NAME, TRANS, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, INFILEA, INFILEB, OUTFILE, TFILE, NPRT, CTXT )
Параметры
NAME - | имя целевой подпрограммы, при применении которой для решения задачи вычисляется время, затраченное на ее решение (одно из PDGESV, PDGESV1, PDGESV2, PDGESV3); (входной параметр, тип символьный); |
TRANS - | переменная символьного типа, означающая, следует ли решать систему с транспонированной матрицей и принимающая значения 'N' или 'T' (входной параметр); |
N - | порядок исходной матрицы системы, при котором вычисляется время, затраченное на решение задачи (входной параметр, тип целый); |
NPROW - | число строк в решетке процессов, для которой измеряется время на решение задачи (входной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов, для которой и измеряется время на решение задачи (входной параметр, тип целый); |
AMEM - | массив локальной рабочей памяти, в которую распределяются локальные части исходных матриц и векторов системы, хранятся элементы рабочих массивов, где формируются локальные части вектора решений системы; (входной параметр, тип DOUBLE PRECISION); |
MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_GESV при задании ей набора параметров распараллеливания, при которых измеряется время, затраченное на решение задачи (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NB - | размер блока матрицы, при котором измеряется время на решение задачи (входной параметр, тип целый); |
INFILEA - | имя файла, содержащего исходную матрицу системы (A), либо " "(пробел); в последнем случае будет использована некая "стандартная" матрица заданного порядка (входной параметр, тип символьный); |
INFILEB - | имя файла, содержащего исходный вектор правой части системы (B), либо " "(пробел); в последнем случае будет использован некий "стандартный" вектор заданного порядка (входной параметр, тип символьный); |
OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий вектор (X) (входной параметр, тип символьный); |
TFILE - |
имя файла, в который записывается время, затраченное на решение
задачи при заданном наборе параметров распараллеливания; при обращении к подпрограмме CAL_GESVN в цикле с разными наборами параметров распараллеливания в данный файл будут записаны все результаты таймирования, полученные при всех вычислительных экспериментах, выполненных в данном запуске подпрограммы BSTPAR9, инициирующей групповой запуск нескольких вычислительных экспериментов (т.е. нескольких вызовов подпрограммы CAL_GESVN с разными наборами параметров) (входной параметр, тип символьный); |
NPRT - |
режим выдачи результатов вычислительного эксперимента: = 0 - на печать не выдается ничего, кроме минимального времени счета полученного в данном эксперименте и значений параметров распараллеливания, при которых получено это минимальное время; = 1 - на печать выдаются все результаты таймирования ( при всех испытанных в данном групповом запуске наборах параметров распараллеливания ); = 2 - на печать выдается все то же самое, что и при NPRT = 1, а также результаты решения самой задачи целевой программой Комплекса для заданной матрицы; = 3 - на печать выдается все то же самое, что и при NPRT = 2, а также все входные параметры и матрицы (входной параметр, тип целый); |
CTXT - | значение параметра контекста, соответствующего выбранной решетке процессов (входной параметр, тип целый) |
Версии
CAZ_GESVN - | Организация вызова целевой программы Комплекса для решения систем линейных алгебраических уравнений с невырожденными комплексными матрицами общего вида и вычисление времени, затраченного на решение задачи |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
PDGESV - PZGESV PDGESV1 PZGESV1 PDGESV2 PZGESV2 PDGESV3 PZGESV3 |
решение системы A X = B с матрицей общего вида методом Гаусса
с выбором ведущего элемента по столбцу для вещественных и комплексных
данных двойной точности или решение системы A X = B или AT X = B с матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для вещественных и комплексных данных двойной точности или решение системы A X = B или AT X = B с матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для вещественных и комплексных данных двойной точности и оценка обратного числа обусловленности, или решение системы A X = B или AT X = B с матрицей общего вида методом Гаусса с выбором ведущего элемента по столбцу для вещественных и комплексных данных двойной точности с итерационным уточнением решения и оценкой границ ошибок соответственно |
PDGETRF - PZGETRF | LU - разложение матрицы общего вида методом Гаусса с выбором ведущего элемента по столбцу |
PDGETRS - PZGETRS | Решение системы AX = B, AT X = B или AH X = B на основе LU - разложения, полученного подпрограммой PDGETRF(PZGETRF) |
PDGECON - PZGECON | Оценка обратного числа обусловленности матрицы общего вида |
PDGERFS - PZGERFS | Выполнение итерационного уточнения решения системы A X = B, AT X = B или AH X = B, полученного подпрограммой PDGETRS (PZGETRS), и оценка границ ошибок полученного решения |
MINTGESV - MINTZGESV | Построение некоторой "стандартной"(вещественной или комплексной) матрицы системы и вектора правой части заданного порядка N и распределение их частей(блоков) по параллельным процессам ( в том случае, если не были заданы файлы с исходными матрицей и вектором ) |
Замечания по использованию
1. | Используются подпрограммы BLACS_EXIT, BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO BLACS_GRIDINIT, BLACS_PINFO, BLACS_SETUP ( из пакета BLACS в составе MKL-библиотеки), DESCINIT, ICEIL, NUMROC, PDLAPRNT, PZLAPRNT ( из пакета ScaLAPACK(TOOLS) в составе MKL-библиотеки), PDLAREAD, PDLAWRITE, MPI_Wtime() | |
2. | Время, затраченное на решение задачи, присваивается переменной time, описанной в общем блоке | |
3. | В версии подпрограммы CAZ_GESVN параметр AMEM имеет тип DOUBLE COMPLEX |
Требуется вычислить время, необходимое для решения системы уравнений с помощью подпрограммы PDGESV.
Матрица системы - порядка 7000. Для решения задачи предполагается использовать 8 процессоров,
образующих решетку 2 * 4.
Матрица делится на блоки 254 * 254 (т.е. NB = 254 )
При предварительном обращении к подпрограмме PAR_GESV с указанными выше параметрами был вычислен
максимальный размер локальной памяти, необходимой для решения задачи MMIN = 6333237.
Для вычисления используется "стандартная" матрица, построение и распределение которой по процессам
выполняется служебной подпрораммой MINTGESV.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_gesvn.zip)
PROGRAM TCL_GESVN include 'mpif.h' INTEGER CTXT, N, NPROW, NPCOL, NB, NPRT, MEMSIZE PARAMETER ( N=7000, NB=254, MEMSIZE=6333300, NPRT= 1 ) * DOUBLE PRECISION AMEM( MEMSIZE ) CHARACTER*(*) NAME, TRANS CHARACTER INFILEA*(*), INFILEB*(*), OUTFILE*(*), TFILE*(*) PARAMETER ( INFILEA = ' ', INFILEB = ' ', $ OUTFILE = 'BSTPARRES', $ TFILE = 'BSTRES') * PARAMETER ( TRANS = 'N', $ NAME = 'PDGESV') COMMON time, J EXTERNAL CAL_GESVN, BLACS_GET, BLACS_GRIDINIT, BLACS_GRIDINFO * NPROW = 2 NPCOL = 4 * J = 1 * CALL BLACS_GET( -1, 0, CTXT ) * CALL BLACS_GRIDINIT( CTXT, 'R', NPROW, NPCOL ) CALL BLACS_GRIDINFO( CTXT, NPROW, NPCOL, MYROW, MYCOL ) * CALL CAL_GESVN(NAME, TRANS, N, NPROW, NPCOL, AMEM, MEMSIZE, $ NB, INFILEA, INFILEB, OUTFILE, TFILE, NPRT, CTXT ) * STOP END Результаты: Время решения задачи time = 0.534D+01 Решение системы (в файле OUTFILE) X = ( 1.D0, 2.D0, 3.D0, . . . . . . . . . 6999.D0, 7000.D0 ) Добавим, что минимальное время получено для решетки ( 2, 4 ) и NB = 18 time = 0.402D+01