LabVIEW性能和内存管理 1

简介: LabVIEW性能和内存管理 1

LabVIEW性能和内存管理 1


本文介绍LabVIEW性能和内存管理的几个建议


目的:


了解LabVIEW执行系统


学习通过以下方法提高性能:


减少数据拷贝


减少总体内存使用量


了解VI执行属性


LabVIEW 执行系统:执行系统是LabVIEW的一部分,负责实际运行代码。


启用自动并行,这是LabVIEW特有的,而其他语言需要手动线程管理。


工作方式类似于线程池


作业队列:从队列中提取作业的一组线程;作业(“队列元素”)是要执行的VI代码片段。


每个执行系统一个队列:用户界面、标准、I / O工具、数据采集、其他1、


其他2、定时循环


每个执行系统都有多个线程。异常:UI只有一个线程。


这是执行系统如何工作的一个LabVIEW模型。对于每个执行系统(这里显示了三个),我们创建一个队列。放在队列上的数据表示要运行的已编译的VI代码片段。当VI的一部分准备好运行时,它被放到执行系统系统队列中。


每个执行系统都有一个或多个线程。每个线程都有一个循环,从队列中提取元素并执行该元素的代码。UI线程只有其中一个线程,但其他执行系统有多个线程共享相同的队列。当VI上的代码并行运行时,它是由其执行系统的不同线程处理的。

LabVIEW聚类算法


除了操作系统的抢占式多任务处理,LabVIEW还采用了协作式多任务处理系统。在编译过程中,LabVIEW分析VIs来定位可以在所谓的簇中一起执行的节点组。每个优先级和执行系统组合都有一个运行队列数据结构,该结构保留了哪些块可以一起运行。当执行系统激活一个线程时,执行系统从运行队列中检索并执行一个集群。当执行系统完成执行时,它将满足输入条件的额外块存储在运行队列上。这允许在任何可用的执行线程中执行框图。如果框图包含足够的并行性,它可以在所有线程中同时执行。


LabVIEW不会永久地将代码块分配给特定的线程。下次运行VI时,LabVIEW可能会使用不同的线程执行一个集群。


每个集群产生一段可以由LabVIEW安排的代码。在一个集群中,LabVIEW没有提供并行性。在集群之间,LabVIEW可以使用它的执行系统进行多任务处理。


LabVIEW聚类算法


上面所示的块表示框图的开始和结束。当两个For循环执行时,群集处于“休眠”状态,并被“唤醒”以完成VI(两个除法函数)。


为VI生成的代码假定存在LabVIEW执行系统。每个集群在VI的数据空间中都有一个记录,称为QElement。QElement可以放置在一个名为“runQ”的队列中,LabVIEW执行系统使用该队列来调度相关的代码部分。


通常,LabVIEW代码中的节点在继续之前必须等待一些东西。例如,队列或SubVIs可能正在被另一个线程使用,或者您可能在调试时进行单步操作。在这些情况下,VI代码的队列元素将被放入等待队列中,由它所等待的对象处理。在将VI代码放入等待队列后,它返回到运行它的执行系统线程,以便运行另一段代码。这被称为合作多任务处理。当等待队列上的代码段准备再次运行时,它将从等待队列中取出,然后放回到执行系统队列中。最终(可能是立即)该队列元素将再次从执行队列中取出并运行。


有时VIs会自动停止执行,以便允许其他代码运行。这可以防止长循环占用所有的执行时间。当发生这种情况时,VI代码只是返回到执行系统,并带有立即将其放回队列的指令。在其他代码有机会运行之后,这段VI代码将再次从队列中取出并运行。


任何时候,当一段VI代码由于某种原因不得不休眠时,该代码的队列元素会跟踪它停止的位置,以便下次它被调度时可以从相同的地方开始。


有些节点有首选的执行系统。最常见的首选执行系统是UI线程。有些节点必须运行在UI线程上。例如,VI Server属性节点和VI Server调用节点和打开VI引用节点必须运行在UI线程中。(此限制不适用于用于访问DAQ、LV类或其他使用属性/调用节点的类型的属性/调用节点。)此外,每个VI都可以指定首选的执行系统。默认值是“Same as caller”,这意味着VI可以在任何执行系统中运行。


当一个节点想要运行但处于错误的执行系统中时,它会导致队列元素“进入睡眠状态”,然后在另一个执行系统中被唤醒。回想一下,这意味着代码将停止执行,并将自己放在它想要运行的执行系统的队列中。当另一个执行系统有时间时,它将把元素拉回队列并执行它。这种转换需要时间,因此可能会导致性能问题。


为了避免这种情况,应该尽量避免不必要的UI代码(如VI服务器属性),并对SubVIs使用“Same ascaller”。有两种情况下,可能想为VI使用特定的首选执行系统:


如果VI中有UI代码,那么该代码必须在UI线程中运行。当你使用“same as caller”时,你很可能会在执行系统中而不是UI线程中运行。这意味着VI必须切换执行系统才能进入UI线程。然后,因为VI必须返回到它开始时所在的同一个执行系统,然后才能返回到调用者,所以它必须切换回来。如果这发生在一个循环中,那么它会显著影响性能。如果您将VI标记为优先使用UI线程,那么调用者可以在调用之前切换到UI线程。这可能意味着切换只在循环前后发生,而不是每次都发生。


如果VI中有一个长期运行的高优先级循环,用于处理数据采集之类的任务,那么可以将该VI标记为在其他执行系统(仪器I/O、数据采集、其他1或其他2)中运行,这样它就不必与其他Vis竞争执行系统的时间。记住,如果你不是运行在实时操作系统上,你仍然需要担心操作系统调度程序。使用定时循环来控制优先级会更可靠,而在实时操作系统上这样做是确保代码以正确的优先级运行的最可靠方法。


需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。

相关文章
|
3月前
|
存储 缓存 监控
|
2月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
193 77
|
2月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
128 62
|
2月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
77 31
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
110 7
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
46 4
|
2月前
|
监控 安全 程序员
如何使用内存池池来优化应用程序性能
如何使用内存池池来优化应用程序性能
|
2月前
|
存储 缓存 Java
结构体和类在内存管理方面的差异对程序性能有何影响?
【10月更文挑战第30天】结构体和类在内存管理方面的差异对程序性能有着重要的影响。在实际编程中,需要根据具体的应用场景和性能要求,合理地选择使用结构体或类,以优化程序的性能和内存使用效率。
|
3月前
|
存储 分布式计算 安全
阿里云服务器内存型r7、内存型r8y、内存型r8i实例规格性能对比与选择参考
在选择阿里云服务器实例规格时,针对内存密集型应用和数据库应用,内存型r7、内存型r8y和内存型r8i实例是这部分应用场景选择最多的热门实例规格。为了帮助大家更好地了解这三款实例的区别,并为选择提供参考,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比。让大家了解一下他们之间的不同,以供参考选择。

热门文章

最新文章