|
|
|
|
移动端

3.7.2 过早抽象是万恶之源

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

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

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


3.7.2 过早抽象是万恶之源

实际上,HBM的示踪物平流部分在另一个示踪物的数量的垂直循环意义上有些特殊。这个最内层nc循环只存在于HBM代码的示踪物相关部分。垂直循环内部的示踪物循环代码段如图图3-16所示。

本节将介绍最简单的硬件抽象(2维数组)是如何导致在Intel Xeon Phi协处理器上2倍性能损失的。这从侧面验证了我们之前的假设——硬件抽象代价太大。

最初的设想是保持2维数组中所有的示踪部分以及使用一种相似的方式连贯地处理该部分。图3-17展示了简化的代码段。

通过编译这部分代码我们发现:

编译器使用动态nc向量化nc循环:

我们实现了我们所希望达到的,既不是MIC目标也不是AVX (IVB)目标。必须承认的是,SNB/IVB架构上的256位非对齐加载/存储是已知问题,所以软件集合不像它看起来的那么差。下面将分析我们没有得到普通向量负载的原因。静态nc意味着要进行展开,展开又意味着优化者把循环看作跨度减nc循环。nc=2的c.f.代码段如图3-18所示。

我们知道编译器能够做到这一点,但是我们还是建议使用图3-19中的样式。

因此,要优化生成的代码我们必须简化并更改代码以便也使用1维数组表示示踪物,即,图3-20所示的使用t1(1:)和t2(:),而不是t(1:2,:)。

此外,我们可以尝试互换循环(用nc倍的存储带宽和缩短1/nc的向量长度)。这里总的问题是含有多个混合维度变量的循环。如果所有的变量具有相同的维度,那么编译器将分解循环并生成正确的代码。


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

51CTO读书频道二维码


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

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

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

读 书 +更多

程序员面试宝典

本书取材于各大IT公司历年面试真题(笔试、口试、电话面试、英语面试,以及逻辑测试和智商测试)。详细分析了应聘程序员(含网络、测试等...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊