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

发布者:RadiantBlossom最新更新时间:2014-11-12 来源: ck365关键字:LabVIEW  x86客户  DLL 手机看文章 扫描二维码
随时随地手机看文章

Author(s):
Stephen Blair-Chappell,技术支持工程师 - Intel (英国), working in partnership with Hitex UK Ltd.

Industry:

Products:
Software

The Challenge:
对NI Labview软件自动生成的外部代码进行最优化,在x86构架下获得最大性能,进而测量目标系统中DLL性能。

The Solution:
在不修改源代码的条件下,通过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 指令显著提高代码的效率。[page]

本范例中,编译器通过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编译器用户反馈中了解到,使用这些优化方式可显著提高代码执行速度。

关键字:LabVIEW  x86客户  DLL 引用地址:如何创建及谐调支持多核的LabVIEW x86客户DLL

上一篇:LM-STAR 基于NI 软件测试系统节省百万成本
下一篇:航空器增压舱功能性测试的新创意

推荐阅读最新更新时间:2024-03-30 22:49

基于DAQ及LabVIEW的虚拟数字电压表的设计
O 引言 电子仪器与测试实验室是高等工科院校必备的教学实验条件。为了提供一定的实验规模,保证每个学生得到实际动手能力的训练,传统的教学实验室一般需购置大量的基础测量仪器,如示波器、电压表、信号源等,投资大、技术更新快、维护困难。电压表更是不可或缺的测量仪器之一。 传统的数字电压表采用A/D转换器件和通用集成逻辑器件来设计,这样的设计不便于系统功能修改和升级,缺乏灵活性,接线较复杂,故障率高。以单片机为核心的数字电压表设计是目前使用过最广泛的一种设计方式,但其工作速度较低,功能修改及调试需要硬件电路的支持。 在本文设计中,结合虚拟仪器新技术来完成为数字电压表的设计,使其不但更有利于系统集成,提高系统的测试精度,适用于实验
[测试测量]
基于DAQ及<font color='red'>LabVIEW</font>的虚拟数字电压表的设计
基于LabVIEW的数控机床网络测控系统——总体设计 (二)
  3.3通用数据采集卡的驱动设计   系统中,在数据采集卡部分,LabVIEW提供了大量的数据采集子程序,这些驱动程序从简单到高级,可以提供给用户使用,但这些子程序只支持NI的数据采集卡(DAQ)以及少数公司开发的支持LabVIEW平台的数据采集卡,而这些卡的价格较昂贵,一般的用户很难接受。因此,为了能在LabVIEW平台上使用普通数据采集,有以下几种方案可以解决LabVIEW与普通数据采集卡驱动的问题。   3.3.1基于LabVIEW的普通国产采集卡的驱动方法   为了解决LabVIEW与普通国产采集卡的接口驱动问题,有三种可行方案:   ①直接用LabVIEW的InPort , OutPort图标编程方式;   ②
[测试测量]
基于<font color='red'>LabVIEW</font>的数控机床网络测控系统——总体设计 (二)
NIDays2008多核技术下LabVIEW编程
NIDays 2008 于11月18日在上海举行,课题涉及了很多方面。作为与非网特约工程师,我全程参加了主题演讲和专题讲座。本文只对专题二的LabVIEW 编程技巧下的“多核技术下LabVIEW编程的参考模式”做一些讨论。对这个问题的心得,是我在本届NIDays上最大的收获之一。 现在我们使用的处理器很多已经是双核了,这就意味着我们写应用程序的时候得考虑怎样充分的使用双核这个特性来优化程序,同时,我们也得考虑由双核所带来的抢资源,死锁等并发问题。但正如任何一位便写过多线程代码的开发者告诉我们的那样,这是编程领域的最艰巨的任务。 LabVIEW是门图形语言,它是基于数据流的多线程的语言,所以编写多线程的程序是一件非常
[测试测量]
NIDays2008多核技术下<font color='red'>LabVIEW</font>编程
LabVIEW之破解VI密码
关于上一篇文中的破解方法,有较大的局限性,主要是当密码长度增加时,穷举匹配的时间会大大增加, 如果采用上一篇文中的破解方法,可以考虑生成多个字典,各字典的内容各不相同,编写多线程程序(或者直接同时运行多个程序),完全利用个人电脑的硬件能力,可以缩短字典匹配的时间,当然,还是非常费时间,记得之前暴力破解WiFi密码的时候,就是整个晚上都挂了程序跑, 一个晚上也跑不了多少条。 另外,生成字典的字符串越长,占用的硬盘空间也越大 看网上有人提到VI密码使用md5加密,具体情况没有说明。 我往md5方向做了一些尝试,最终基本搞清楚了方法, 使用二进制编辑器打开已加密的VI, 例如 文件I/O - 文件常量 - 应用程序目录, 对应的vi位置
[测试测量]
<font color='red'>LabVIEW</font>之破解VI密码
LabVIEW,32路舵机控制板和多自由度机械臂
从题目上看,这篇文章涉及了LabVIEW的编程、32路舵机控制板的使用和多自由度机械臂的动作演示,应该还有蓝牙通讯,后面三部分内容,在前面的文章中讲述过,文章题目《32路舵机控制板与多自由度机械臂》,网址:http://www.eefocus.com/zhang700309/blog/12-09/286479_a1c80.html 。这篇文章主要讲LabVIEW如何编程来与舵机控制板串口通信,并进而控制机械臂上的各个舵机。 32路舵机控制板由国内公司DFRobot出品,上一篇文章讲述了如何用控制板自带的舵机控制软件,来设置舵机动作的方法,这篇文章希望用LabVIEW程序来代替厂家的舵机控制软件一部分功能,来做一个为这个实
[测试测量]
<font color='red'>LabVIEW</font>,32路舵机控制板和多自由度机械臂
LabVIEW与自动测试系统
自动测试系统(Automatic Test System, ATS)对于测试领域的工程人员来说并不陌生,也被认为是测试系统发展的一种趋势。至于具体的概念可以到相关的网站或书籍上查找,此处并不会过多地涉及这些学术化的定义。得益于电子计算机(PC)发展以及电气接口和通讯接口标准的建立和完善,自动测试系统将仪器技术、计算机技术和通讯技术有机地结合起来从而形成了能够实现特定功能的测试平台。正所谓 懒人推动技术革新 ,随着测试仪器的增加、测试过程和规范的复杂、待测对象的多样化和测试速率的加快等因素要求,自动化也在测试中越来越受到工程人员的关注。对生产线而言,ATS能够显著提高测试效率并与生产控制和过程监测有效地结合在一起;对研究人员而言,AT
[测试测量]
<font color='red'>LabVIEW</font>与自动测试系统
使用NI PAC和LabVIEW软件控制藻类生物燃料的生产
  开发一个数据采集系统和控制平台,用于Solix藻类生长系统(AGSTM)的工业部署,需要既灵活方便,又坚固耐用。   The Solution:   使用NI Compact FieldPoint和LabVIEW的集成平台,监测、控制处理系统,管理数据记录;同时采用LabVIEW数据日志与监控(DSC)模块及NI DIAdem数据管理软件,存储、处理数据,进行深入、详细的分析。 Amine工厂和Solix Biofuels工厂鸟瞰图   "NI公司提供的产品、工具及持续的技术支持,可帮助我们快速开发、部署藻类生长所需技术,用来进行燃料生产。"    背景:藻类生物燃料生产   如今,全球对于有限的、不可再
[测试测量]
使用NI PAC和<font color='red'>LabVIEW</font>软件控制藻类生物燃料的生产
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新测试测量文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved