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