通过LabVIEW优化多核环境下的信号处理性能

发布者:Harmonious222最新更新时间:2010-07-21 来源: NI公司关键字:LabVIEW  多核处理器  信号处理 手机看文章 扫描二维码
随时随地手机看文章

  多核处理器环境下的编程挑战

  摩尔定律问世40余年来,人们业已看到半导体芯片制造工艺水平以一种令人目眩的速度在提高,Intel微处理器的最高主频甚至超过了4G。虽然主频的提升一定程度上提高了程序运行效率,但越来越多的问题也随之出现,耗电、散热都成为阻碍设计的瓶颈所在,芯片成本也相应提高。当单独依靠提高主频已不能实现性能的高效率时,双核乃至多核成为了提高性能的唯一出路。随着AMD率先打破摩尔定律、终结频率游戏后,Intel和AMD都开始逐步推出了基于双核、四核甚至八核的处理器,工程师们逐渐投入到基于多核处理器的新型应用开发中去时,大家开始发现,借助这些新的多核处理器,并在应用开发中利用并行编程技术,可以实现最佳的性能和最大的吞吐量,大大提高应用程序的运行效率。

  然而,业界专家们也同时认识到,对于实际的编程应用,多核处理器的并行编程却是一个巨大的挑战。比尔盖茨是这样论述的:

  “要想充分利用并行工作的处理器的威力,…软件必须能够处理并发性问题。但正如任何一位编写过多线程代码的开发者告诉你的那样,这是编程领域最艰巨的任务之一。”

  比如用C++写一个多线程的程序,程序员必须要非常熟悉 C++,了解如何将C++程序分成多个线程和并在各个线程间进行任务调度,此外还要了解 Windows 多线程的机制,熟悉 Windows API 的调用方法和MFC 的架构等等。在 C++ 上调试多线程程序,更是被很多程序员视为噩梦。

  所以,对于测试测量行业的工程师来说,在传统开发环境下要想获得多核下的效率提升意味着大量而复杂的多线程编程任务,而使得工程师脱离了自动化测试及其信号处理任务本身,于是,要想在当前的多核机器上充分利用其架构和并行运算的优势,反而成为工程师们“不可能”完成的任务。

  LabVIEW降低并行编程的复杂性,快速开发并行构架的信号处理应用

  幸运的是,NI LabVIEW图形化开发平台为我们提供了一个理想的多核处理器编程环境。作为一种并行结构的编程语言,LabVIEW能将多个并列的程序分支自动分配成多个线程并分派到各个处理核上,让一些计算量较大的数学运算或信号处理应用得以提高运行效率,并获取最佳性能。

  我们以自动化测试中最常见的多通道信号处理分析为例。由于多通道中的频率分析是一项占用处理器资源较多的操作,如果能够让程序并行地将每个通道的信号处理任务分配至多个处理器核,对于提高程序执行速度来说,就显得尤为重要。而目前,从LabVIEW编程人员的角度来看,要想获得这一原本“不可能”的技术优势,唯一需要改变的只是算法结构的细微调整,而并不需要复杂且耗时耗力的代码重建工作。

  以双通道采样为例,我们需要分别对高速数字化仪的两个通道上的数据进行快速傅立叶变换(FFT)。假设我们采用的高速数字化仪的两个通道均以100 MS/s采样率采集信号并实时分析。首先,我们来看LabVIEW中对于这一操作的传统顺序编程模型。

利用顺序执行的LabVIEW代码

  图1. 利用顺序执行的LabVIEW代码[page]

  和其他文本编程语言一样,处理多通道信号的传统方法是将各个通道信号按顺序读入并逐通道的进行分析,上面基于LabVIEW的顺序编程模型很好的说明了这点,0、1两通道的数据被按顺序读入后,整合为一路数组,并由一个FFT函数进行信号分析并输出。虽然顺序结构能够顺利地在多核机器上运行,但确不能使得CPU负担得到有效的分摊,因为即使在双核的机器上, FFT程序也只能在一个CPU上被执行,而此时另一个CPU却被闲置了。

  实际上,两个通道的FFT运算相互独立,如果程序能够将两个FFT自动分配到一台双核机器上的的两个CPU上,那么理论上程序的运行效率将提高一倍。在LabVIEW的图形化编程平台上,情况正是如此,我们可以通过并行化处理这两个通道来真正提高算法性能。图2表示了一种采用并行结构的LabVIEW代码,从图形化编程的角度来看,仅仅是增加了一路并行的FFT函数而已。

利用并行执行的LabVIEW代码

  图2. 利用并行执行的LabVIEW代码

  由于数据量越大,信号处理运算在工程应用中所占的处理器时间就越长,所以通过简单的程序改动将原来的信号处理程序并行化,可以改善程序性能,减少了总的执行时间。

对于大于1M采样(100 Hz精度带宽)的数据块,并行方式实现了80%或更高的性能增长

  图3. 对于大于1M采样(100 Hz精度带宽)的数据块,并行方式实现了80%或更高的性能增长。

  图3描述了性能随采集数据块大小(以采样数为单位)增大而提高的精确百分比。事实上,对于更大的数据块,并行算法方法确实实现了近2倍的性能改进。工程师们不需要创建特殊的代码来支持多线程,在多核处理器环境下,只需通过最少的编程调整,利用LabVIEW自动分配每一个线程到多核处理器的特性,可以方便的实现信号处理能力的大幅度提升,从而达到了自动化测试应用的性能改进。[page]

  程序性能的进一步优化

  LabVIEW并行的信号处理算法不仅帮助工程师提高程序性能,而且可以更清楚的划分多个处理器核在项目中的不同用途。比如,将控制采样输入,显示输出和信号分析的模块独立分开。

  以HIL(Hareware-in-the-loop)或在线信号处理应用为例。首先,使用高速数字化仪或高速数字I/O模块来采集信号,并在软件中执行数字信号处理算法。然后,通过另一个模块化仪器生成结果。常见HIL应用包括在线数字信号处理(如滤波、插值等等)、传感器仿真和定制组件模拟等等。

  一般来说,HIL可以使用两种基本的编程结构来完成,单循环结构和带有队列的流水线式多循环结构。单循环结构实现简单,对于小数据块具有较低时延,但单循环结构受限于各个环节的顺序结构而无法实现并发性,例如,由于处理器只能执行一个函数,在处理数据的同时就无法执行仪器IO,所以单循环结构无法有效利用多核CPU的优势。相比之下,多循环结构则能够更好的利用到多核处理器,从而支持高得多的吞吐量。

  对于一项多循环结构的HIL应用来说,可以通过三个独立的while循环和两个队列结构,实现其间的数据传递。在此情况下,第一个循环从仪器采集数据,第二个循环专门执行信号处理分析,而第三个循环将数据写入到另一台仪器。这样的处理方式,也被称之为流水线式信号处理(pipeline)。

带有多个循环与队列结构的流水线式信号处理

  图4.带有多个循环与队列结构的流水线式信号处理。

  图4中,最上面的循环是一个生产者(Producer)循环,它从一个高速数字化仪采集数据,并将其传递至第一个队列结构(FIFO)。中间的循环同时作为生产者和消费者(Consumer)工作。每次迭代中,它从队列结构中接收(消费)若干个数据集,并以流水线的方式独立为四个不同数据块的内容进行7阶低通滤波的处理,同时中间的循环也作为一个生产者工作,将处理后的数据传递至第二个队列结构。最后,最下面的循环将处理后的数据写入至高速数字I/O模块。于是,在多核的系统下, LabVIEW能够自动地将上面的程序结构中独立运行的的不同循环分配在不同的处理器上,同时,还可以根据CPU的运行情况将中间循环中四个数据块的信号处理任务也分配在不同的处理器上,实现了在多核处理器环境下的性能改进。

  并行处理算法改善了多核CPU的处理器利用率。事实上,总吞吐量取决于两个因素,处理器利用率和总线传输速度。通常,CPU和数据总线在处理大数据块时工作效率最高。而且,我们可以进一步使用具有更快传输速度的PXI(PCI) Express仪器,来减小数据传输时间。

  利用NI强大的并行性计算的优势以及PCIe高速数据流传输加上Intel的多核技术,在DELL的PowerEdge 2950八核处理器上,以10KHz(2.56MB/s)的速率同步采样并处理128个通道的数据,NI帮助ASDEX Tokamak——德国最先进的核聚变装置,完成了“不可能完成的任务”——为了保证Tokamak装置中等离子体的高速稳定的运转,将其装置外壁上的88个磁感应器上的大量数据转换成64*128个点格上的偏微分方程组,并同时在短短的1ms内完成了整个计算过程!

  正如德国开发负责人Dr. Louis Giannone所说的:

  “利用LabVIEW编程所完成的并行化应用控制,我们在8核机器上将速度提高了5倍,使得我们成功达到1ms闭环控制速率的要求!”。

关键字:LabVIEW  多核处理器  信号处理 引用地址:通过LabVIEW优化多核环境下的信号处理性能

上一篇:基于虚拟仪器的频率测量软件系统研究与设计
下一篇:八通道串口数据采集与处理虚拟仪器系统设计

推荐阅读最新更新时间:2024-03-30 22:11

一种新型的基于LabView设计的脉压模拟器
摘 要: 提出了一种新型的基于LabView设计的脉压模拟器,介绍了其设计思想、系统的软硬件构成及应用。 高血压是世界上最常见的心血管疾病,也是最大的流行病之一。此病常引起心、脑、肾等脏器的并发症,严重危害着人类的健康。因此经常测量血压,对早期预防和及时治疗具有极其重要的意义。由于电子血压计具有无创伤检测、携带方便、数字化、快速测量和准确性等优点,现已进入千家万户。血压计在投入使用之前的标定工作十分重要。本文提出了一种新型的脉压模拟器,由软件产生脉压波形(称为动压),通过硬件与标准的人体舒张压、收缩压(这两者称为静压)进行叠加,输出正常人体血压波形,从而达到标定血压计的目的。   脉压模拟器是一个仿真系统,同时
[医疗电子]
一种新型的基于<font color='red'>LabView</font>设计的脉压模拟器
TS201在数字信号处理设计中的应用
0 引言 当前信号处理的发展趋势是可重构、可扩展的通用信号处理系统。即通过灵活的软件编程来适应处理问题的变化和算法的发展,通过简单的硬件扩展来适应规模处理的变化,以提高信号处理系统的可编程能力和升级能力。而采用具备强大处理能力的ADSP-TS201S芯片可以对大量的数据作实时处理。TS201S可在600 MHz的内核时钟下完成每秒48亿次乘累加(MAC)运算和每秒36亿次浮点运算(FLOP),具有比同类处理器高出50%~100%的处理能力。它内部集成了24 MB的存储器,其片内大存储量与高达33.6 Gb/s的内部带宽是提高性能的关键。TS201S的外部64位数据总线和32位地址总线时钟最高可达125 MHz。 本文通过GA3
[应用]
关于Labview集合点的使用
有的时候,我想用两段并行的程序来实现某些功能,但是有要求他们在某些时候能够互相等一等,完成同步功能。看了看labview的帮助文件,觉得使用同步里面的集合点应该可以实现。 ​ 帮助文件里如此描述集合点:集合点VI用于在执行的某个特定点处同步两个或多个独立并行的任务。每个到达集合点的任务将等待,直到集合点处等待的任务达到指定的数量后,所有任务才继续执行。 于是我在我的程序里面这样使用了集合点,用以在每次执行两个程序段的第一个顺序帧的时候互相同步一下。我是怕他们的延时导致越往后面越会出现累积误差.(这个程序是采用两个独立的循环控制路口的两部分红绿灯,是通过延时实现的计秒,就怕延时的微小误差越积累越多,加一个同步就消除了)。
[测试测量]
LabVIEW中图片下拉列表的妙用
有的时候,我们想在前面板显示不同的状态,类似于围棋中的棋子,我们就需要​​黑子、白子、无子三种状态。如果我们使用LED来表示的话,就只能存在两种状态,很显然不符合我们的要求,于是我们就需要使用图片下拉列表来表达黑子、白子、无子。 至于操作方法,是这样的。 先拖进来一个图片下拉列表控件,然后添加到三项。一次选择第一项至第三项,首先在外面将需要的图片复制到粘贴板,然后在labview图片下拉列表控件邮件-​从剪贴板导入图片即可。
[测试测量]
基于LabVIEW串口通信的数据采集串口收录系统设计
可视化编程软件LabVIEW不仅能很轻松地将各种软硬件连接起来,还提供了强大的后续数据处理能力。与传统仪器相比,虚拟仪器提高了仪器资源的可再用性和可移植性,只需在原有基础上作相应改动即可增强它的功能,无需更换硬件设备 。基于此,本文在研究LabVIEW的基础上,开发了基于LabVIEW的串口收录系统,以单片机为核心的硬件部分作为前端数据采集系统,可实现200 kHz的采样速率、16 bit的分辨率,具有采样率高、应用性强等优点。该收录系统将采集数据以曲线方式显示在上位机上,以二进制.dat格式记录,并且可回放记录的数据,这是该系统的创新点。 1 系统总体方案 系统总体方案框图如图1所示,主要由前端数据采集和上位机波形显示记录两大
[测试测量]
基于<font color='red'>LabVIEW</font>串口通信的数据采集串口收录系统设计
LabVIEW的VI图标
  每个VI都由一个图标表示,位于前面板和程序框图窗口的右上角,如图1所示。   图1 VI图标   图标是VI的图形化表示,可包含文字、图形或图文组合。如果将VI 图1VI图标当作子VI被其他VI调用,那么在其他VI程序框图中会显示该子VI的图标。在VI图标上单击鼠标右键,从弹出的快捷菜单中选择 编辑图标 ,即打开 图标编辑器 ,如图2所示。 图标编辑器窗口中,编辑工具位于左侧,中间为图标编辑区,右侧为颜色数选择。从编辑工具中选择合适的工具可在图标编辑区进行图标设计。编辑区的最小单元为一格,整个编辑区共有32 JZ格。图标编辑工具对应的名称及功能如表1所示。   图2图标编辑   表1图标编辑工具名称及功
[测试测量]
<font color='red'>LabVIEW</font>的VI图标
LabVIEW编译程序设计
  编译程序设计是一个复杂的话题,即使对内行的软件工程师来说也要考虑很多专业知识。   NI LabVIEW软件是一种多规范的图形化编程环境,含有多种概念,包括数据流,面向对象,以及事件驱动编程。LabVIEW也是跨越多种平台的,能够很好地用于多种操作系统(OSs),芯片组,嵌入式设备,以及现场可编程门阵列(FPGAs)。LabVIEW编译程序是一种精密的系统,在过去的20年中具有令人瞩目的发展。 探索NI公司的LabVIEW编译程序的处理过程以及近来编译程序的创新。   LabVIEW编译程序处理过程   首先一个VI的编译是类的扩展,主要负责将隐含的类解析为适于终端输出与检查句法错误的类型。在类扩展之后,VI从编辑模型转
[测试测量]
<font color='red'>LabVIEW</font>编译程序设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新测试测量文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved