处理器子集上的不相交网格及其在Scalapack中的通信

时间:2011-03-18 21:37:59

标签: c parallel-processing mpi lapack blas

1 个答案:

答案 0 :(得分:2)

我在尝试弄清楚如何使用PDGEMR2D方面遇到了类似的困难,并且我认为我会在这里分享我的结论。

简而言之,如果您尝试设置多个上下文,请不要使用提供的DESCINIT子例程。它的错误检查假定所有进程都参与了初始化数组描述符的上下文,如果您尝试使用PDGEMR2D则不是这种情况。

您可以在不使用DESCINIT的情况下轻松初始化自己的描述符,因为它只是一个长度为9的整数数组。前8个字段(dtype,ctxt,m,n,mb,nb,csrc和rsrc)是全局的,并且应该在所有进程中具有相同的值。只有第9个字段(lld)是本地的,并且在不是定义数组的上下文成员的进程中忽略其值。

ScaLAPACK源代码中的示例程序pdgemrdrv.c(在线版here)对我来说非常有用,当时我试图弄清楚这些东西。它包含许多不必要的复杂功能,但您可以推断出以下要点:

  1. 应该全局初始化数组描述符(在发送和接收上下文中)。
  2. 只需在阵列所在的上下文中分配数组的内存。
  3. 应全局调用PDGEMR2D(在发送和接收上下文中)。只有作为发送或接收上下文成员的进程才会真正参与。
  4. 希望这会有所帮助。欢呼声。