小编rws*_*rws的帖子

分布式阵列访问通信成本

我正在Chapel 中完成一种基于分布式存储桶排序的“Terasort Lite”程序,并且我注意到访问块分布式数组时似乎存在重大性能瓶颈。粗略的基准测试显示,Chapel 在 5 个语言环境下完成整个 3.5MB 的处理大约需要 7 秒,而原始的 MPI+C 程序在 5 个进程下大约需要 8.2 毫秒。我的本地计算机有 16 个核心,因此我不需要超额订阅 MPI 即可让 5 个进程正常工作。

要排序的数据被加载到每个区域设置的块分布式数组中,以便每个区域设置均匀(且连续)共享未排序的记录。在 MPI+C 桶排序中,每个进程都会将其记录存储在内存中并对这些本地记录进行排序。为此,我编写了一个支持区域设置的 qsort 实现(基于 C stdlib 实现),这就是我看到极端性能瓶颈的地方。整个桶排序过程引用块分布式数组,并qsort使用本地子域调用:qsort(records[records.localSubdomain()])coforall块和on loc do子句内。

我的主要问题是 Chapel 如何保持分布式数组的一致性,以及跨区域的任何类型的一致性操作是否会影响我的性能。我已经检查过,每个语言环境的qsort调用仅访问其本地子域内的数组索引;我希望这意味着不需要通信,因为每个区域设置仅访问其拥有的域的部分。这是一个合理的期望,还是同时访问分布式数组的私有部分会导致通信开销?

对于上下文,我使用UDP GASNET 通信底层在一台物理机上本地运行,文档指出这预计不会提供良好的性能。尽管如此,我确实计划将代码移动到具有 InfiniBand 的集群,因此我仍然想知道是否应该以不同的方式解决该问题以获得更好的性能。如果有任何其他信息可以帮助回答这个问题,请告诉我。谢谢你!

chapel

4
推荐指数
1
解决办法
243
查看次数

标签 统计

chapel ×1