|
|
51CTO旗下网站
|
|
移动端

3.5 数据结构:准确定位位置

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

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

【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道

3.5 数据结构:准确定位位置

作者认为只有在以数据近邻为重点的应用上才能获得基于最新硬件的良好SIMD与线程优化性能。位置,位置,位置……是的,一切都与位置相关,本节将描述整个HBM模型中的面向数据设计方法。

如图3-2所示,我们将3D网格上的点分为活跃计算点(即湿点,陆地上或海平面以下的网格点)和非活跃计算点(在陆地或海平面以下的网格点)。图3-3展示了一个典型的浅水域。我们发现规则3D网格内的活跃计算点数量远少于总计算点数量。例如,图3-3所示的区域中只有11.1%的点是活跃计算点。因此计算模型使用的所有矩阵非常稀疏,这就表明在HBM中应当使用存储量更小、数据更加密集的稀疏结构。我们使用三个数组msrf(0:,0:)、mcol(0:)和kh(0:)分别表示水平面湿点的索引、列中第一个地下点的索引和列的最终长度进行压缩存储。水平面索引数组将水平面网格点(i,j)转换为对应的湿点索引。如果(i,j)点在陆地或海平面以下则返回0值。地表索引号为iw的列索引由mcol(iw)函数定义,且mcol(0)返回0值。同样,地表索引iw的列长度由kh(iw)函数定义,且kh(0)返回0值。图3-4中的代码展示了3维矩阵u(:)上所有湿点的循环过程。我们可以发现msrf(0:,0:)从湿点到网格位置(i,j)的反向转换过程是由ind(1:2,:)确定的。

图3-5展示了我们在1维数据结构中划分的三种类型点。该部分代码在水平柱状网格上运行。我们在水平方向上使用间接寻址方式的目的是映射由msrf(i,j)得到的列的置换。注意,这里的置换是由一个非结构化的(i,j)列来描述的,而不是每列的数据。合理分配数据能够提升应用在表面点和垂直穿过的地下点的直接寻址方式的数据紧密程度。

从图3-4的代码段中可以看出,重组数据能够使按列进行独立量化处理的循环操作具有一个完美的跨度减1访问模式。但是我们同时也要考虑以下两个方面。首先,由于使用了类似于有限差分的方法,HBM模型可看作一个9点stencil计算模型。因此一些循环过程不仅要处理实际点,还要处理它的东、西、南、北、东北、东南、西北和西南方向上的邻居网格点数据。所以处理列的确定位置(i,g)时,还需要访问邻居元素的数据且使用合适的数据分布方式以保持2维空间转换至1维空间上的位置关系。其次,HBM模型需要处理整个湿点集合,而不只是一列数据,所以列的遍历方式也是非常重要的一方面。

表面点的任何遍历方式都可以用基本方法实现。事实上,任何一种遍历法最终都能找到最佳临界点。每种遍历方法都会分配一个独特的缓存模式(D1、L2、L3和TLB)且有些遍历方法要比其他方法好。假设我们能够在三个索引数组数据集上使用大小、延迟、排他性和包容性类型描述目标计算机的存储系统,那么我们将如何调整基本的遍历方式以获得最优的临近点呢?

作为一个说明性例子,我们将展示两种不同的启发式遍历法H1和H2。H1的遍历方法是从上层的西北角开始,然后从北向南遍历,一旦完成了南方的大部分坐标,然后向东移动一格并再次从北向南计数,以此类推,直至到达东南角的点。在一个真实情形(巴芬湾的数据集,2海里范围,分辨率为77285表面点和7136949地下点)下,使用这种方法遍历的结果如图3-6所示。图3-6说明了该数据集在给定索引距离为1~10的空间内邻居的8个在地理位置最近的湿点中有多少个能够成为近邻。

基于9点stencil的计算模型使用启发式H2能够提高D1利用率。为了找到最佳邻近点,我们让网格单元在索引遍历中尽可能接近邻居单元。如果我们能够在矩形或立方体上保证这些,我们将更进一步完成使用空间填充曲线的任务。在一个如图3-3或图3-8这样的不规则数据集上提出一个正确的解决方案非常具有挑战性。

图3-6清晰地显示了使用H2方法使得stencil邻居单元的较大部分(第1、4行)在索引空间中距离更近。然而,这种遍历方法是有代价的且索引空间上距离为10以外的点与stencil中心(第2、3行)的距离更大。在H1方法中,没有被D1命中的邻居点可能会在L2或L3中命中,而在H2方法中它们的距离太远以至于在TLB中找不到。这个例子主要用于强调考虑了数量因素:D1、L2、L3和TLB的大小与延迟,以及原始2维空间中的距离和1维索引空间的距离后,很难制定一个最佳邻近点的方案。

我们认为解决最佳邻近点问题是一个公开问题,作为最优解问题将包含所有相关参数并找到最合适的遍历方法。其解决方案必须充分支持任何真实测试用例下模型代码用户可能使用的任何类型缓存系统。然而,为了解决一个优化问题(如求下界的NP难题),我们需要使用启发式或近似法。对于本章的测试用例,我们尽可能让用例简单一些并坚持使用启发式H1描述,并且有可能为了以后的调整而偏离该问题。


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

51CTO读书频道二维码


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

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

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

读 书 +更多

人月神话:32周年中文纪念版

在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解。既有很...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊