当前位置: 首页 > news >正文

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开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

http://www.lryc.cn/news/12906.html

相关文章:

  • 【go语言grpc之client端源码分析二】
  • centos7安装RabbitMQ
  • node基于springboot 口腔卫生防护口腔牙科诊所管理系统
  • Linux常用命令之find命令详解
  • CMake 入门学习4 软件包管理
  • 【数据库数据乱码错误】存进去的数据乱码(???)
  • rewrite中的if、break、last
  • JavaSE-线程池(5)- 建议使用的方式
  • 城市轨道交通供电系统研究(Matlab代码实现)
  • 什么是 RESTful 风格?
  • 从业6年,对敏捷和自动化测试的一点心得
  • ThreeJS 之界面控制
  • 【查找算法】解析学习四大常用的计算机查找算法 | C++
  • Android实例仿真之一
  • 软考高级-信息系统管理师之重要工具和技术的口语化表示(最新版)
  • 基于springboot+vue的个人健康信息服务平台
  • SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】
  • 测试2:编写测试用例的方法
  • docker安装配置镜像加速器-拉取创建Mysql容器示例
  • WSL1和WSL2相互转换以及安装路径迁移相关问题
  • 系统分析*
  • 【redis】持久化:RDB和AOF
  • 2023Python接口自动化测试实战教程,附视频实战讲解
  • 【原创】java+swing+sqlserver药品管理系统设计与实现
  • 软考高级信息系统项目管理师系列之二十七:信息文档管理与配置管理
  • 软考高级-信息系统管理师之项目管理基础(最新版)
  • leetcode240+Search a 2D Matrix II+从右上角开始
  • 0xL4ugh 2023
  • Mybatis(4)之跟着老杜做一个简单的银行转账会话
  • VBA提高篇_ 22 事件处理