Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/par_prog/sv/cal_syev1n.htm
Дата изменения: Mon Oct 21 15:46:18 2013 Дата индексирования: Thu Feb 27 21:27:16 2014 Кодировка: Windows-1251 |
Организация вызова целевой подпрограммы Комплекса для вычисления собственных значений симметричной матрицы и вычисление времени, затраченного на решение задачи
Эта служебная подпрограмма организует за пользователя правильный вызов целевых подпрограмм вычисления собственных значений симметричной матрицы и вычисляет время решения задачи на заданном числе параллельных процессов (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_SYEV1N(NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, NB, VL, VU, IL, IU, ABSTOL, INFILEA, OUTFILE, TFILE, NPRT, CTXT )
Параметры
NAME - | имя целевой подпрограммы, с помощью которой пользователь собирается решать свою задачу (одно из PDSYEV1, PDSYEV3, PDSYEV5); (входной параметр, тип символьный); |
UPLO - | переменная символьного типа, означающая, используется верхний или нижний треугольник матрицы и принимающая значения 'U' или 'L' соответственно (входной параметр); |
N - | порядок исходной матрицы (входной параметр, тип целый); |
NPROW - | число строк в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYEV1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NPCOL - | число столбцов в решетке процессов, которое было выдано пользователю соответствущей подпрограммой вычисления параметров PAR_SYEV1(см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
AMEM - | массив локальной рабочей памяти, в которую распределяется локальная часть исходной матрицы, хранятся элементы рабочих массивов, где формируются локальные части массива собственных значений (входной параметр, тип DOUBLE PRECISION); |
MEMSIZE - | задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров PAR_SYEV1 (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
NB - | размер блока, матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров PAR_SYEV1 (или фигурировавший в качестве входного значения при вычислении значений других параметров) (см.Автоматизация доступа к подпрограммам Комплекса (входной параметр, тип целый); |
VL - | заданная нижняя граница интервала, в котором ищутся собственные значения при использовании подпрограммы PDSYEV3 (в других случаях положить равной нулю) (входной параметр, тип DOUBLE PRECISION); |
VU - | заданная верхняя граница интервала, в котором ищутся собственные значения при использовании подпрограммы PDSYEV3 (в других случаях положить равной нулю) (входной параметр, тип DOUBLE PRECISION); |
IL - |
заданная нижняя граница интервала индексов, в котором
ищутся собственные значения при использовании подпрограммы PDSYEV5
(в других случаях положить равной нулю); предполагается, что собственные значения располагаются по возрастанию; IL ? 1; (входной параметр, тип целый); |
IU - | заданная верхняя граница интервала индексов, в котором ищутся собственные значения при использовании подпрограммы PDSYEV5 (в других случаях положить равной нулю); предполагается, что собственные значения располагаются по возрастанию; min ( IL, N) ? IU ? N; (входной параметр, тип целый); |
ABSTOL - |
заданная абсолютная точность, с которой должны быть вычислены
собственные значения (при NAME = 'PDSYEV1' не используется); заданная точность считается достигнутой, если собственное значение лежит в интервале [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) (входной параметр, тип символьный); |
OUTFILE - | имя файла, в который в результате работы подпрограммы будет записан результирующий массив собственных значений (входной параметр, тип символьный). |
TFILE - |
имя файла, в который записывается время, затраченное на решение
задачи при заданном наборе параметров распараллеливания; при обращении к подпрограмме CAL_SYEV1N в цикле с разными наборами параметров распараллеливания в данный файл будут записаны все результаты таймирования, полученные при всех вычислительных экспериментах, выполненных в данном запуске подпрограммы BSTPAR9, инициирующей групповой запуск нескольких вычислительных экспериментов (т.е. нескольких вызовов подпрограммы CAL_SYEV1N с разными наборами параметров) (входной параметр, тип символьный); |
NPRT - |
режим выдачи результатов вычислительного эксперимента: = 0 - на печать не выдается ничего, кроме минимального времени счета полученного в данном эксперименте и значений параметров распараллеливания, при которых получено это минимальное время; = 1 - на печать выдаются все результаты таймирования ( при всех испытанных в данном групповом запуске наборах параметров распараллеливания ); = 2 - на печать выдается все то же самое, что и при NPRT = 1, а также результаты решения самой задачи целевой программой Комплекса для заданной матрицы; = 3 - на печать выдается все то же самое, что и при NPRT = 2, а также все входные параметры и матрицы (входной параметр, тип целый); |
CTXT - | значение параметра контекста, соответствующего выбранной решетке процессов (входной параметр, тип целый) |
Вызываемые подпрограммы
Здесь указаны только целевые (1 - ого уровня) и базовые подпрограммы (2 - ого уровня), которые вызываются из целевых подпрограмм.
PDSYEV1 -
PDSYEV3 PDSYEV5 |
вычисление всех собственных значений симметричной матрицы
для вещественных данных двойной точности; вычисление собственных значений симметричной матрицы, принадлежащих заданному интервалу, для вещественных данных двойной точности; вычисление собственных значений симметричной матрицы, принадлежащих заданному интервалу индексов, для вещественных данных двойной точности, соответственно |
PDSYTRD - | приведение симметричной матрицы к трехдиагональной форме методом отражений |
DSTEQR2 - | вычисление всех собственных значений и, возможно, собственных векторов симметричной трехдиагональной матрицы |
PDSYNTRD - | приведение симметричной матрицы к трехдиагональной форме методом отражений |
PDSTEBZ - | вычисление собственных значений симметричной трехдиагональной матрицы |
MINTSYEV1 - | Построение некоторой "стандартной" матрицы заданного порядка 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, описанной в общем блоке |
Требуется вычислить время, необходимое для вычисления собственных значений с помощью подпрограммы PDSYEV1.
При этом матрица - порядка 7000. Для решения задачи предполагается использовать 8 процессоров,
образующих решетку 2 * 4.
Матрица делится на блоки 254 * 254 (т.е. NB = 254 )
При предварительном обращении к подпрограмме PAR_SYEV1 с указанными выше параметрами был вычислен
максимальный размер локальной памяти, необходимой для решения задачи MMIN = 7271604.
Для вычисления используется "стандартная" матрица, построение и распределение которой по процессам
выполняется служебной подпрораммой MINTSYEV1.
Фрагмент фортранного текста вызывающей программы
(полный текст теста можно получить в
tcl_syev1n.zip)
PROGRAM TCL_SYEV1N * include 'mpif.h' INTEGER CTXT, N, NPROW, NPCOL, NB, NPRT, MEMSIZE, IL, IU DOUBLE PRECISION VL, VU, ABSTOL * PARAMETER ( N=7000, NB=254, MEMSIZE=7300000, NPRT= 1 ) * DOUBLE PRECISION AMEM( MEMSIZE ) CHARACTER*(*) NAME, UPLO CHARACTER INFILEA*(*), INFILEB*(*), OUTFILE*(*), TFILE*(*) PARAMETER ( INFILEA = ' ', INFILEB = ' ', $ OUTFILE = 'BSTPARRES', $ TFILE = 'BSTRES') * PARAMETER ( UPLO = 'U', $ NAME = 'PDSYEV1') COMMON time, J EXTERNAL CAL_SYEV1N, BLACS_GET, BLACS_GRIDINIT, BLACS_GRIDINFO * NPROW = 2 NPCOL = 4 * VL = 0.D0 VU = 0.D0 IL = 0 IU = 0 * 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_SYEV1N(NAME, UPLO, N, NPROW, NPCOL, AMEM, MEMSIZE, $ NB, VL, VU, IL, IU, ABSTOL, INFILEA, OUTFILE, TFILE, NPRT, CTXT ) * STOP END Результаты: Время решения задачи time = 0.117D+03 Собственные значения матрицы (в файле OUTFILE) W = ( -334613.505921450D0, 1.D0, 1.D0, . . . . . . . . . 1.D0, 341614.505921450D0 ) Добавим, что минимальное время получено для решетки ( 2, 4 ) и NB = 30 time = 0.724D+02