在Chapel的多语言环境程序中对区域间行分布的细粒度控制

时间:2018-11-25 04:43:36

标签: chapel

我正在尝试在Chapel中为多语言环境实现SOR(连续松弛)程序,但是要使用本地内存,因此我想在各语言环境中显式分配行。我已经将targetlocales重塑为一维,但是现在我不确定如何控制语言环境中的行分布。

我非常熟悉MPI,因此我将举一个我想根据MPI实现的示例。有没有一种方法可以指定我要在#rows / #locales中分配所有数组行,而其余行在最后一个locales中分配?

我现在在教堂里面临的问题是:

  • 语言环境= 2模式在语言环境中为5行-1,在语言环境中为5行-2
  • locales = 3模式在语言环境中为4行-1,在语言环境中为3行-2,在语言环境中为3行-3
  • 语言环境= 4模式在语言环境中为3行-1,在语言环境中为2行-2,在语言环境中为3行-3,在语言环境中为2行-4
  • 语言环境= 8模式在语言环境中为2行-1,在语言环境中为1行-2,在语言环境中为1行-3,在语言环境中为1行-4,在语言环境中为2行-5,在语言环境中为1行-6,语言环境中的1行-7,语言环境中的1行-8。 模式随着#locales的增加而变化。

由于每个实验的数组大小都会有所不同,因此我希望对行分布进行控制,因为它是本地内存多语言环境的实现。我将不得不复制并接收来自邻近区域的行。

1 个答案:

答案 0 :(得分:3)

作为背景,Chapel语言本身并不指示数组的行如何在语言环境之间分配;相反,它是域映射的定义(一种用户定义的类型,它将域的索引和数组的元素映射到语言环境)。除了上面描述的默认值外,当前属于教堂标准模块的Block distribution目前还没有一种指定阻塞方式的方法。但是,只要花点力气,就可以编写自己的域映射(或自定义BlockDist模块)来获得不同的分布。

据我了解,您想要每个初始语言环境的上限(行/语言环境),然后是最终语言环境的其余元素?将其作为功能请求提交到我们的GitHub issues页上是很合理的。或者,如果您想自己解决问题,可以在Chapel的Gitter频道或邮件列表上寻求帮助,以开始工作(有关两者的链接,请参见userdeveloper resources页面)。