|
|
|
|
移动端

2.4.3 优化

《高性能并行珠玑:多核和众核编程方法》第2章从正确到正确&高效:Godunov格式的Hydro2D案例学习,本章将探讨一段科学模拟代码,这段代码是一个以气体动力学为基础的模拟程序。这份程序的输出结果正确,但(初始版本)性能欠佳。本节为大家介绍优化。

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

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


2.4.3 优化

尽管支持并行,但原始代码的性能非常糟糕。就像我们将要展示的,程序效率低的部分原因是一些代码中高级的、概念性的结构在运行的时候效率不高,也因为代码转化的效率并不好。就像加一句#pragma omp parallel for并不保证循环的并行执行效率,#pragma vector也并不一定意味着高效的向量化。

我们将展示这份代码中的不足之处同时也将想办法改进这些不足。

优化代码通常所需要注意的事项。这里展示的优化代码将原来代码的结构和格式与原始代码做了一些分离。这些改变并没直接影响性能,这将会让代码的清晰性和可维护性得到提高。

文件结构重新整理过:核心例程位于pcl-hydro-core.cpp和pcl-hydro-vcore.

cpp中,同时实用例程移到了pcl-hydro-util.cpp和pcl-hydro-params.cpp中。最高层的驱动写入run-tile.cpp中。

为了提高清晰性,一些标识符已重命名(即,constoprim()重命名为conservative_

to_primitive())。equation_of_state()分为equation_of_state()和speed_of_sound(),以此来区分它们的不同用途。

REAL_T被引入到代码中,此类型代替原有single和double类型。

在参考代码Hydro2D中,大多数函数中使用idim参数以控制调整数据访问(特别是,在当前维度方向上,ρ?u、ρ?v必须分别对待)。在优化代码中,多数分支被如下方式所取代:按正确顺序把未知项的数组按(rho,rhou,rhov,E)传递给被调用函数,而不是使用模糊的多维数组u。

占位符函数my_sqrt()和rcp()被sqrt和1/<x>所代替,这样在选择执行何种操作时,提供了更加有弹性的选择。

原始代码中的一些常数也被重写,比如Hgamma被GAMMA所替代。

栈分配变量和函数参数尽可能以const修饰。


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

51CTO读书频道二维码


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

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

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

读 书 +更多

网络管理员考前辅导

本书按照国家人事部、信息产业部全国计算机技术与软件专业资格(水平)考试要求编写,内容紧扣《网络管理员考试大纲》。全书共分为11章,覆...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊