在Chapel中的多区域设置程序中,对区域之间的行分布进行细粒度控制



我正试图在Chapel中实现一个SOR,连续过度放松,用于多区域设置的程序,但使用本地内存,所以我想在区域设置之间显式地分配行。我已经将targetlocales重塑为1D,但现在我不确定如何控制区域设置之间的行分布。

我非常习惯MPI,所以我将举一个例子,说明我想根据MPI实现什么。有没有一种方法可以指定我想在区域设置中分配所有数组行,如#rows/#locales中的行,以及最后一个区域设置中的其余行?

我目前在教堂面临的问题是:

  • locale=2模式在locale-1上为5行,在locale-2上为5行将
  • locale=3模式在locale-1上为4行,在locale-2上为3行,在locale-3上为3行将
  • locale=4模式是区域设置上的3行-1,区域设置上2行-2,区域设置3行-3,区域设置4上2行
  • locale=8模式是区域设置上的2行-1,区域设置上1行-2,区域设置-3上1行-4,区域设置-5上2行,区域设置-6上1行-7,区域设置-8上1行。模式随着#区域设置的增加而变化

由于每次实验的数组大小都会有所不同,因此我希望能够控制行分布,因为它是本地内存多区域设置实现的。我将不得不复制回并接收来自相邻位置的行。

作为背景,Chapel语言本身并不规定数组的行在区域设置之间的分布方式;相反,这是域映射的定义——一种用户定义的类型,将域的索引和数组的元素映射到区域设置。作为Chapel标准模块的一部分,当前的Block分发版除了上面描述的默认值之外,目前还没有指定如何进行阻塞的方法。然而,只要努力,就可以编写自己的域映射——或者自定义BlockDist模块——以获得不同的分发。

据我所知,您希望在每个初始区域设置上限(行/区域设置(,然后在最终区域设置上保留其余元素?在我们的GitHub问题页面上作为功能请求提交这将是一件合理的事情。或者,如果你想自己解决这个问题,你可以在Chapel的Gitter频道或邮件列表上寻求帮助(请参阅用户或开发人员资源页面以获取两者的链接(。

最新更新