flow 发表于 2009-7-3 15:32:00

labview中循环运算的时间占用

我在LabVIEW下做了一个100*1000000的循环,也就是循环100次里嵌套1000000循环,空循环运行速度很快,但是只要在循环内加一点点运算,比如,+1运算,速度一下就慢了。完成整个运算大概需要几十秒。
同样的运算在C下,只要3秒的样子。
想问问,LabVIEW下大数据量运算是不是有局限呢?
我用的是LabVIEW 7.1版本
谢谢各位!

flow 发表于 2009-7-3 15:40:59

有人在吗,麻烦解答一下~~~~~~

老头子 发表于 2009-7-3 16:05:20

将二种程序传上来。分析下。应该不会有这么大差距

flow 发表于 2009-7-3 16:41:08

C语言的代码如下:数据量80M

void __fastcall TForm1::Button1Click(TObject *Sender)
{

unsigned long int i,j,p;
int m,t1;
unsigned long int x;

for(m=0;m<4000;m++)
{
for(i=0;i<16;i++)x=0;
}

t1=timeGetTime();
for(m=0;m<4000;m++)
{
for(i=0;i<20000;i++)
{
    p= i;   //m*20000 +
      if((B&1)!=0) x++;
      if((B&2)!=0) x++;
      if((B&4)!=0) x++;
      if((B&8)!=0) x++;
      if((B&16)!=0) x++;
      if((B&32)!=0) x++;
      if((B&64)!=0) x++;
      if((B&128)!=0) x++;
      if((B&256)!=0) x++;
      if((B&512)!=0) x++;
      if((B&1024)!=0) x++;
      if((B&2048)!=0) x++;
      if((B&4096)!=0) x++;
      if((B&8192)!=0) x++;
      if((B&16384)!=0) x++;
      if((B&32768)!=0) x++;
}
}
Label1->Caption="aa "+IntToStr(x)+""+FloatToStr((timeGetTime()-t1)/1000.);
}

flow 发表于 2009-7-3 16:48:46


LabVIEW的程序如上图所示,数据量20M,1000*20000
array U16 20M 数据里是20M16无符号数

foolooo 发表于 2009-7-4 00:57:32

因为你的循环中有控件,你每次执行大循环时都要初始化一个数组,这非常耗时间,而你的c代码中数组只初始化一次,所以不公平:)。公平的比较应该将初始化数组放在大循环外,你再试试。

flow 发表于 2009-7-4 01:09:10

明天试试看,谢谢你这么晚还来回答问题!

foolooo 发表于 2009-7-4 05:26:15

呵呵,有时差~
另 肯定是执行起来没有c快啦,我也想看看到底慢多少。

flow 发表于 2009-7-6 09:32:47

本帖最后由 flow 于 2009-7-6 09:34 编辑

今天上班后就写了代码,将大数组放在循环外,该数组为U16,在里层循环内如果不加任何运算,速度为4秒的样子。

后来我加了仅仅一位的计数运算,速度就很慢了。如下图所示:

flow 发表于 2009-7-6 09:38:38

呵呵,有时差~
另 肯定是执行起来没有c快啦,我也想看看到底慢多少。
foolooo 发表于 2009-7-4 05:26 http://www.cpubbs.com/bbs/images/common/back.gif

我也相信会有时差,不过试了试,加了运算后,为什么会这么慢~~~~
看你的发帖时间,想问一下,呵呵,是不是比较牛的人晚上都不用睡觉喃~~~~

flow 发表于 2009-7-6 16:48:50

循环中做运算时使用了属性节点,这样很占用时间。换成shift-register后,速度快了很多。

foolooo 发表于 2009-7-6 18:28:56



我也相信会有时差,不过试了试,加了运算后,为什么会这么慢~~~~
看你的发帖时间,想问一下,呵呵,是不是比较牛的人晚上都不用睡觉喃~~~~
flow 发表于 2009-7-6 09:38 http://www.cpubbs.com/bbs/images/common/back.gif
我说的有时差是因为我在国外所以有时差啦。。。。:)

foolooo 发表于 2009-7-6 18:31:55

还有“不公平”的地方是,你c中建立的是二维数组,而你的lv中建立1维数组之后取subset。如果你开始也建立二维数组然后利用自动索引取出每一行的话我相信速度还会提高的。

不过别指望lv快过c就是了。。。

flow 发表于 2009-7-6 23:02:45


我说的有时差是因为我在国外所以有时差啦。。。。:)
foolooo 发表于 2009-7-6 18:28 http://www.cpubbs.com/bbs/images/common/back.gif

偶确实反应要慢一拍allqq-mogudiandian-43all

flow 发表于 2009-7-6 23:08:27

还有“不公平”的地方是,你c中建立的是二维数组,而你的lv中建立1维数组之后取subset。如果你开始也建立二维数组然后利用自动索引取出每一行的话我相信速度还会提高的。

不过别指望lv快过c就是了。。。
foolooo 发表于 2009-7-6 18:31 http://www.cpubbs.com/bbs/images/common/back.gif

应用程序中从DI卡里取出来的数据,就是一维数组了,所以就没有进行整合。

现在知道,用LV不仅要考虑如何完成功能,还要考虑最优化方法~~~
页: [1] 2
查看完整版本: labview中循环运算的时间占用