我正在使用Intel执行Cholesky分解,它使用ScaLAPACK。我在这个示例的基础上分配了矩阵,其中矩阵是以块的形式分布的,这些块大小相等(即Nb )。我试着制作它,这样每个块都有自己的大小,这取决于它属于哪个进程,这样我就可以进行更多的实验,并获得更好的性能。
检查这个问题,以便更好地理解我在说什么。我不会发布我的代码,因为它太大了(是的,次要的例子也太大了,我检查过了),而且发行版似乎运行得很好。然而,ScaLAPACK似乎假定矩阵分布在大小相等的块中?
例如,我使用的是:
int nrows = numroc_(&N, &Nb, &myrow, &iZERO, &procrows);
int ncols = numroc_(&M, &Mb, &mycol, &iZERO, &proccols);其中(摘自手册):
NB (全局输入)整数块大小,块的大小分布矩阵被分割成。
那么, 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矩阵来说,这是没有意义的。
发布于 2015-07-30 20:38:21
正如回答这里一样,答案是否定的,你不能有不同大小的块。
https://stackoverflow.com/questions/31507135
复制相似问题