Блоки разных размеров в 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 позволяет распределенные матрицы с неравными размерами блоков?


Если я печатаю информацию, как это, для матрицы 8×8:

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

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

0

Решение

Как ответили Вот, Ответ: нет, вы не можете иметь блоки разных размеров.

0

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector