微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > 虚拟仪器 > labview效率问题

labview效率问题

时间:12-13 整理:3721RD 点击:
我用labview做数据采集,并做处理,实时显示,200Hz,7channels。
在双核机器上可以运行,换到一个单核的赛扬cpu机器上,就运行一阵子死掉,初步问题是,数据处理时间过长,数据堆集到buff上溢出。
我用的是蓝牙传输,设置好采样频率,200Hz,蓝牙就往主机上传输数据,我判断主机接口上数据量(Bytes at port),然后读取,处理.
我想问一下,labview中那些东西影响数据处理的时间?比如,waveform charts(显示)、矩阵运算、属性节点、实时滤波器、数据存盘等等.
我的经验是,属性节点很耗时间,数据读盘和存盘次之. 矩阵运算我只有一个(1*6)*(6*6)的运算,自己用加减乘除做一个子vi会不会比较省时间?
一些提高运行效率的小技巧也可以说说,谢谢~

赛扬cpu的浮点运算性能本来就是极弱的。

这个也有所耳闻。
不过我觉得200Hz的采样频率应该不是很高的,一般的机器都应该可以满足吧。而且,赛扬机器是新买的,cpu主频应该不是很差。

自己用性能查看器看
另外,优化代码
很多情况下死掉不是机器性能不行,而是有的代码不合理。

谢谢~~
性能查看器是指  performance and memory?
优化代码主要是指那些方面? 那些部分可以优化?能不能举个简单的例子呢?我分不清那些代码是可以优化的.
子VI的使用是会提高效率呢,还是降低?
第一次用labview编程序,请多多指教.

简单的例子,比如一个数据在每次循环的时候都要用,那么就不要放到循环里面而是放到外面算好了再接进去……话说这个也太简单了,不过是我犯过的一个错误

感谢~
我以前循环里面有一个读文件的操作(读一个6*360的矩阵),现在已经放到了循环外面,呵呵。
如果,循环里面每次用到的数据不是计算出来的,而是常数(比如滤波器的参数设置)要不要也放到循环外面呢?

http://www.vihome.com.cn/class/252.html

不知道你有没有作个buffer缓冲传输过来的数据?
实时处理不能假定每次都能在0.05s之内完成计算,
开个global buffer,接收线程写,主线程读。
不知道你是什么计算,如果可以批量计算,还可以
更长时间算一次,比如0.1s,对于图像显示影响不大

      无论使用什么设计语言,不良的编程技术都会给一个应用的性能带来负面影响,对一个嵌入式应用尤其如此。尽管对于绝大部分应用来说,高效率的编程技术是重要的,但对于嵌入式应用所工作的资源极度缺乏的环境,则要求对性能和存储器管理给予特别的关注。
       本文的讨论将围绕着新的LabView嵌入式开发模块进行,这种新工具为嵌入式应用开发人员提供了图形化系统设计手段。该工具允许用户直观地设计算法并进行交互式调试。下面是一些有助于编程师更有效使用LabView开发嵌入式应用的技巧。这些技巧中的许多也适用于其它高级工具。
动态分配存储器技术
      动态存储器分配是一项编程师应尽可能避免的复杂操作。例如,如果动态分配出现在将数据存储到数组内的一个循环内,那么它尤其有害。避免在一个循环内动态分配存储器的常用方法是在该循环开始执行前,为每个数组预分配所需的存储空间。
移位寄存器与隧道技术
        LabView的移位寄存器与隧道使数据进/出循环。工程师还利用移位寄存器在一个循环的每次执行之间传递数据。当数据用一个输入隧道传进一个循环时,LabView必须拷贝该数据并将该拷贝数据送出来进行下线修改。为了确保原始数据对该循环的下次迭代执行时保持不变,这样做是必需的。工程师也可以通过用一个移位寄存器把数据传进该循环的方法来避免拷贝。这样就消除了不必要的拷贝,从而加快了运行速度。
循环中的大常数技术
       如果在循环内部放置一个常数,会使循环的每次执行都拷贝这个数据,从而加大执行时间和存储器使用率。工程师可以避免这个情况,做法是把该常数移出该循环,或者用本地变量把数据传递到循环中。
数据类型强制转换技术
       LabView开发环境只要有可能就自动地处理数据类型的冲突,其做法是把较小的数据类型转换成较大的数据类型。例如,如果在一个整数和一个浮点数之间发生一个类型冲突,那么LabView就把该整数转换成一个浮点数,随后再执行运算操作。这个转换的代价是昂贵的,而且在许多情况下是不必要的。在大多数情况下,工程师可以通过为每个变量选取正确的数据类型来避免强制转换。但是,如果该数据必须被强制转换,则应在将其送去进行操作运算或函数计算前就完成转换,这样效率将会更高些。
簇技术的应用
       当把异构数据捆绑到易管理的数据包中时,簇是有用的,比如说C语言结构(C Structs)。然而,此时除了要考虑的全部数据外,数据内容的相关信息也必须和这些数据一起传递。因此,有的时候,尤其是在把数据传到subVI时,相对于一个捆绑的簇而言,未捆绑的数据元素可以增加用户应用的运行速度。
      尽管类似LabView这样的高级编程语言有助于工程师更快地部署其应用,但注意可提高代码性能的细节是很重要的。通过注意这些细节,有助于工程师快速开发一个高效率的应用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top