Qizhen's profileLabVIEWPhotosBlogListsMore Tools Help

Blog


    缓存重用结构

    一、缓存重用

        在《LabVIEW 程序的内存优化》一文中有一个利用移位寄存器来降低 VI 内存的例子。
        下面这个 VI 大约会占用了2.7M的内存空间


    图1: 对数组进行数值运算的顺序执行程序

        给它加上一个移位寄存器,如下图所示,内存占用就降低到只有不到400k了。


    图4: 利用移位寄存器实现缓存重用

        这其实是利用了移位寄存器两端接线端指向的是同一块内存这一特性,主动的告诉 LabVIEW 这段代码上的每个加法节点的输入输出数据可以使用同一块内存。避免的 LabVIEW 分配不必要的数据缓存。
        但是代码还是不够完美,本来不需要循环,却非得摆上一个只执行一次的循环结构。感觉上总是有些别扭。
        这个问题终于在 LabVIEW 8.5 中被解决了。LabVIEW 8.5 中多出了一个结构——缓存重用结构,专门用于告诉 LabVIEW 在某段代码上为输入输出数据做缓存重用。上面这个程序用新的缓存重用结构来写就是这样的:

    http://byfiles.storage.live.com/y1p9T-DUOhUWBbxCDqU5xR_3vZImyBX5MCDwI8dhaE6FA0kW32SNccMkAUXGvuOfA1RknsVBZo5450
    图3:利用缓存重用结构实现缓存重用

    二、使用缓存重用结构

        缓存重用结构与其它结构不在同一个函数选板上。这是缓存重用结构不是一个功能性、或改变程序流程的结构。它的使用不会改变代码的功能,仅仅会改变代码的效率。
        要使用缓存重用结构,需要打开函数选板的 Programming->Application Control->Memory Control。第一个选项就是他了。


    图4:缓存重用结构在函数选板上的位置

        缓存重用结构为了方便使用,并不是简单的作为循环加移位寄存器的替换,它还有一些可选的边框节点,帮助编程者处理不同的数据类型。
        刚刚被拖到程序框图上的是一个光滑的黄色方框,要使用它的缓存重用功能还要为打算从用的内存,根据它的数据类型选择相应的边框节点。在黄色的边框上点击鼠标右键,弹出菜单的最后几项就是可供选择的边框节点类型。如图5所示。
        每种边框节点都是成对出现的,一个在输入端,另一个在输出端。

    http://byfiles.storage.live.com/y1p9T-DUOhUWBZmx5VNM43UhEprFSz2Paazp1a2y8_V2WZ43IgjPj89TexlBb1Ght0Tw5DR_x0fNCs
    图5:添加边框节点

    三、边框节点

    1. 数组元素索引和替换节点

        这对节点用于改变数组中某个元素的值。输入的数组数据连到缓存重用结构左面的数据索引节点上,结构内得到的数据,就是需要处理的元素的数值。

    <正在写>

    Comments (3)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Qizhen Ruanwrote:
    传入移位寄存器时,还要看数据线有没有分叉,是从一个变量传过来的,还是从一个常量传过来的。如果是从变量传入,没有数据线分叉是不需拷贝的。
    移位寄存器的右边也有黑点是与你的后续程序有关的。如果把它连到一个可重用的节点上是不会有数据拷贝的。
    Mar. 11
    gufei sunwrote:
    请问,使用移位寄存器的方法缓存重用时,数组传入寄存器的时候,labview有没有复制数据?仔细看,移位寄存器的右边也有黑点啊!
    Mar. 10
    arrowpig xuwrote:
     LabVIEW更新好快啊,我才离开NI两个礼拜就出来这么新的东西。现在LabVIEW对内存的控制越来越精确了。最好能够智能化的实现这样的优化才好。在C语言里面,所有的内存使用很多都归结到malloc/free。这使得设计一些高效的内存库成为可能。但是LabVIEW得内存是自动处理的。最后也能有个库来模块化内存就好了。
    Aug. 4

    Trackbacks

    The trackback URL for this entry is:
    http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!2442.trak
    Weblogs that reference this entry
    • None