【问题标题】:Blocks of different sizes in ScaLAPACK?ScaLAPACK 中不同大小的块?
【发布时间】:2015-10-09 00:33:16
【问题描述】:

我正在使用使用 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(全局输入)整数 块大小,分布矩阵的块大小 分成。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-04
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多