Автоматизация доступа к подпрограммам Комплекса

Для упрощения работы пользователей с подпрограммами Комплекса на языке Фортран-77 возникла необходимость разработать и включить в него специальный набор служебных (или управляющих) подпрограмм. Эти подпрограммы можно разделить на два вида.

Во-первых, это подпрограммы, устанавливающие (выбирающие) за пользователя необходимые условия выполнения задачи на многопроцессорной установке (или, по-другому, параметры или режимы распараллеливания задачи).
К ним относятся:

К служебным (управляющим) подпрограммам второго вида относятся подпрограммы, реализующие за пользователя правильное обращение к выбранной подпрограмме Комплекса, избавляя его от необходимости составления надлежащего списка фактических параметров.

Правильное указание некоторых из этих параметров (как, например, векторного дескриптора исходной (глобальной) матрицы) требует от пользователя определенных усилий.

Таким образом эти надстроечные, управляющие подпрограммы позволяют неопытному пользователю использовать возможности качественного программного обеспечения, не вникая в детали (и сложности) расчетов на распределенной памяти.

Подпрограммы расчета параметров (режимов) распараллеливания вычислений
с помощью подпрограмм Комплекса

В настоящее время реализованы и включены в Комплекс 4 такие подпрограммы, которые могут быть использованы при необходимости решения систем линейных алгебраических уравнений с помощью различных целевых подпрограмм Комплекса.
Кроме того в Комплекс включены также 2 подпрограммы расчета параметров, которые могут быть использованы при решении линейной проблемы собственных значений, 2 подпрограммы - при решении обобщенной проблемы собственных значений и 2 подпрограммы - при сингулярном разложении матриц соответствующими целевыми подпрограммами комплекса.

Каждая из первых четырех подпрограмм предназначена для рассчета указанных выше параметров (режимов) при использовании целевых подпрограмм Комплекса, работающих с матрицами системы разных типов: общего вида, симметричных (положительно определенных), ленточных и трехдиагональных.
Из двух следующих подпрограмм одна предназначена для расчета параметров при использовании целевых подпрограмм, вычисляющих только собственные значения, а вторая - при использовании целевых подпрограмм, вычисляющих как собственные значения, так и собственные векторы при решении линейной проблемы собственных значений.
Из двух следующих подпрограмм одна предназначена для расчета параметров при использовании целевых подпрограмм, вычисляющих только собственные значения, а вторая - при использовании целевых подпрограмм, вычисляющих как собственные значения, так и собственные векторы при решении обобщенной проблемы собственных значений.
И, наконец, из двух оставшихся подпрограмм одна предназначена для расчета параметров при использовании целевых подпрограмм, вычисляющих только сингулярные числа, а вторая - при использовании целевых подпрограмм, вычисляющих как сингулярные числа, так и сингулярные векторы при сингулярном разложении матриц

При обращении к этим надстроечным подпрограммам (будем далее называть их "подпрограммами вычисления параметров") пользователь должен задать только следующие параметры:

В результате работы этих подпрограмм будут выданы значения следующих выходных величин:

Величина MMIN зависит от указанных выше других выходных величин (NB, NPROW, NPCOL).

Следует отметить, что параметр NB может быть как входным, так и выходным.
В случае опытного пользователя, достаточно хорошо разбирающегося в используемых блочно-циклических алгоритмах, ему предоставляется возможность самому выбрать и задать размер блока NB. Если же пользователь затрудняется с определением величины NB, ему следует положить NB = 0 при обращении к подпрограмме расчета параметров. После этого подпрограмма сама выдаст одно из подходящих значений NB, хотя возможно не самое лучшее с точки зрения эффективности целевых вычислений.

Величина блока NB, вообще говоря, может быть выбрана любой в пределах 1 < NB < N (где N - порядок матрицы). В настоящее время программы вычисления параметров выдадут неопытному пользователю некоторое приемлемое значение этой величины.

Кроме того, необходимо отметить, что в случаях ленточных и трехдиагональных матриц не выдаются величины NPROW и NPCOL. В этих случаях всегда используется одномерная решетка процессов, т.е. всегда NPROW = 1, а NPCOL = NPROCS, т.е. заданному пользователем числу процессов.

Описания конкретных подпрограмм вычисления параметров приведены в Систематическом каталоге целевых подпрограмм.
В каталоге содержатся: описания каждой из подпрограмм, ее параметров, примера использования, а также гиперссылки на тексты как самой подпрограммы, так и примера ее использования на языке ФОРТРАН-77.

Поясним мнемонику букв в именах подпрограмм вычисления параметров.

Символы SV (7-ой и 8-ой в имени) - означают, что подпрограмма вычисляет параметры для целевых подпрограмм из раздела решения систем линейных алгебраических уравнений.
Символы EV (7-ой и 8-ой) - означают, что подпрограмма вычисляет параметры для целевых подпрограмм из раздела линейной проблемы собственных значений.
Символы GV (7-ой и 8-ой) - означают, что подпрограмма вычисляет параметры для целевых подпрограмм из раздела обощённой проблемы собственных значений.
Символы SVD (7-ой, 8-ой и 9-ый) - означают, что подпрограмма вычисляет параметры для целевых подпрограмм из раздела сингулярного разложения матриц.
Предыдущие два символа (5-ый и 6-ой) означают тип матрицы системы уравнений:

GE - для матриц общего вида;
PO - для матриц симметричных положительно определенных;
BD - для ленточных матриц;
TR - для трехдиагональных матриц.

Тип матрицы для проблемы собственных значений:

SY - для симметричных матриц;
HE - для эрмитовых матриц;

Эти подпрограммы являются обычными последовательными фортранными программами и не используют распределенную память (требуется только один процессор). Это удобно при подборе подходящего варианта вычисляемого набора параметров.

Подпрограммы, автоматизирующие программную реализацию
непосредственно процесса вычисления
с помощью целевых подпрограмм Комплекса

Эти подпрограммы (будем называть их далее "подпрограммами вызова" (целевых подпрограмм)) предполагают, что исходные матрицы и векторы хранятся и считываются из файлов на внешней памяти.

При этом в начале файла должны быть записаны два целых числа, обозначающих число строк (M) и число столбцов (N) в следующей далее матрице (векторе). Идущие далее элементы матрицы должны быть упорядочены по столбцам (как это принято в языке ФОРТРАН).

Предполагается, что кажлая матрица или вектор хранится в отдельном файле (указанной структуры).

Эти подпрограммы вызова выполняют за пользователя чтение исходных (глобальных) матриц (и векторов) из внешних файлов и правильное распределение их частей по параллельным процессам (как этого требуют используемые алгоритмы).

После этого подпрограммы вызова формируют правильные значения фактических параметров для целевых подпрограмм Комплекса и осуществляют правильное обращение к выбранной пользователем целевой подпрограмме (параметр NAME).

Полученные результаты подпрограммы вызова записывают во внешний файл (и выдают на печать).

Таким образом, как видим, подпрограммы вызова избавляют неопытного пользователя от многих хлопот в процессе решения задачи.

В настоящее время реализованы и включены в Комплекс 4 подпрограммы вызова, используемые при решении систем линейных алгебраических уравнений, а также 2 подпрограммы вызова для решения линейной проблемы собственных значений, 2 подпрограммы вызова для решения обобщённой проблемы собственных значений и 2 подпрограммы вызова для сингулярного разложения матриц.

Каждая из первых четырех подпрограмм (как и подпрограммы вычисления параметров) предназначена для вызова целевых подпрограмм, решающих системы с матрицами определенного типа: общего вида, симметричных положительно определенных, ленточных или трехдиагональных.
Из двух следующих подпрограмм одна предназначена для вызова целевых подпрограмм вычисления собственных значений, а другая - для вызова целевых подпрограмм вычисления как собственных значений, так и собственных векторов симметричных матриц при решении линейной проблемы собственных значений.
Из двух следующих подпрограмм одна предназначена для вызова целевых подпрограмм, вычисления собственных значений, а вторая - для вызова целевых подпрограмм вычисления как собственных значений, так и собственных векторов симметричных матриц при решении обобщенной проблемы собственных значений.
И, наконец, из двух оставшихся подпрограмм одна предназначена для вызова целевых подпрограмм, вычисления сингулярных чисел, а вторая - для вызова целевых подпрограмм вычисления как сингулярных чисел, так и сингулярных векторов матриц при сингулярном разложении матриц

Все параметры при обращении к этим подпрограммам вызова являются входными.

Большинство параметров обращения к подпрограммам вызова являются одинаковыми для всех подпрограмм. Ниже укажем их наименование и назначение.

NAME - имя целевой подпрограммы Комплекса, с помощью которой пользователь хочет проводить расчеты;
M - число строк исходной матрицы;
N - число столбцов исходной (или порядок квадратной) матрицы;
NPROW - число строк в решетке процессов, значение которого было выдано пользователю соответствущей подпрограммой вычисления параметров (см. в предыдущем пункте), для ленточных и трехдиагональных матриц равно 1;
NPCOL - число столбцов в решетке процессов, значение которого было выдано пользователю соответствущей подпрограммой вычисления параметров (см. в предыдущем пункте), для ленточных и трехдиагональных матриц равно общему числу процессов NPROCS;
AMEM - адрес массива рабочей памяти, в которую распределяются локальные части исходных матриц и векторов, хранятся элементы рабочих массивов, где формируются локальные части результирующих массивов;
MEMSIZE - задаваемый размер массива AMEM, который должен быть больше или равен значению параметра MMIN, выданному пользователю соответствующей подпрограммой вычисления параметров (см. в предыдущем пункте);
NB - размер блока матрицы, выданный пользователю соответствующей подпрограммой вычисления параметров (или фигурировавший в качестве входного значения при вычислении значений других параметров);
INFILEA - имя файла, содержащего исходную матрицу (A);
INFILEB - имя файла, содержащего исходный вектор правой части (B) при решении системы уравнений или содержащего исходную матрицу (B) при решении обобщённой проблемы собственных значений;
OUTFILE - имя файла, в который в результате работы подпрограммы будут записаны результирующие массивы.

Кроме того часть подпрограмм вызова содержит некоторые параметры, указание которых необходимо только для некоторых целевых подпрограмм Комплекса. В случае необходимости обращения к целевой подпрограмме, не требующей задания некоторого параметра, ему следует присвоить одно из возможных значений соответствующего типа.

Ниже перечислены такие параметры, с указанием их типов и возможных значений.

TRANS - переменная символьного типа, означающая, следует ли решать систему с транспонированной матрицей и принимающая значения 'N' или 'T';
UPLO - переменная символьного типа, означающая, используется нижняя или верхняя треугольная матрица и принимающая значения 'U' или 'L';
BWL - целая переменная, означающая число поддиагоналей ленточной матрицы;
BWU - целая переменная, означающая число наддиагоналей ленточной матрицы.
VL - нижняя граница интервала, в котором ищутся собственные значения и соответствующие собственные векторы;
VU - верхняя граница интервала, в котором ищутся собственные значения и соответствующие собственные векторы;
IL - нижняя граница интервала индексов, в котором ищутся собственные значения и соответствующие собственные векторы;
IU - верхняя граница интервала индексов, в котором ищутся собственные значения и соответствующие собственные векторы; предполагается, что собственные значения располагаются по возрастанию;
ABSTOL - абсолютная точность, с которой должны быть вычислены собственные значения;
ORFAC - определяет, какие собственные векторы должны быть подвергнуты процессу переортогонализации;
SV - переменная символьного типа, означающая, какие сингулярные векторы требуется вычислить (правые, левые или все) и принимающая значения 'R', 'L' или 'A', соответственно;

В случае симметричной ленточной матрицы BWL = BWU, т.е. эти параметры можно положить равными одному и тому же числу равному BW.

В случае трехдиагональных матриц предполагается, что отдельные диагонали хранятся в трех разных файлах с именами INFILED, INFILEDL, INFILEDU, которые передаются соответствующей подпрограмме вызова (CAL_TRSV) вместо имени файла INFILEA.

Описания конкретных подпрограмм вызова, также как и подпрограмм вычисления параметров, приведены в Систематическом каталоге целевых подпрограмм. В нем содержатся: описания каждой из подпрограм, ее параметров, примера использования, а также гиперссылки на тексты как самой подпрограммы, так и примера ее использования на языке ФОРТРАН-77.

Мнемоника букв в именах подпрограмм вызова соответствует описанной в предыдущем пункте для подпрограмм вычисления параметров. Различие состоит в том, что имена подпрограмм вычисления параметров начинаются с букв PAR, а имена подпрограмм вызова начинаются с букв CAL.