Маленькие матрицы в ScaLAPACK: как работать с пустыми блоками - PullRequest
1 голос
/ 15 апреля 2019

У меня есть большая матрица, описывающая физическую систему.Последние два ряда принципиально отличаются от других и поэтому должны быть настроены отдельно.Кроме того, нет смысла распределять каждую из этих строк по разным процессам.Я хочу установить две строки в 0-м процессе и затем скопировать их в глобальную матрицу.

Что у меня есть?- Распределенная матрица M x N, где верхний блок (M-2) x N уже заполнен.

Что я хочу сделать?- Рассчитайте последние 2 x N элементов в 0-м процессе, а затем скопируйте их с помощью PDGEMR2D

В чем проблема?- Мне нужно позвонить PDGEMR2D на все процессы.Матрица, подлежащая копированию (я думаю, она обычно называется a), поэтому должна быть выделена и иметь дескриптор скальпак для всех процессов.На 0-м процессе локальная матрица равна 2 x N, на всех остальных процессах - 0 x N.

Как мне работать с пустыми подматрицами? Обычно, чтобы получить скальпакдескрипторы я бы назвал descinit с локальным номером строк LLD.Однако это число должно быть> = 1, но в процессах с пустыми матрицами оно равно 0.

(Обратите внимание, что fortran позволяет распределять массивы по 0 элементам - это чисто проблема ScaLAPACK.)

...