Блоки разных размеров в ScaLAPACK?

Я выполняю факторизацию Холецкого с Intel-MKL, который использует ScaLAPACK. Я распространил матрицу на основе этого примера, где матрица распределена по блокам одинакового размера (т.е. Nb x Mb). Я попытался сделать так, чтобы каждый блок имел свой размер, в зависимости от того, какому процессу он принадлежит, чтобы я мог больше экспериментировать и, возможно, получить лучшую производительность.

Проверьте этот вопрос, чтобы лучше понять что я говорю. Я не буду публиковать свой код, так как он слишком большой (да, второстепенный пример тоже слишком большой, я проверял), и дистрибутив, похоже, работает хорошо. Однако ScaLAPACK, по-видимому, предполагает, что матрица распределена в блоках одинакового размера?

Например, я использую это:

int nrows = numroc_(&N, &Nb, &myrow, &iZERO, &procrows);
int ncols = numroc_(&M, &Mb, &mycol, &iZERO, &proccols);

где (взято из руководства):

NB (глобальный ввод) INTEGER Размер блока, размер блоков, на которые разбита распределенная матрица.

Итак, поддерживает ли ScaLAPACK распределенные матрицы с неравными размерами блоков?


Если я распечатаю такую ​​информацию для матрицы 8x8:

std::cout << Nb << " " << Mb << " " << nrows << " " << ncols << " " << myid << std::endl;

Я получаю это:

3 3 5 5 0
1 1 4 4 1
1 1 4 4 2
1 1 4 4 3

и, просто поменяв местами первые два размера блока, это:

1 1 4 4 0
3 3 5 3 1
1 1 4 4 2
1 1 4 4 3

что не имеет смысла для матрицы 8x8.


person gsamaras    schedule 19.07.2015    source источник


Ответы (1)


Как указано здесь, ответ - нет, у вас не может быть блоков различные размеры.

person gsamaras    schedule 30.07.2015