|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/par_prog/sv/cal_sygv1n.htm
Дата изменения: Sun Oct 13 15:36:38 2013 Дата индексирования: Thu Feb 27 21:24:26 2014 Кодировка: Windows-1251 |
Организация вызова целевой подпрограммы Комплекса для вычисления собственных значений в обобщенной проблеме собственных значений для симметричных матриц и вычисление времени, затраченного на решение задачи
Эта служебная подпрограмма организует за пользователя правильный вызов
целевых программ вычисления собственных значений в обобщенной проблеме
собственных значений одного из трех видов
(1) Аx = lBx ,
(2) АBx = lx или
(3) BАx = lx
для вещественных симметричных матриц. Кроме того она вычисляет время решения
задачи на заданном числе параллельных процессов (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_SYGV1N(IBTYPE, NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE,
NB, VL, VU, IL, IU, ABSTOL, INFILEA, INFILEB, OUTFILE, TFILE, NPRT, CTXT)
Параметры
| IBTYPE - |
определяет вид обобщенной проблемы собственных значений: если IBTYPE = 1 - вид (1); если IBTYPE = 2 - вид (2); если IBTYPE = 3 - вид (3); (входной параметр, тип целый); |
| NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDSYGV1, PDSYGV3, PDSYGV5); (входной параметр, тип символьный); |
| UPLO - | переменная символьного типа, означающая, используется верхний или нижний треугольник матрицы и принимающая значения 'U' или 'L' соответственно (входной параметр); |
| N - | порядок исходной матрицы (входной параметр, тип целый); |
| NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYGV1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYGV1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| AMEM - | массив локальной рабочей памяти, в которую распределяется локальная часть исходной матрицы, хранятся элементы рабочих массивов, где формируются локальные части массива собственных значений (входной параметр, тип DOUBLE PRECISION); |
| MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_SYGV1 (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_SYGV1 (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
| VL - | заданная нижняя граница интервала, в котором ищутся собственные значения при использовании подпрограммы PDSYGV3 (в других случаях положить равной нулю) (входной параметр, тип DOUBLE PRECISION); |
| VU - | заданная верхняя граница интервала, в котором ищутся собственные значения при использовании подпрограммы PDSYGV3 (в других случаях положить равной нулю) (входной параметр, тип DOUBLE PRECISION); |
| IL - |
заданная нижняя граница интервала индексов, в котором
ищутся собственные значения при использовании подпрограммы PDSYGV5
(в других случаях положить равной нулю); предполагается, что собственные значения располагаются по возрастанию; IL ? 1; (входной параметр, тип целый); |
| IU - | заданная верхняя граница интервала индексов, в котором ищутся собственные значения при использовании подпрограммы PDSYGV5 (в других случаях положить равной нулю); предполагается, что собственные значения располагаются по возрастанию; min ( IL, N) ? IU ? N; (входной параметр, тип целый); |
| ABSTOL - |
заданная абсолютная точность, с которой должны быть вычислены
собственные значения (при NAME = 'PDSYGV1' не используется); заданная точность считается достигнутой, если собственное значение лежит в интервале [a, b], ширина которого не превосходит ABSTOL + EPS * MAX ( | a |, | b | ), где EPS - машинная точность; если ABSTOL ? 0, то ABSTOL полагается равным EPS * norm ( D ), где norm ( D ) - первая норма трехдиагональной матрицы, полученной посредством преобразования матрицы A к трехдиагональной форме; собственные значения будут вычислены с наибольшей точностью, если ABSTOL = 2 * PDLAMCH ('S'), где PDLAMCH ('S') = sfmin - минимальное вещественное число, при котором 1 / sfmin не вызывает переполнения; (входной параметр, тип DOUBLE PRECISION); |
| INFILEA - | имя файла, содержащего исходную матрицу (A) либо " "(пробел) (входной параметр, тип символьный); |
| INFILEB - | имя файла, содержащего исходную матрицу (B) либо " "(пробел) (входной параметр, тип символьный); |
| OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий массив собственных значений (входной параметр, тип символьный). |
| TFILE - |
имя файла, в который записывается время, затраченное на решение
задачи при заданном наборе параметров распараллеливания; при обращении к подпрограмме CAL_SYGV1N в цикле с разными наборами параметров распараллеливания в данный файл будут записаны все результаты таймирования, полученные при всех вычислительных экспериментах, выполненных в данном запуске подпрограммы BSTPAR9, инициирующей групповой запуск нескольких вычислительных экспериментов (т.е. нескольких вызовов подпрограммы CAL_SYGV1N с разными наборами параметров) (входной параметр, тип символьный); |
| NPRT - |
режим выдачи результатов вычислительного эксперимента: = 0 - на печать не выдается ничего, кроме минимального времени счета полученного в данном эксперименте и значений параметров распараллеливания, при которых получено это минимальное время; = 1 - на печать выдаются все результаты таймирования ( при всех испытанных в данном групповом запуске наборах параметров распараллеливания ); = 2 - на печать выдается все то же самое, что и при NPRT = 1, а также результаты решения самой задачи целевой программой Комплекса для заданной матрицы; = 3 - на печать выдается все то же самое, что и при NPRT = 2, а также все входные параметры и матрицы (входной параметр, тип целый); |
| CTXT - | значение параметра контекста, соответствующего выбранной решетке процессов (входной параметр, тип целый) |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
|
PDSYGV1 -
PDSYGV3 PDSYGV5 |
вычисление всех собственных значений в обобщенной проблеме
собственных значений для вещественных симметричных матриц
двойной точности; вычисление собственных значений в обобщенной проблеме собственных значений (для вещественных симметричных матриц двойной точности), принадлежащих заданному интервалу; вычисление собственных значений в обобщенной проблеме собственных значений (для вещественных симметричных матриц двойной точности), принадлежащих заданному интервалу индексов соответственно |
|
PDSYEV1 -
PDSYEV3 PDSYEV5 |
вычисление всех собственных значений симметричной матрицы
для вещественных данных двойной точности; вычисление собственных значений симметричной матрицы, принадлежащих заданному интервалу, для вещественных данных двойной точности; вычисление собственных значений симметричной матрицы, принадлежащих заданному интервалу индексов, для вещественных данных двойной точности, соответственно |
|
PDPOTRF - PZPOTRF | Треугольное разложение симметричной (эрмитовой) положительно определенной матрицы методом Холецкого |
|
PDSYTRD - | приведение симметричной матрицы к трехдиагональной форме методом отражений |
|
DSTEQR2 - | вычисление всех собственных значений и, возможно, собственных векторов симметричной трехдиагональной матрицы |
|
PDSYNTRD - | приведение симметричной матрицы к трехдиагональной форме методом отражений |
|
PDSYNGST - | приведение обобщенной проблемы собственных значений к стандартному виду |
| PDSTEBZ - | вычисление собственных значений симметричной трехдиагональной матрицы |
| MINTSYGV1 - | Построение некоторых "стандартных" матриц заданного порядка N и распределение их частей(блоков) по параллельным процессам ( в том случае, если не были заданы файлы с исходными матрицами ) |
Замечания по использованию
| 1. | Используются подпрограммы BLACS_EXIT, BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO BLACS_GRIDINIT, BLACS_PINFO, BLACS_SETUP ( из пакета BLACS в составе MKL-библиотеки), DESCINIT, ICEIL, NUMROC, PDLAPRNT ( из пакета ScaLAPACK(TOOLS) в составе MKL-библиотеки), PDLAREAD, PDLAWRITE, MPI_Wtime() | |
| 2. | Время, затраченное на решение задачи, присваивается переменной time, описанной в общем блоке |
Требуется вычислить время, необходимое для вычисления собственных значений с помощью подпрограммы PDSYGV1.
Матрица системы - порядка 7000. Для решения задачи предполагается использовать 8 процессоров,
образующих решетку 2 * 4.
Матрица делится на блоки 18 * 18 (т.е. NB = 18 )
При предварительном обращении к подпрограмме PAR_SYGV1 с указанными выше параметрами был вычислен
размер локальной памяти, необходимой для решения задачи MMIN = 25119769.
Для вычисления используется "стандартная" матрица, построение и распределение которой по процессам
выполняется служебной подпрораммой MINTSYGV1.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_sygv1n.zip)
PROGRAM TCL_SYGV1N
*
include 'mpif.h'
*
INTEGER CTXT, N, NPROW, NPCOL, NB, NPRT, MEMSIZE,
$ NOUT1, NOUT, NPR, IL, IU, IBTYPE
PARAMETER ( N=7000, NB=18, MEMSIZE= 25200000, NPRT= 1 )
*
DOUBLE PRECISION AMEM( MEMSIZE ), VL, VU, ABSTOL
CHARACTER*(*) NAME, UPLO
CHARACTER INFILEA*(*),INFILEB*(*), OUTFILE*(*),TFILE*(*)
PARAMETER ( NOUT1 = 12, NOUT =13, NPR = 6 )
PARAMETER ( INFILEA = ' ', INFILEB = ' ',
$ OUTFILE = 'cal_sygv1n.res',
$ TFILE = 'cal_sygv1n.tres')
*
PARAMETER ( UPLO = 'U', NAME = 'PDSYGV1')
DOUBLE PRECISION time
COMMON time, J
EXTERNAL CAL_SYGV1N, BLACS_GET, BLACS_GRIDINIT,
$ BLACS_GRIDINFO
*
NPROW = 2
NPCOL = 4
*
VL = 0.D0
VU = 0.D0
IL = 0
IU = 0
ABSTOL = 0.D0
IBTYPE = 1
*
J = 1
*
CALL BLACS_GET( -1, 0, CTXT )
*
CALL BLACS_GRIDINIT( CTXT, 'R', NPROW, NPCOL )
CALL BLACS_GRIDINFO( CTXT, NPROW, NPCOL, MYROW, MYCOL )
*
IF( MYROW.EQ.0 .AND. MYCOL.EQ.0 ) THEN
*
* Открытие файла пользователя для записи результатов таймирования
*
OPEN( NOUT1, FILE = TFILE, STATUS = 'UNKNOWN' )
* Запись в файл имени используемой подпрограммы,
* порядка матрицы, числа процессоров и размера блока
*
WRITE( NOUT1, FMT = 27 ) NAME, N, NPROW*NPCOL, NB
*
END IF
*
IBTYPE = 1
*
CALL CAL_SYGV1N(IBTYPE, NAME, UPLO, N, NPROW, NPCOL, AMEM,
$ MEMSIZE, NB, VL, VU, IL, IU, ABSTOL,
$ INFILEA, INFILEB, OUTFILE, TFILE, NPRT, CTXT)
*
* Выдача на печать и запись в файл времени счета задачи
* и параметров, при котором оно достигнуто
*
IF( MYROW.EQ.0 .AND. MYCOL.EQ.0 ) THEN
WRITE( NPR, FMT = 21 ) NPROW, NPCOL, NB, time
*
WRITE( NOUT1, FMT = 21 ) NPROW, NPCOL, NB, time
*
END IF
*
CLOSE( NOUT1 )
*
CALL BLACS_GRIDEXIT( CTXT )
CALL BLACS_EXIT( 0 )
*
27 FORMAT( /A8,' N = ',I5,' NPROCS = ',I3,' NB = ',I3/)
21 FORMAT( 'время получено для решетки (',I3,','I3,
$ ' ) и NB = ', I3, D14.3/ )
*
STOP
END
*
SUBROUTINE MINTSYGV1( N, A, DESCA, B, DESCB, INFO )
*
* MINTSYGV1 генерирует и распределяет матрицы A и B порядка N
* по решетке процессов (NPROW, NPCOL) для контекста,
* содержащегося в дескрипторах матриц A и B.
* Матрицы A и B симметричные трехдиагональные.
*
* Параметры
INTEGER DESCA( * ), DESCB( * ), N, INFO
DOUBLE PRECISION A( * ), B( * )
*
INTEGER I, J
*
EXTERNAL PDELSET
*
DO 2 J = 1, N
DO 1 I = 1, N
CALL PDELSET( A, I, J, DESCA, 0.0D0 )
CALL PDELSET( B, I, J, DESCB, 0.0D0 )
1 CONTINUE
2 CONTINUE
DO 4 J = 1, N
DO 3 I = 1, N
IF( I.EQ.J ) THEN
CALL PDELSET( A, I, J, DESCA, 2.0D0 )
CALL PDELSET( B, I, J, DESCB, 5.0D0 )
END IF
3 CONTINUE
4 CONTINUE
*
DO 5 I = 1, N-1
J = I + 1
CALL PDELSET( A, I, J, DESCA, 1.0D0 )
CALL PDELSET( B, I, J, DESCB, 1.0D0 )
5 CONTINUE
*
DO 7 J = 1, N-1
I = J + 1
CALL PDELSET( A, I, J, DESCA, 1.0D0 )
CALL PDELSET( B, I, J, DESCB, 1.0D0 )
7 CONTINUE
*
RETURN
END
Результаты:
Время решения задачи time = 0.996D+02
Собственные значения матрицы (в файле OUTFILE)
W = ( 6.71209816 -008 , 2.68483859 -007 , . . . , 0.571428522 , 0.5714285591 )
Добавим, что минимальное время получено для решетки ( 2, 4 ) и NB = 30 time = 0.903D+02