ScaLAPACK中不同大小的块?

时间:2015-07-19 23:47:13

标签: c++ mpi distributed-computing intel-mkl scalapack

我正在使用ScaLAPACK执行使用Intel-MKL的Cholesky分解。我基于此example分配矩阵,其中矩阵以块的形式分布,块大小相等(即Nb x Mb)。我尝试制作它,以便每个块都有它自己的大小,这取决于它属于哪个进程,这样我就可以尝试更多,也许可以获得更好的性能。

请检查此question,以便更好地了解我所说的内容。我不会发布我的代码,因为它太大了(是的,小的例子也太大了,我检查过)并且分发似乎运行良好。但是, ScaLAPACK似乎假设矩阵以相同大小的块分布?

例如,我正在使用它:

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

其中(取自manual):

  

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矩阵没有意义。

1 个答案:

答案 0 :(得分:0)

如回答here,答案是否定的,你不能拥有不同大小的块。