微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > 虚拟仪器 > 大家谈谈对于vi效率的提高有没有什么心得

大家谈谈对于vi效率的提高有没有什么心得

时间:12-13 整理:3721RD 点击:
我编的程序使用了很多循环、数组什么的
结果程序一大,运行速度奇慢
在提高效率上,大家有什么心得吗?
矢量运算,ni有没有作过什么优化之类的
.155

LV里循环本身的效率应该已经不错的了,可能问题还是你的数组操作。
.39

在lv6.1下面编的程序,
在7。0下运行速度明显比6。1下慢一点
不知为什么,
按理说,高版本不会牺牲程序效率吧
.230

高版本加了新特性,如果对比以前的版本在算法上没有大的改进或优化,运行更慢也正常.
我不知道lv的具体运行方式.不过想来和解释型语言(比如vb,matlab)是类似的.这种语言循
环慢是公认的.如果没有专用工具包,唯一的办法是用C/C++之类的语言写代码供他们调用.
matlab因为是矩阵语言,它的矩阵算法是优化的.所以有个办法是把循环转化为矩阵运算.这
叫向量化.如果不能转化,还是要用C来写代码...
.70

LV好像不是解释型语言吧 :)
他的循环效率跟matlab不是一个量级的。
.39

vb也可以编译执行.不等于说vb不是解释型语言...
很少有人象用matlab那样用c来做优化,我觉得原因是lv的用户倾向于数据采集.对速度没那
么敏感. matlab的用户做数值计算的多,更在乎速度.
lv的循环效率跟matlab不是一个量级的.开玩笑吧.呵呵,你做过对比实验么?
.70

我没有仔细研究LV的执行机制,但就目前的使用情况来看,循环操作是比matlab快得多。
而且你所谓得lv用户倾向数据采集,matlab做数值计算也是n年前的老黄历了。如果你
看过matlab的6.5的宣传就不会这么认为了。另外,lv现在也完全不是DAQ了,基本的
analysis都已经包含在LV的Advanced Ananlysis Lib里了,如果有特殊分析需求可以再
另外购买相应的toolset.
.39

不用看宣传,我们实验室就有matlab 6.5... matlab和lv一样,本来初期就都是为了方便某
些运用而设计的:matlab是为了简化矩阵运算,lv是为了简化数据采集编程. 为了达成这一
点,两个语言在最初的设计上就不是追求高效率(这是c设计的目的)而是追求方便性, 两者
都是知道这一点的,所以他们都是拼命的推出toolkit.而且,都在拓展自己的应用方向.mat
lab有数据采集包,lv也有分析软件包.这并不矛盾.但即使今天,说lv用户倾向数据采集,m
atlab做数值计算也没什么问题.是老皇历,但到现在还是对的.而且我说的是用户,不是语言
的能力.
其实随着计算机技术的发展,不同语言之间的差别在缩小.你喜欢哪个,觉得哪个合用,就用
哪个.
.70

他好象说的是--追求高效率(这是C设计的目的)。
:)
.42

我的主要方法是能不用local的地方就不用尽量用shift register,
因为每次读local时都会引起内存复制而这对于大数组来说是很费时的
.15

同感!shift register是很方便的。我刚刚学习LV的时候,上海NI的Eric Xiang,就跟我
说,多用shift register.
另外提醒大家注意用refnum可以节省大量空间,因为函数和子程序间不传递数据,而是re
ference number,就象DAQ里面的task ID。数据只是在需要处理的地方用一下,然后就把
占用的内存释放掉了。我的理解是这样的。
.128

用shift register和数组相连是不是效率低呢?
.173

早上试验了一下单纯的for循环操作,循环次数100,000,000,Matlab 6.5要30秒以上,
LV 6.1下1.8秒左右。不知那些说LV的循环与Matlab的循环执行效率相近是怎么得出
的结论?
.39

呵呵,用实验数据说话:D
.90

不是说LV代码的执行效率能达到c的97%吗?
我觉得它的效率对于搞工程的人来说是足够了!
.243

:))
C的97%? 我本来不想再讨论这个话题了.不过好像大家越说越离谱了耶.
matlab 循环慢的原因是因为它的变量都是矩阵. 你whos一下就会看到.循环变量是,size
1X1, 8byte double. 拿矩阵来循环当然慢. matlab的优势在于操作矩阵的时候根本就不必
循环.
我用能改变变量类型的vb试验,结果如下:
lv 7 express 循环100M次.变量取I32型.在我机器上是2.1秒.
vb 6.0 sp5. 同样100M次.变量取缺省的variant. 3.8秒. long, 2.6秒. double 6.0秒.
vb程序:
Private Sub Command1_Click()
Dim i As Double '改变这里的变量定义
a = Timer
For i = 1 To 100000000
Next i
Text1 = Timer - a
End Sub
对比语言的速度,空循环的结果其实没太大的意义.如果真有兴趣,去数学工具板或数值计算
板考古好了. 语言间的争论也没什么意义. 我同意Dyphon的话, lv的效率对于搞工程的人
来说是足够了!
.70

没有人争论,倒是大侠您不停的在辩解些什么。LV的执行效率比Matlab高也是事实。但
Matlab的优势是做数学和算法的人免费提供了大量库函数,而LV由于目标是用计算机
做仪器,代表就是示波器,自然不可能让数据采集停下来等着处理半天。所谓97%的效率
那也不现实,顶多是最高可能达到。但我们试验下来基本上能达到c的50%左右。但由于
LV的跨平台,所以现在NI的开发都不鼓励用C,除非是特别需要底层操作外,全部用G代码
写。就目前来说matlab,LV各自有各自的优势,也有不同的需求,没必要浪费口舌。我
自己用了6年的Matlab,好坏还是能分出一些的。
BTW:matlab当年的另一分支Matrix已经被NI收购了.
.39

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

网站地图

Top