|
|
|
|
移动端

3.6 HBM上的线程并行

《高性能并行珠玑:多核和众核编程方法》第3章HBM上的SIMD与并发优化,本书中展示了如何在处理器和协处理器上进行并行处理和编程——展示了更好利用Intel Xeon Phi协处理器和Intel Xeon 处理器或其他多核处理器的系统计算潜力的最有效的方法。本节为大家介绍HBM上的线程并行。

作者:张云泉 等译来源:机械工业出版社|2017-11-14 18:14

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

3.6 HBM上的线程并行

在HBM的MPI并行化和OpenMP并行化中,我们假设所描述的表面点和下面列出的遍历方式是固定的,如果没有这个前提我们将面临着计算复杂度问题。但这一假设规定的简化意味着我们现在面临的不再是计算复杂性。这使我们能够同时使用精确算法和启发式方法分别处理离线与在线的线程或任务的负载均衡问题。此外,它允许我们能够在不同的相关测试用例上评估不同的启发式方法。值得强调的是,不管我们采用何种方法均衡,另一种遍历点方法都将强制处理

数据的另一个线程分布。下面是负载均衡问题的定义,图3-7展示了点是如何分配到线程中的。

首先令I = {1, …, m}作为列的索引集合,{w1, …, wm}表示与各列相关的权重,n表示使用的线程/任务数。对于覆盖I的不相交的子区间Ii = {[li:ui]}i = 1,…,n使得向量(c1,…, cn)的开销为:

使用Ci的最大值作为隐藏开销的定义。均衡问题就是要找到一个最大限度减少成本的平均点。

数据结构上面的计算复杂性现在已经转变为公认的整数分割问题,即一个时间复杂度为O (nm2)的精确算法。例如本书中由Skiena(2008)编写的8.5节。对于中等大小n和合理输入数据集的启发式方法是一个典型的贪婪算法,即将列添加到当前线程中,直到总和超过每个线程的平均负载数。作为一种选择,我们必须要考虑到这种情况,这种方法可能会大量重复使用,并且如果这使总和更接近于每个线程的平均负载,那么会只把下一列数据添加到当前线程池中。这两种启发式方法的时间复杂度都为O (n)且都可以作为在线实验的合理候选方法。这将是HBM默认的公平分享版本的替代选择。

巴芬湾的测试用例如图3-8所示,图3-9表示的是负载均衡所面临的挑战。

我们将图3-9中的列拆分为4个部分,目的是为了平均列长度与极端列长度的数据。图中的间隔数字表示列的间隔。

我们试图量化工作负载中的默认启发式方法与图3-10中对于巴芬湾测试用例使用的精确算法之间的差异性。如图3-10所示,以上述两种方法为核心的解决方案非常相似。我们很难从2维或3维的纯负载曲线上找到它们的不同之处。不同的曲线只是表示不同的解决方案而已。由2维曲线可以看出,在这种特殊情况下,使用数据结构思想寻找均衡点的方法可能比使用拆分成子区间的精确算法更好。我们认为在使用较少线程时没必要使用精确算法。比如在Intel Xeon处理器运行只使用了48个线程。

值得注意的是,在定义均衡问题上的权重指的是子权重的总和。同时保留了问题的复杂性。即如果一个点是湿点那么设置权重为1.0,其他地方为0.0。图3-10使用了这种定义方式。另一种定义也可以使用列的个数,比如,通过公式设置权重,其中,表示表面湿点的数量,表示对应的地下湿点的数量,α和β是可调节参数。

通过进行不同的实验测试,我们试图得到这些权重的相关参数并确定最佳均衡位置系数。更多详细信息请见本章参考文献部分。

一旦我们确定了线程间如何拆分的问题,我们应当考虑应用程序将如何使用线程。一般情况下,我们认为实际应用中的OpenMP优化应该与SPMD模式方法相似,而不是与基于按列循环的方法一致。因此,OpenMP并行和MPI并行方法之间非常相似,理想情况下,OpenMP栅栏应该围绕着MPI halo交换使得线程间同步时间最短。当然,这就意味着OpenMP部分非常大,同时在所有循环中所使用的循环与数据结构都是结构化的并统一调用。在NUMA架构中,我们为了提高性能需要明确处理“第一次接触”策略。幸运的是,对于我们方法中的所有变量而言,确保正确的NUMA布局相对容易。图3-11展示了上述部分的代码段。子例程domp_get_domain将为每个线程提供其上限和下限(分别为nu和nl),且可以在初始化时读取分解进行赋值或在第一次调用kh和iw2特定输入模型时产生。然后,任何后续调用domp_get_domain的函数都将在idx数组中查找并将分解结果(nl和nu)传递给当前调用者。这种方法减轻了显式线程作用域的负担。作用域通常在Fortran语言中使用,通过创建作用域可以将所有栈变量变成线程的私有变量。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网络系统开发实例精粹(JSP版)

《网络系统开发实例精粹》以实际的软件开发项目实例介绍贯穿始末,逐层深入的介绍了应用JSP开发Web应用程序的详细过程。全书以深透软件工程...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊