Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/par_prog/org/grid9.htm
Дата изменения: Mon Nov 11 19:19:30 2013 Дата индексирования: Thu Feb 27 20:45:12 2014 Кодировка: Windows-1251 |
Подпрограммы комплекса предназначены прежде всего для выполнения операций над двумерными массивами (матрицами). В целях эффективного распараллеливания таких операций было введено фундаментальное понятие решетки параллельных процессов или просто решетки процессов. Это такая двумерная организация (структура) процессов, которая характеризуется числом строк в решетке (обозначенным NPROW) и числом столбцов (обозначенным NPCOL). Общее число процессов, используемых для решения задачи, составляет NP = NPROW * NPCOL. При этом каждый процесс идентифицируется парой координат (целых чисел) в этой решетке процессов. В подпрограммах их принято обозначать идентификаторами: MYROW - номер строки в решетке и MYCOL - номер столбца в решетке.
До того как обратиться к одной из подпрограмм, предназначенной для решения системы линейных алгебраических уравнений, пользователю необходимо:
- задать конкретную решетку процессов (т.е. задать значения NPROW и NPCOL), - разделить матрицу системы A на блоки (размера MB * NB ) и распределить эти блоки по всем процессам решетки, - аналогичную процедуру необходимо проделать и с вектором (матрицей) правых частей системы B, разделив его (ее) на блоки (размера NB * NBRHS) и также распределив по процессам выбранной решетки.
После этого пользователь может вызвать одну из подпрограмм комплекса, передав ей через параметры всю информацию об исходных матрицах системы уравнений, а также о том, как распределены их элементы в локальную память каждого из процессов решетки.
После выполнения необходимых вычислений пользователю рекомендуется освободить использованную решетку процессов и осуществить выход из головной программы, обратившись к специальной подпрограмме пакета BLACS.
Ниже более подробно описывается указанная последовательность действий.
Как уже говорилось в разделе документации "Общее описание назначения, организации и структуры комплекса", все действия, связанные с параллельными процессами, выполняются посредством обращения к подпрограммам пакета BLACS.
После присвоения конкретных значений параметрам решетки NPROW и NPCOL инициализация решетки проще всего производится посредством обращения к подпрограмме SL_INIT из библиотеки ScaLAPACK_TOOLS (библиотеки служебных подпрограмм ScaLAPACK'а). Однако подпрограмма SL_INIT сама состоит из обращений к подпрограммам пакета BLACS (для получения ее текста надавите ссылку SL_INIT.f ).
Эта подпрограмма инициализирует решетку процессов, упорядочивая процессы по строкам и присваивает служебному параметру ICTXT некоторое целое значение. Этот параметр, называемый системным контекстом или контекстом BLACS'а или просто контекстом, однозначно специфицирует выбранную решетку процессов. Работая с выбранной решеткой процессов, пользователь не имеет права менять значение параметра ICTXT. Он должен только передавать ICTXT в качестве входного параметра при обращении к любой другой подпрограмме пакета BLACS, а также указывать в качестве элемента дескрипторов глобальных матриц (см. в разделе документации "Дескрипторы глобальных массивов").
После спецификации контекста пользователю чаще всего может потребоваться определить координаты процесса, на котором выполняется данный экземпляр программы ( MYROW, MYCOL ). Это выполняется посредством обращения к подпрограмме BLACS_GRIDINFO. Типичный фрагмент программы, выполняющий эти задачи выглядит следующим образом:
CALL SL_INIT ( ICTXT, NPROW, NPCOL ) CALL BLACS_GRIDINFO ( ICTXT, NPROW, NPCOL, MYROW, MYCOL ) , где в SL_INIT : ICTXT - специфицирует контекст BLACS'а, идентифицирующий созданную решетку процессов (глобальный выходной параметр, тип целый) NPROW - специфицирует число строк в создаваемой решетке процессов (глобальный входной параметр, тип целый) NPCOL - специфицирует число столбцов в создаваемой решетке процессов (глобальный входной параметр, тип целый)
Поскольку каждый процесс производит операции над своей частью исходной (глобальной) матрицы, до обращения к подпрограммам комплекса необходимо распределить матрицу системы уравнений A и вектор (матрицу) правых частей B по решетке процессов. Это является обязанностью пользователя (подробности этого процесса описаны в разделе документации "Разбиение на блоки и распределение исходных матриц в локальной памяти параллельных процессов").
При этом каждой глобальной матрице, распределенной по решетке процессов, должен быть приписан дескриптор, содержащий информацию о том, как именно было произведено это распределение. Дескриптор представляет из себя одномерный массив из 9 или 7 элементов целого типа. Подробное описание дескрипторов можно найти в разделе документации "Дескрипторы глобальных массивов". Здесь мы покажем лишь как инициализировать дескриптор матрицы A ( DESCA ) и дескриптор матрицы (вектора) правых частей B ( DESCB ).
Если матрица A - плотная, то проще всего можно инициализировать эти дескрипторы посредством обращения к подпрограмме из библиотеки ScaLAPACK_TOOLS, называемой DESCINIT. Текст этой подпрограммы можно получить, надавив на ссылку DESCINIT.f.
Ниже приводятся обращения к этой подпрограмме при инициализации дескрипторов DESCA и DESCB. Подобные обращения можно найти в текстах тестовых примеров к подпрограммам решения системы уравнений с плотными матрицами ( TDGESV1.zip, TPDPOSV.zip ).
CALL DESCINIT ( DESCA, M, N, MB, NB, RSRC, CSRC, ICTXT, MXLLDA, INFO) CALL DESCINIT ( DESCB, N, NRHS, NB, NBRHS, RSRC, CSRC, ICTXT, MXLLDB, INFO)
Эти два вызова подпрограммы DESCINIT эквивалентны следующим операторам присваивания:
DESCA(1) = 1 DESCA(2) = ICTXT DESCA(3) = M DESCA(4) = N DESCA(5) = MB DESCA(6) = NB DESCA(7) = RSRC DESCA(8) = CSRC DESCA(9) = MXLLDA DESCB(1) = 1 DESCB(2) = ICTXT DESCB(3) = N DESCB(4) = NRHS DESCB(5) = NB DESCB(6) = NBRHS DESCB(7) = RSRC DESCA(8) = CSRC DESCA(9) = MXLLDB
Здесь первый элемент обозначает тип дескриптора, второй - обсуждавшийся выше служебный параметр подпрограмм BLACS'а (контекст).
M, N - | число строк и столбцов матрицы A ( M * N ); |
N, NRHS - | число строк и столбцов матрицы B ( N * NRHS ); если B - вектор, NRHS = 1; |
MB, NB - | число строк и столбцов блоков, на которые разбивается матрица A; |
NB, - NBRHS | число строк и столбцов блоков, на которые разбивается матрица B; |
RSRC, - CSRC | координаты процесса, куда размещается пользователем первый элемент глобальной матрицы; |
MXLLDA, - MXLLDB | ведущие локальные размерности матриц A и B (см. разделы документации "Дескрипторы глобальных массивов" и "Схема размещения в локальной памяти и блочно - циклическое отображение плотных матриц" ). |
Самые простые способы отображения глобальной матрицы на решетку процессов можно найти в тестовых примерах к подпрограммам решения систем как с плотными, так и с ленточными матрицами (см., например, TDGESV1.zip, TPDDBSV.zip ). В них эти действия выполняются в подпрограмме с именем MATINIT, которая является частью тестового примера, но в каждом тесте, естественно, имеет свое содержание.
После того как необходимые вычисления на решетке процессов были завершены, рекомендуется освободить решетку процессов посредством вызова подпрограммы BLACS_GRIDEXIT. Когда завершены все вычисления, выход из программы должен быть осуществлен посредством обращения к подпрограмме BLACS_EXIT.
Типичный пример фрагмента программы, включающий эти действия:
CALL BLACS_GRIDEXIT ( ICTXT ) CALL BLACS_EXIT (0)