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

2.3.2 编程工具和运行时

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

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

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

2.3.2 编程工具和运行时

对于程序员幸运的是,我们所使用的工具——编译器、调试器和采样分析器,随着硬件变得越来越精细,越来越强大。OpenMP已经发展到了4.0,这使得它成为一个开发多线程程序的选择。

本章不使用OpenMP的细节技术,只是简单让OpenMP在运行时管理线程的数量和其同类之间关系的细节。对于规模可变的实验中,设置环境变量PMP_NUM_THREADS用来管理线程数量是非常有用的,同时设置KMP_AFFINITY的散播或者集中可以用来控制SMT应该如何使用。注意,KMP_AFFINITY是Intel编译器的量,对于gcc使用GOMP_CPU_AFFINITY。

对于向量化,有多种可行的方法。最简单的是出现在许多现代编译器中的自动向量化技术。它的目的是基于少量代码产生高效的为SIMD代码。用自动向量分析器转换和生产高效代码的方式编写代码是一种艺术,也是最令人满意的方法。

编译器内置函数(intrinsics)是表达向量化代码最可靠的方式,这些内置的数据类型和函数直接翻译成SIMD寄存器和指令。然而,它们是由供应商定制的,有些会晦涩难懂。

一个替代内置函数的选择是C++类(这种方法在本章中使用最频繁),这个类包装内置函数。这些类很容易自己编写——Intel编译器带有一组——它们提供一个方便的抽象层,这样可以为SIMD宽度提供一些灵活性。甚至可以重载标准算术运算符,这使得使用它们编码的方式和使用标准C++标量类型编码类似。


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

51CTO读书频道二维码


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

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

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

读 书 +更多

Eclipse Web开发从入门到精通(实例版)

本书由浅入深、循序渐进地介绍了目前流行的基于Eclipse的优秀框架。全书共分14章,内容涵盖了Eclipse基础、ANT资源构造、数据库应用开发、W...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊