ScaLAPACK

Всем добрый день,

* скажите, пожалуйста, установлена ли в системе библиотека ScaLAPACK?
Если верить странице http://hpc.cmc.msu.ru/bgp/soft ,
то, похоже, что нет. Есть ли возможность поставить ее
штатными методами, или необходимо собирать "на коленке"?
Был ли у кого удачный опыт сборки данной библиотеки самостоятельно?

* также хотелось бы задать еще один вопрос. Какой алгоритм для решения
трехдиагональной системы уравнений вы бы посоветовали, который бы
хорошо работал в следующих условиях:
1. Матрица хранится по строчкам/столбцам на разных вычислительных узлах,
узлы не знают ничего о строчках/стобцах своих соседей.
2. Система не есть система большой размерности (~300-1000)
3. Решение подобных систем вызывается довольно часто
(зависит от конфигурации, но порядка 20000 раз).
4. Количество задействованных узлов при решении (<30)
сейчас подобная задача обходится непараллельным методом, а именно
матрица собирается на всех узлах и решается одновременно. Хотелось
бы посоветоваться, можно ли использовать параллельный алгоритм.

Буду благодарен за любые советы.

Я знаю, что функциональность ScaLAPACK реализована в Parallel ESSL.
Думаю, в доступной на BG/P библиотеке ESSL есть и PESSL.
См. тж. http://hpc.cmc.msu.ru/node/194

Вопрос по поводу трехдиагональной системы понятен мне не до конца.
Матрица просто трехдиагональная или блочно-трехдиагональная?
Матрица хранится как плотная или как разреженная?
Можно ли выполнять решение этих (~20 000) систем параллельно, или, грубо говоря, на каждой итерации алгоритма необходимо решать только одну СЛАУ?

Parallel ESSL распространяется отдельно от ESSL. К тому же, для BG/P PESSL вообще не существует.

ScaLAPACK "на коленке" собрать на BGP вполне возможно. Для лучшей производительности при сборке вместо BLAS надо ему подсунуть ESSL.

To Irina:

Огромное спасибо за информацию. А библиотеку LAPACK вы тоже сами собирали?
ScaLAPACK имеет зависимость как от BLAS, так и от LAPACK.

To Root:
Матрица трехдиагональная.
ситуация такова. Допустим есть двумерный массив, значение которого зависит от времени. На каждом шаге по времени идет цикл по строчкам этого массива. В данной строчке составляется трехдиагональная система размерности равной длине столбцов данного массива.
Пусть A(j), B(j), C(j) - поддиагональ, диагональ и наддиагональ соответствующей системы. Тогда А, B, C есть функции:

/* Идем по строчкам */
FOR I = 1, N
/* Идем по столбцам */
 FOR J = 1, N
     A(j) = FUNCTION(ARRAY(I,J,T))
     B(j) = FUNCTION(ARRAY(I,J,T))
     C(j) = FUNCTION(ARRAY(I,J,T))
 ENDFOR
/* Система составлена, решаем ее */
SOLVE(A, B, C, N)
ENDFOR

Проблема в том что в действительности узел хранит не всю матрицу ARRAY(), а только допустим A(I, JJ1:JJ2, T).
Поэтому сейчас перед такого рода циклами стоит синхронизация массива по столбцам.