找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2007|回复: 15

labview中循环运算的时间占用

[复制链接]
发表于 2009-7-3 15:32:00 | 显示全部楼层 |阅读模式
我在LabVIEW下做了一个100*1000000的循环,也就是循环100次里嵌套1000000循环,空循环运行速度很快,但是只要在循环内加一点点运算,比如,+1运算,速度一下就慢了。完成整个运算大概需要几十秒。
同样的运算在C下,只要3秒的样子。
想问问,LabVIEW下大数据量运算是不是有局限呢?
我用的是LabVIEW 7.1版本
谢谢各位!
 楼主| 发表于 2009-7-3 15:40:59 | 显示全部楼层
回复 顶

使用道具 举报

发表于 2009-7-3 16:05:20 | 显示全部楼层
将二种程序传上来。分析下。应该不会有这么大差距
回复 顶

使用道具 举报

 楼主| 发表于 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[4000][16];

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

t1=timeGetTime();
for(m=0;m<4000;m++)
{
for(i=0;i<20000;i++)
{
    p= i;     //m*20000 +
        if((B[p]&1)!=0) x[m][0]++;
        if((B[p]&2)!=0) x[m][1]++;
        if((B[p]&4)!=0) x[m][2]++;
        if((B[p]&8)!=0) x[m][3]++;
        if((B[p]&16)!=0) x[m][4]++;
        if((B[p]&32)!=0) x[m][5]++;
        if((B[p]&64)!=0) x[m][6]++;
        if((B[p]&128)!=0) x[m][7]++;
        if((B[p]&256)!=0) x[m][8]++;
        if((B[p]&512)!=0) x[m][9]++;
        if((B[p]&1024)!=0) x[m][10]++;
        if((B[p]&2048)!=0) x[m][11]++;
        if((B[p]&4096)!=0) x[m][12]++;
        if((B[p]&8192)!=0) x[m][13]++;
        if((B[p]&16384)!=0) x[m][14]++;
        if((B[p]&32768)!=0) x[m][15]++;
}
}
  Label1->Caption="aa "+IntToStr(x[0][0])+"  "+FloatToStr((timeGetTime()-t1)/1000.);
}
回复 顶

使用道具 举报

 楼主| 发表于 2009-7-3 16:48:46 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2009-7-4 00:57:32 | 显示全部楼层
因为你的循环中有控件,你每次执行大循环时都要初始化一个数组,这非常耗时间,而你的c代码中数组只初始化一次,所以不公平。公平的比较应该将初始化数组放在大循环外,你再试试。
回复 顶

使用道具 举报

 楼主| 发表于 2009-7-4 01:09:10 | 显示全部楼层
明天试试看,谢谢你这么晚还来回答问题!
回复 顶

使用道具 举报

发表于 2009-7-4 05:26:15 | 显示全部楼层
呵呵,有时差~
另 肯定是执行起来没有c快啦,我也想看看到底慢多少。
回复 顶

使用道具 举报

 楼主| 发表于 2009-7-6 09:32:47 | 显示全部楼层
本帖最后由 flow 于 2009-7-6 09:34 编辑

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

 楼主| 发表于 2009-7-6 09:38:38 | 显示全部楼层
呵呵,有时差~
另 肯定是执行起来没有c快啦,我也想看看到底慢多少。
foolooo 发表于 2009-7-4 05:26


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

使用道具 举报

 楼主| 发表于 2009-7-6 16:48:50 | 显示全部楼层
循环中做运算时使用了属性节点,这样很占用时间。换成shift-register后,速度快了很多。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2009-7-6 18:28:56 | 显示全部楼层
我也相信会有时差,不过试了试,加了运算后,为什么会这么慢~~~~
看你的发帖时间,想问一下,呵呵,是不是比较牛的人晚上都不用睡觉喃~~~~
flow 发表于 2009-7-6 09:38

我说的有时差是因为我在国外所以有时差啦。。。。
回复 顶

使用道具 举报

发表于 2009-7-6 18:31:55 | 显示全部楼层
还有“不公平”的地方是,你c中建立的是二维数组,而你的lv中建立1维数组之后取subset。如果你开始也建立二维数组然后利用自动索引取出每一行的话我相信速度还会提高的。

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

使用道具 举报

 楼主| 发表于 2009-7-6 23:02:45 | 显示全部楼层
我说的有时差是因为我在国外所以有时差啦。。。。
foolooo 发表于 2009-7-6 18:28


偶确实反应要慢一拍
回复 顶

使用道具 举报

 楼主| 发表于 2009-7-6 23:08:27 | 显示全部楼层
还有“不公平”的地方是,你c中建立的是二维数组,而你的lv中建立1维数组之后取subset。如果你开始也建立二维数组然后利用自动索引取出每一行的话我相信速度还会提高的。

不过别指望lv快过c就是了。。。
foolooo 发表于 2009-7-6 18:31


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

现在知道,用LV不仅要考虑如何完成功能,还要考虑最优化方法~~~
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-29 12:21 , Processed in 0.072343 second(s), 11 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表