如何创建及谐调支持多核的LabVIEW x86客户DLL

如何创建及谐调支持多核的labview x86客户dll
在不修改源代码的条件下,通过intel c++ 编译器在单核pc上实现2.5 倍提速,通过编译器中的各类最优化选项在双核pc 上实现超过4.5 倍提速。
vtune能够监测许多不同种类的构架事件。vtune调谐助手能够给出如何更好使用这些事件的建议。
本应用包括了两个组件——用于计算pi 值的dll、调用dll 库函数的labview 应用,可将结果显示在图形用户界面中。
为计算pi 值,我们采用了近似综合技术,需要在单个循环中完成数百万次浮点计算。选择该范例是因为它是cpu 密集型的,并且是可优化的应用。如下所示为外部代码的主循环结构,cpu的主要计算量是处理calcsum 函数。
for(i=0; i
sum = calcsum(i, sum, step);

我们的目标是通过编译器中的优化选项以最快速度完成上述计算。
应用中有4 个函数,均包含于独立源文件中。我们采用不同优化开关来编译每个源文件。如图1 所示。
表1.应用中的函数
“即插即用”的intel c++ 编译器 我们采用即插即用的intel c++ 来代替microsoft 编译器,它可以轻松地集成到现有microsoft visual studio dll 工程中。更多关于intel 编译器,请访问intel.com/software。
默认设置 测量首先以/o2选项创建应用,许多优化都是在这个层面上进行的。本文在此不讨论其细节问题。表2显示了/o2选项集成的各个优化设置。
表2./o2 选项中集成的最优化列表
自动向量化 自动向量化得益于新一代cpu 中集成的复杂指令集。多数现代cpu构架可扩展支持数据操作及多数据计算。扩展包括支持以单一指令实现多重计算(单指令多数据流,或称simd)。intel 编译器能够分析代码,并通过simd 指令显著提高代码的效率。
本范例中,编译器通过\qt 选项生成适合core 2 构架的代码,编译器报告以下创建时间信息:
注释:循环未作向量化处理
反汇编生成代码后可看到编译器插入了simd扩展指令集(sse)。该指令集的使用直接提升了应用的运行性能,代码运行速度提高了2倍。
这类优化可应用于目前大多数cpu 上,这里我们在core 2 处理器上运行,当然您也可以在单核或早期cpu 上应用。
自动并行化 因为采用多核pc,我们会更感兴趣如何通过\qparallel 选项,让代码在两核上同时运行,以获得进一步提速。该选项在编译目标中插入了库调用。库调用提供了运行时所需的控制,使应用中的组件得以并行。
在首次运行中,编译器并未显著提高运行性能。通过开启编译器的报告功能,可以看到它并未进行优化。
注释:循环未作并行化处理,循环无需并行化
intel编译器要对一段代码进行自动并行化时,首先决定是否有值得进行并行化的代码部分。在我们的代码中由一个主循环完成所有工作。编译器不能确定循环的重复次数,循环计数值只有在运行时得到。于是编译器采取谨慎选择,不对循环进行并行化处理。
我们可以通过在命令行输入/qpar-threshold:n 来进行试探优化,这里n 是介于0(总是并行处理)到100(不进行并行处理)的数,这个值决定了试探优化的程度。
输入/qpar-threshold:0 后,编译器对代码并行化,并输出报告:
注释:循环已作自动并行化处理
使用该优化后,程序的运行速度比默认设置下提高了近2 倍。
其它优化选项 本范例中,我们关注自动向量化及自动并行化。intel c++ 编译器利用一系列其它优化技术,包括高层优化、交叉过程优化、配置向导优化、速度优化、代码大小优化、快速浮点处理等。
intel 编译器同时支持openmp 这个基于pragma 的标准,用于实现应用代码的并行化。
测量性能 本范例中我们采用win32 api 的定时函数,并将定时计算嵌入外部代码。计算时间在labview 应用gui 中显示。
作为备选,我们还可采用labview的定时工具,或采用外部工具,如intel vtune 性能分析器。
vtune能够监测许多不同种类的构架事件。vtune调谐助手能够给出如何更好使用这些事件的建议。
结论 不同开关的优化结果在表3 中列出。我们在双核pc 上运行,并通过默认优化(/o2)作为基准来计算提速。
表3.不同优化方式下的速度提高
在应用自动向量化时可达到2.5倍速,该优化专用于非多核处理器,可用于目前多数cpu。
在应用自动并行化后可实现接近2 倍的提速。结合两种优化更可达到4.6 倍。
以上结果是在不修改源代码的前提下实现的。尽管我们选择了模拟应用(计算pi值),但这类优化技术能够用于各类实际应用。从intel编译器用户反馈中了解到,使用这些优化方式可显著提高代码执行速度。

Lime Microsystems射频收发器芯片已被GWT通
通过NVIDIA ISAAC ROS传输改善ROS 2感知性能
运动编程示例:重复运动的循环功能
NVIDIA DRIVE Sim仿真平台中的神经重建引擎功能
爱立信将携手中国电信打造5G精品网络
如何创建及谐调支持多核的LabVIEW x86客户DLL
意法半导体推出高速抗辐射逻辑产品系列 加速航天电子工作频率
Kubernetes的基本构建块和挑战
ARCAM机器人系统成为很多优秀电视节目的“幕后功臣”
2019第五届物联网博览隆重举行 肖龙源:《AI时代的企业机遇》
单相方波逆变电路的谐波控制
影响UV胶水粘接材料透光率大小的主要因素都有哪些
可再生能源系统中的SiC实现更高效,更小且更具成本效益的电力方案
优化了通信行业网络成本和性能的FBG色散管理技术
简易喊话器的工作原理及制作
Android有多成功?欧盟对谷歌的裁决刚好证明
韩国为了应对高龄化社会带来的影响 推出了预防痴呆症的机器人
AI技术助力石油人乘风破浪,驶向数字智能的瀚海
“贸易战”将如何影响3D打印增材制造,听听行业人士怎么说
Transformers研究方向