LabVIEW使用实时跟踪查看器调试多核应用程序

简介: LabVIEW使用实时跟踪查看器调试多核应用程序

LabVIEW使用实时跟踪查看器调试多核应用程序


随着多核CPU的推出,开发人员现在可以在LabVIEW的帮助下充分利用这项新技术的功能。并行编程在为多核CPU开发应用程序时提出了新的挑战,例如同步多个线程对共享内存的并发访问以及处理器关联。LabVIEW可自动处理大多数多线程任务,同时使用户能够灵活地将线分配给他们选择的CPU(或同一CPU的内核)。LabVIEW2014实时模块支持在PharLap ETS目标上具有最多12个内核的CPU。以前,即使目标有更多可用内核,该模块也仅支持8个CPU内核。


如果要开发实时应用程序,监视详细CPU使用情况和其他事件的最佳方法是从实时目标捕获执行跟踪。借助实时跟踪查看器,可以查看和分析实时任务的执行轨迹,包括虚拟仪器(VI)和操作系统(OS)线程。实时跟踪查看器由两部分组成:检测VI和跟踪查看实用程序,检测VI需要围绕要跟踪其执行的代码添加。跟踪查看实用程序用于查看捕获的执行跟踪。在LabVIEW实时模块和LabWindows/CVI实时模块的2013和先前版本中,实时跟踪观察器被打包为一个独立的工具包(实时执行追踪工具包)。


访问低级执行信息对于优化和调试实时应用程序至关重要,可以轻松识别抖动源,例如处理器关联、内存分配、优先级继承或争用条件。


由不同优先级的多个线程使用共享资源可能会导致应用程序出现意外行为。表1显示了一些共享资源以及应用程序中可能出现的潜在问题。


以下两个屏幕截图表示在嵌入式多核实时目标上运行的程序的执行跟踪。NILabVIEW中的并行编程是使用两个定时循环(TL)结构实现的。每个TL都分配给不同的CPU。给定TL中的所有代码将在同一CPU上执行。处理器关联将一直保留,直到程序完成执行。图1和图2清楚地显示了每个线程的CPU关联性。与给定CPU关联的线程将突出显示,而其余线程将灰显。另请注意在不同CPU上运行的线程的并行执行。此执行跟踪显示与CPU0关联的线程。其余线程灰显。


图1.此执行跟踪显示与CPU0关联的线程


图2.此执行跟踪显示与CPU1关联的线程。


共享资源


时间关键型线程(需要在确定性时间内执行的线程)使用共享资源可能会给实时应用程序带来额外的抖动。其中一个共享资源是LabVIEW内存管理器。它负责动态分配内存。


当内存管理器拥有正常优先级程序时,其余线程(包括时间关键线程)必须等待共享资源可用。在这种情况下,时间关键型线程不可避免地会引入抖动。为了解决此问题,线程调度程序临时提升正常优先级的应用程序,使其在时间关键型线程中运行,以便它可以更快地完成并释放内存管理器。这种现象称为优先级继承或优先级倒置。为了避免这种情况,NI建议避免使用共享资源。内存管理器的解决方案是为数组预分配内存。


当混合两种优先级调度方案时,有时会增强优先级继承-在VI级别和定时循环级别。例如,在图3中,可以看到一个时间关键型子VI(红色图标)和一个定时循环争夺相同的内存资源。时间关键型子VI和定时循环之间共享资源的竞争可能导致优先级继承。使用两种不同优先级分配方案的示例。


图3.使用两种不同优先级分配方案的示例。


图4是另一个程序的跟踪,该程序具有正常优先级子VI和共享公共资源(内存管理器)的时间关键子VI。绿色标志显示动态内存分配,橙色标志显示优先级继承。时间关键型线程的执行被中断,以便可以提升正常优先级子VI以在时间关键型线程中运行,从而更快地释放共享资源。这最终会影响时间关键子VI的确定性。绿色标志显示动态内存分配


图4.绿色标志显示动态内存分配(访问内存管理器)。



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

相关文章
|
5天前
|
监控 Linux API
LabVIEW监控实时嵌入式目标上的CPU和内存使用情况
LabVIEW监控实时嵌入式目标上的CPU和内存使用情况
17 4
|
5天前
|
数据采集 监控 异构计算
LabVIEW编程LabVIEW开发高级数据采集技术定时与触发 例程与相关资料
LabVIEW编程LabVIEW开发高级数据采集技术定时与触发 例程与相关资料
22 7
|
5天前
|
机器学习/深度学习 计算机视觉
LabVIEW开发自动读取指针式仪表测试系统
LabVIEW开发自动读取指针式仪表测试系统
21 7
|
5天前
|
存储 编解码 Windows
LabVIEW程序代码更新缓慢
LabVIEW程序代码更新缓慢
13 1
|
5天前
|
传感器
LabVIEW编程LabVIEW开发DAQ采集消除串扰 例程与相关资料
LabVIEW编程LabVIEW开发DAQ采集消除串扰 例程与相关资料
25 9
|
5天前
|
数据采集 芯片 异构计算
LabVIEW编程LabVIEW开发高级数据采集技术 同步 例程与相关资料
LabVIEW编程LabVIEW开发高级数据采集技术 同步 例程与相关资料
26 7
|
7月前
|
JSON 监控 数据格式
实时进程监控:Python脚本的开发与应用
Python作为一种多才多艺的编程语言,为开发实时进程监控工具提供了广泛的可能性。本文将介绍如何使用Python开发一个简单但强大的实时进程监控工具,以及示例代码的应用。
206 0
LabVIEW应用程序后台运行
本篇博文分享LabVIEW虽然不常用但是很有意思的一个开发技巧:应用程序后台运行。运行程序后自动隐藏前面板窗口和任务栏图标。
|
存储 前端开发 Java
移动设备交互应用 大作业(三)
移动设备交互应用 大作业(三)
134 0
移动设备交互应用 大作业(三)
|
API 语音技术 数据安全/隐私保护
移动设备交互应用 大作业(二)
移动设备交互应用 大作业(二)
120 0
移动设备交互应用 大作业(二)