提升LabVIEW程序性能-优化内存管理.ppt

提升LabVIEW程序性能-优化内存管理.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
工欲善其事,必先利其器。对于一个大的程序而言,可能包括很多子VI,如果你想提高程序运行效率,优化内存管理,面对几十个,几百个,甚至上千个的VI,不知道你是不是会有一种无从下手的感觉。在LabVIEW中,有一个监测VI内存占用和运行时间的工具,你可以在工具,性能分析,性能和分析菜单里找到它。这个监测工具可以很方便的显示出每个VI的运行时间,内存占用大小,等等很多有用的信息。有了这些信息,你可以很方便地找到程序中消耗内存最大,执行时间最长的部分。这些部分就是制约程序效率的瓶颈。对其有针对性地进行优化,就可以起到事半功倍的效果。待会我们会看一个演示,看看如何来使用这个工具。 当你找到程序中消耗内存最大,效率最低的那个VI后,如何针对它来进行优化,也是一个很关键的问题。如果我修改了程序,到底效果好不好,有没有起到减少内存分配的效果,很难进行评判。LabVIEW提供了一个工具,用来帮助我们分析VI里各个数据变量的内存复制情况。大家可以在工具,性能分析里找到一个显示缓存区分配工具。运行这个工具,LabVIEW会把程序框图中有内存复制的地方用一个黑点标识出来,你可以看到程序中的内存分配情况。而且你可以有选择地看自己感兴趣的变量,比如数组的,簇的,等等。 在上面的这个框图中,在FOR循环的右边,有一个黑点,表示LabVIEW在这里有一份数组的拷贝。我们的目标也很明确,就是要尽量消除程序框图中的那些黑点。黑点越少,表明数组备份的情况越少,程序所消耗的内存也越少。 下面呢,我们看一个具体的例子,看看如何来使用这两个工具。 运行bad目录里的bad example VI。然后打开Performance and Memory profile工具,看一下各个子VI的运行时间和内存占用情况。 大家可以看到,通过使用这两个工具,我们发现,signal analysis这个VI是程序中的一个瓶颈。它的内存复制的现象也比较的严重。所以我们应该首先针对它进行优化。那我们现在先回到幻灯片中,先具体介绍怎么来进行优化。等把优化的方法,技巧介绍好了,我们再回过头来,看一下完成同样功能,但是经过优化后的程序,它的效率怎么样。 大家先记住signal analysis这个VI的运行时间和占用内存的具体数字。 首先介绍一些比较基础性的指导方针,大家在编程阶段就可以有意识地注意上面所列的这四条。 大家可能在程序框图中都看到过类似这样的红点。这样的红点代表了LabVIEW在这里连接了两种不同的数据类型,并且做了强制类型转化。比如下面这个框图。Random number的输出是一个双精度数。所以FOR循环的输出是一个双精度型的数组。而加法器的另一个输入是单精度型,所以需要把单精度转成双精度,所以有这个红点。加法的结果是一个双精度型的数组,但输出是单精度型的,所以又有一个红点。 当涉及到大数组的类型转换时,比如图上的这个红点,就会占用大量的内存资源。这是需要特别注意和避免的。 我们来看一下下面两个解决方案。这两个方案都是利用了从双精度型到单精度型的转换器。但到底哪个更好一点呢,大家可以想一想。那我们说,右边的方案更好一点。为什么。 首先看一下左边的框图。虽然通过使用类型转换器,使得加法器的输出变成了单精度型,从而消除了原来在输出上的红点。但是,FOR循环的输出仍就是一个双精度型,LabVIEW还是需要为这个输出分配一个双精度型的数组。还是有一个大数组的转换。 而右边的方案,因为把转换器放在了循环结构之中,所以输出已经是一个单精度型的数组了,从而避免了转换一个大的数组。 所以我们在编程中要尽量保持前后数据类型一致,避免做类型转换。如果无法避免的话,也要注意避免对大块数据量进行类型转换。因为这样做,LabVIEW都是要进行数据备份的。 第二点,我要讲一下一类特殊的内存泄漏。LabVIEW是自动释放内存的,所以一般来说不会发生内存泄漏。这里所讲的内存泄漏主要发生在文件操作,或动态调用VI中。当你打开了文件的引用,进行完读写操作后,一定要注意关闭这个引用。不然LabVIEW是不会释放这个文件所占用的内存的。同样,对于动态调用VI也有类似的情况。 所以,在写程序时,打开引用和关闭引用一定是要一一对应的。 我们想创建一个由随机数组成的数组。这里有三种方式。 首先看一下LabVIEW 8.2中的运行时间,然后看一下LabVIEW 8.5下的运行时间。 可以看到,在LabVIEW 8.5中,使用创建数组函数的效率比起第二,第三种方法还有有3倍的差距。但是比起8.2而言,效率已经提高了10多倍。这完全是LabVIEW 8.5对其进行优化后带来的性能提升。 但是,如果你的程序需要非常高的性能,我们还是推荐使用第二,第三种方法。 第四个问题,也是一些LabVIEW程序内存优化中比较常见的一个问

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档