LabVIEW 程序的内存优化---阮奇桢.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LabVIEW 程序的内存优化---阮奇桢

LabVIEW[1] 程序的内存优化 Memory Optimize for LabVIEW Programs 阮奇桢 Qizhen Ruan,Biomedical Engineering Department, Shanghai Jiao Tong University ruanqizhen@ 摘 要: LabVIEW语言在我国推广普及已经有五六年的时间了。随着LabVIEW应用范围的拓宽,用户对LabVIEW编程产品的要求已经不再仅仅简单满足于完成基本功能,对于程序性能的要求已越来越迫切。本文针对LabVIEW在内存优化中的几个方面进行了讨论,以期对LabVIEW软件开发人员编程时提高程序性能有所帮助。 Abstract: Finishing the functionality is not enough for many LabVIEW applications. It’s also required high performance. This paper introduces some of the most efficient way to optimize the memory usage of LabVIEW program. 关 键 词:LabVIEW  程序设计  虚拟仪器  内存  优化 Keywords: LabVIEW  Programming Optimize  Virtual Instruments  Memory AdvancedShow Buffer Allocations工具可以在VI框图中查看缓存的分配情况[1]。打开该工具,凡是在框图中有缓存分配的地方,都会显示出一个黑点[2]。 下面是几个最常用节点的试验结果。LabVIEW节点众多,不可能一一列举,文中未提及的节点读者在编程时自己可以尝试。 一般顺序执行VI中的运算节点 如图1所示,程序对一个常量加1,然后将结果输出。“+1”节点输出端有一个黑点,表示LabVIEW在此处开辟了一个缓存用于保存运算结果。其实完全可以利用输入数据的内存空间来保存这个运算结果。我们可以通过如下的方法来告知LabVIEW编译器,在此运算节点处重用输入数据的内存空间。 首先,用一个控制型数值控件代替图中的数值常量,然后分别将VI中的两个控件与VI的接线器(Connector Pane)相连。图2是经过我们优化后的VI,LabVIEW在“+1”节点处没有开辟新的缓存。LabVIEW中其它运算节点也有类似的性质。 移位寄存器(Shift Register in the Loop Structure) 移位寄存器是LabVIEW内存优化中最为重要的一个节点,因为移位寄存器在循环结构两端的接线端是强制使用同一内存的[1]。这一特性可以被用来通知LabVIEW在编译循环内代码时,重用输入输出缓存。 让我们分析一下图3所示的程序:它首先构造了一个数组,然后对这个数组进行了几次数学运算。每一步运算,LabVIEW都要开辟一块缓存用以保存运算结果的副本。打开VI属性面板上的内存使用,可以看到这个VI大约会占用2.7M的内存空间。其实这些副本都是不必要的,每一步运算的结果都可以被保存到输入数据的内存空间。我们可以把所用的运算节点都放到一个子VI中,然后利用上一段提到的方法,使子VI中的代码缓存重用。还有一种方法,利用移位寄存器也可以实现缓存重用。 如图4,我们可以将运算代码放在一个只运行一次的循环结构内,由于运算部分的输入和输出都与移位寄存器相连,这就相当于通知了LabVIEW,在运算的输入输出需要使用同一块缓存。因而,LabVIEW不再为每一步运算开辟新的缓存而是直接利用输入数据的缓存保存结果。打开VI属性面板上的内存使用,可以查看到这个VI的内存占用已经减少到了原来的六分之一。 库函数调用节点(Call Library Node) 以传递整型参数为例:在参数配置面板,我们可以选择值传递(Pass Value)或选择指针传递(Pass Pointer to Value)。 当选择了值传递时,库函数调用节点是不会改变该参数的内容的。如果我们在该库函数调用节点参数的左侧接线端引入输入数据,在输出端引出输出参数,那么输出数据其实是直接由输入数据引出的,LabVIEW不会在这个节点处开辟缓存。 在指针传递方式时,LabVIEW则认为传入的数据会被改变。如果输入数据同时还要发往其它节点,LabVIEW会在此处开辟缓存,为输入数据作一个副本。选用指针传递方式,库函数调用节点的每一对接线端也同样是缓存重用的。就是说,库函数调用节点的输出值是直接存放在输入值的缓存空间的。 如果一个参数只用作输出,我们通常会在库函数调用节点的输入接线端为它建立一个输入常数,这个常数的地址空间并不

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档