Blacs: процессорные сетки, которые не используют все ядра MPI

У меня проблемы со Scalapack, когда процессорные сетки не используют все доступные ядра MPI. Скажите, я знаю сетку для настройки Pc*Pr<=NP

Когда я настраиваю сетку процесса

Cblacs_get(0, 0, &ctxt);
const char *order = ( column_major ? "Col" : "Row" );
Cblacs_gridinit(&ctxt, order, procrows, proccols);
Cblacs_gridinfo( ctxt, &procrows, &proccols, &myrow, &mycol );

Cblacs_gridinfo изменяет размер входной сетки с 2Икс2 в -1Икс-1, В этом случае я тестировал с 11 MPI ядра.

Это само по себе не вызывает никаких ошибок, но когда я пытаюсь настроить дескриптор вектора

int irsrc = 0, icsrc = 0;
descinit_(descA, &M, &N, &Mb, &Nb,&irsrc,&icsrc,&ctxt, &lda, &info);

По процессам с идентификаторами 4-10 я получаю ошибку

{   -1,   -1}:  On entry to DESCINIT parameter number    6 had an illegal value

ВОПРОС:

Как правильно обращаться с ядрами MPI, которых нет в сетке? Должен ли я пропустить все на всех ядрах, для которых

Cblacs_gridinfo( ctxt, &procrows, &proccols, &myrow, &mycol );

возвращенный myrow=mycol=-1? Это часть API?

1

Решение

Если у кого-то нет лучшего источника, второй пост в http://icl.cs.utk.edu/lapack-forum/viewtopic.php?t=139 предоставляет пример C, который вызывает функции ScaLAPACK только для процессов, где

 if ((myrow>-1)&(mycol>-1)&(myrow<nprow)&(mycol<npcol)) {
// do the job
Cblacs_gridexit( 0 );
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]