利用NI LabVIEW优化多核处理器环境下的信号处理性能.docx
- 文档编号:9295021
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:360.70KB
利用NI LabVIEW优化多核处理器环境下的信号处理性能.docx
《利用NI LabVIEW优化多核处理器环境下的信号处理性能.docx》由会员分享,可在线阅读,更多相关《利用NI LabVIEW优化多核处理器环境下的信号处理性能.docx(16页珍藏版)》请在冰豆网上搜索。
利用NILabVIEW优化多核处理器环境下的信号处理性能
利用NILabVIEW优化多核处理器环境下的信号处理性能
0ratings|0.00outof5
Overview
作者:
NI中国资深技术市场工程师汤敏
NI中国技术市场工程师倪斌
TableofContents
1多核处理器环境下的编程挑战
2LabVIEW降低并行编程的复杂性,快速开发并行构架的信号处理应用
3程序性能的进一步优化
4更多相关资源
多核处理器环境下的编程挑战
摩尔定律问世40余年来,人们业已看到半导体芯片制造工艺水平以一种令人目眩的速度在提高,Intel微处理器的最高主频甚至超过了4G。
虽然主频的提升一定程度上提高了程序运行效率,但越来越多的问题也随之出现,耗电、散热都成为阻碍设计的瓶颈所在,芯片成本也相应提高。
当单独依靠提高主频已不能实现性能的高效率时,双核乃至多核成为了提高性能的唯一出路。
随着AMD率先打破摩尔定律、终结频率游戏后,Intel和AMD都开始逐步推出了基于双核、四核甚至八核的处理器,工程师们逐渐投入到基于多核处理器的新型应用开发中去时,大家开始发现,借助这些新的多核处理器,并在应用开发中利用并行编程技术,可以实现最佳的性能和最大的吞吐量,大大提高应用程序的运行效率。
然而,业界专家们也同时认识到,对于实际的编程应用,多核处理器的并行编程却是一个巨大的挑战。
比尔盖茨是这样论述的:
“要想充分利用并行工作的处理器的威力,…软件必须能够处理并发性问题。
但正如任何一位编写过多线程代码的开发者告诉你的那样,这是编程领域最艰巨的任务之一。
”
比如用C++写一个多线程的程序,程序员必须要非常熟悉C++,了解如何将C++程序分成多个线程和并在各个线程间进行任务调度,此外还要了解Windows多线程的机制,熟悉WindowsAPI的调用方法和MFC的架构等等。
在C++上调试多线程程序,更是被很多程序员视为噩梦。
所以,对于测试测量行业的工程师来说,在传统开发环境下要想获得多核下的效率提升意味着大量而复杂的多线程编程任务,而使得工程师脱离了自动化测试及其信号处理任务本身,于是,要想在当前的多核机器上充分利用其架构和并行运算的优势,反而成为工程师们“不可能”完成的任务。
LabVIEW降低并行编程的复杂性,快速开发并行构架的信号处理应用
幸运的是,NILabVIEW图形化开发平台为我们提供了一个理想的多核处理器编程环境。
作为一种并行结构的编程语言,LabVIEW能将多个并列的程序分支自动分配成多个线程并分派到各个处理核上,让一些计算量较大的数学运算或信号处理应用得以提高运行效率,并获取最佳性能。
我们以自动化测试中最常见的多通道信号处理分析为例。
由于多通道中的频率分析是一项占用处理器资源较多的操作,如果能够让程序并行地将每个通道的信号处理任务分配至多个处理器核,对于提高程序执行速度来说,就显得尤为重要。
而目前,从LabVIEW编程人员的角度来看,要想获得这一原本“不可能”的技术优势,唯一需要改变的只是算法结构的细微调整,而并不需要复杂且耗时耗力的代码重建工作。
以双通道采样为例,我们需要分别对高速数字化仪的两个通道上的数据进行快速傅立叶变换(FFT)。
假设我们采用的高速数字化仪的两个通道均以100MS/s采样率采集信号并实时分析。
首先,我们来看LabVIEW中对于这一操作的传统顺序编程模型。
图1.利用顺序执行的LabVIEW代码
和其他文本编程语言一样,处理多通道信号的传统方法是将各个通道信号按顺序读入并逐通道的进行分析,上面基于LabVIEW的顺序编程模型很好的说明了这点,0、1两通道的数据被按顺序读入后,整合为一路数组,并由一个FFT函数进行信号分析并输出。
虽然顺序结构能够顺利地在多核机器上运行,但确不能使得CPU负担得到有效的分摊,因为即使在双核的机器上,FFT程序也只能在一个CPU上被执行,而此时另一个CPU却被闲置了。
实际上,两个通道的FFT运算相互独立,如果程序能够将两个FFT自动分配到一台双核机器上的的两个CPU上,那么理论上程序的运行效率将提高一倍。
在LabVIEW的图形化编程平台上,情况正是如此,我们可以通过并行化处理这两个通道来真正提高算法性能。
图2表示了一种采用并行结构的LabVIEW代码,从图形化编程的角度来看,仅仅是增加了一路并行的FFT函数而已。
图2.利用并行执行的LabVIEW代码
由于数据量越大,信号处理运算在工程应用中所占的处理器时间就越长,所以通过简单的程序改动将原来的信号处理程序并行化,可以改善程序性能,减少了总的执行时间。
图3.对于大于1M采样(100Hz精度带宽)的数据块,并行方式实现了80%或更高的性能增长。
图3描述了性能随采集数据块大小(以采样数为单位)增大而提高的精确百分比。
事实上,对于更大的数据块,并行算法方法确实实现了近2倍的性能改进。
工程师们不需要创建特殊的代码来支持多线程,在多核处理器环境下,只需通过最少的编程调整,利用LabVIEW自动分配每一个线程到多核处理器的特性,可以方便的实现信号处理能力的大幅度提升,从而达到了自动化测试应用的性能改进。
程序性能的进一步优化
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的PowerEdge2950八核处理器上,以10KHz(2.56MB/s)的速率同步采样并处理128个通道的数据,NI帮助ASDEXTokamak——德国最先进的核聚变装置,完成了“不可能完成的任务”——为了保证Tokamak装置中等离子体的高速稳定的运转,将其装置外壁上的88个磁感应器上的大量数据转换成64*128个点格上的偏微分方程组,并同时在短短的1ms内完成了整个计算过程!
正如德国开发负责人Dr.LouisGiannone所说的:
“利用LabVIEW编程所完成的并行化应用控制,我们在8核机器上将速度提高了5倍,使得我们成功达到1ms闭环控制速率的要求!
”。
利用NILabVIEW优化多核处理器环境下的自动化测试应用
1ratings|5.00outof5
Readin|
Overview
LabVIEW为自动化测试应用提供了一种独特的、易于使用的图形化编程环境。
然而,其在多核处理器上执行速度的改善,应归功于LabVIEW将代码动态分配至不同的CPU能力。
学习掌握如何优化LabVIEW应用,从而充分利用并行编程技术。
TableofContents
1多线程编程的挑战
2实现并行测试算法
3配置定制的并行测试算法
4优化硬件在环应用
5总结
多线程编程的挑战
迄今为止,处理器技术的创新为我们带来了配有工作于更高时钟速率的CPU的计算机。
然而,随着时钟速率逼近其理论上的物理极限,人们开始投入到具备多个处理核的新型处理器的开发。
借助这些新型多核处理器,工程师们在自动化测试应用开发中利用并行编程技术,可以实现最佳的性能和最大的吞吐量。
爱德华×李博士——加州大学伯克利分校电气与计算机工程教授——阐述了并行处理的技术优势。
“许多技术专家预言,对于摩尔定律的终结回应,将是日趋并行的计算机架构。
如果我们希望继续提高计算性能,计算机程序必须能够利用这种并行机制。
”
而且,业界专家业已认识到,对于编程应用,如何利用多核处理器将是一个巨大的挑战。
比尔×盖茨——微软公司的缔造者——是这样论述的:
“要想充分利用并行工作的处理器的威力,…软件必须能够处理并发性问题。
但正如任何一位编写过多线程代码的开发者告诉你的那样,这是编程领域最艰巨的任务之一。
”
幸运的是,NILabVIEW软件,通过一个直观的、用于创建并行算法的API,为我们提供了一个理想的多核处理器编程环境,所创建的并行算法可以将多个线程动态分配至一项给定的应用。
事实上,您可以利用多核处理器优化自动化测试应用,以获取最佳性能。
而且,PXIExpress的模块化仪器增强了这一技术优势,因为这些仪器利用了PCIExpress总线所能支持的高数据传输速率。
得益于多核处理器和PXIExpress仪器的两个具体应用是:
多通道信号分析和在线处理(硬件在环)。
在此白皮书中,我们将评估各种并行编程技术,并描述每项技术所带来的性能优势。
实现并行测试算法
一项常见的得益于并行处理的自动化测试应用便是多通道信号分析。
由于频率分析是一项占用处理器运行时间较多的操作,您可以并行运行测试代码,将每个通道的信号处理分配至多个处理器核,提高执行速度。
从编程人员的角度来看,为获得这一技术优势,唯一需要改变的只是测试算法结构的细微调整。
为描述这一过程,现比较用于多通道频率分析(快速傅立叶变换或FFT)的两个算法的执行时间,它们分别位于一个高速数字化仪的两个通道上。
NIPXIe-512214-位高速数字化仪的两个通道均以最高采样率(100MS/s)采集信号。
首先,我们察看LabVIEW中对应于这一操作的传统顺序编程模型。
图1.利用顺序执行的LabVIEW代码
采集来自数字化仪的两个通道的信号
图1中,两个通道的频率分析均在一个FFT快速VI中完成,它顺序分析每个通道信号。
虽然上述算法也可以在多核处理器环境下有效执行,但是,您还可以通过并行处理每个通道来进一步提高算法性能。
如果您剖析上述算法,就会发现完成FFT所需的时间要比从高速数字化仪采集数据长得多。
通过每次获取各个通道的数据并且并行执行各个通道的FFT,可以显著降低处理时间。
图2表示了一个采用并行方法的新的LabVIEW模块框图。
图2.利用并行执行的LabVIEW代码
顺序获取数字化仪的每个通道的数据。
值得注意的是如果两次数据获取均来自不同的仪器,那么您可以彻底并行完成这些操作。
然而,由于FFT占用大量的处理器时间,您仍可以仅通过将信号并行处理来改善性能,减少了总的执行时间。
图3显示了两种实现的执行时间:
图3.随着数据块大小的增加,通过并行处理节约的处理时间愈为显著。
事实上,对于更大的数据块,并行算法方法实现了近2倍的性能改进。
图4描述了性能随采集数据块大小(以采样数为单位)增大而提高的精确百分比。
[+]EnlargeImage
[+]放大图像
图4.对于大于1百万采样(100Hz精度带宽)的数据块,并行方式实现了80%或更高的性能增长。
在多核处理器环境下,可以方便地实现自动化测试应用的性能改进,因为您可以使用LabVIEW动态地分配每一个线程。
事实上,您不需要创建特殊的代码以支持多线程,而是通过最少的编程调整,利用多核处理器来达到并行测试。
配置定制的并行测试算法
并行信号处理算法帮助LabVIEW在多个处理器核中划分处理器的用途。
图5按顺序描述了CPU处理算法每一部分。
图5.LabVIEW能够并行处理许多采集数据,从而节省了执行时间。
并行处理要求LabVIEW拷贝(或克隆)每个信号处理子例程。
缺省情况下,LabVIEW的许多信号处理算法配置为“可重入执行”。
这就意味着LabVIEW将动态分配给每个子例程唯一的实例,包括独立线程和存储空间。
因而,您必须将定制的子例程的配置,工作于可重入方式。
您可以通过LabVIEW中一个简单的配置步骤完成这一工作。
欲设置这一属性,选择文件菜单下VI属性并选中“执行”栏;然后,选中“可重入执行”标记(如图6所示)。
图6.通过这一简单步骤,您可以并行执行多个定制的子例程,就如同标准的LabVIEW分析函数。
因此,在多核处理器环境下,您可以通过简单的编程技术实现您的自动化测试应用的性能改进。
优化硬件在环应用
得益于并行信号处理技术的又一个应用便是为同时输入与输出使用多个仪器。
一般,这些应用被称为硬件在环(HIL)或在线处理应用。
在此情况下,您可以使用高速数字化仪或高速数字I/O模块来采集信号。
在您的软件中执行数字信号处理算法。
最后,通过另一个模块化仪器生成结果。
图7描述了一个典型的模块框图。
图7.该框图描述了一个典型的硬件在环(HIL)应用所包括的执行步骤。
常见HIL应用包括在线数字信号处理(如滤波、插值等)、传感器仿真和定制组件模拟。
您可以使用多种技术,以获得在线数字信号处理应用的最佳吞吐量。
通常,您可以使用两种基本的编程结构,单循环结构和带有队列的流水线式多循环结构。
单循环结构实现简单,对于小数据块具有较低时延。
相比之下,多循环结构能够支持高得多的吞吐量,因为它们能够更好地利用多核处理器。
对于传统的单循环方式,您顺次组织一个高速数字化仪的读函数、信号处理算法和高速数字I/O的写函数。
如图8的模块框图所示,这些子例程中的每一个都必须按照LabVIEW编程模型所确定的顺序执行。
图8.对于LabVIEW的单循环方式,每个子例程都必须顺次执行。
单循环结构受限于几个因素。
由于顺序执行每一环节,处理器在处理数据的同时受限,无法执行仪器I/O。
在这种方式下,由于处理器一次只能执行一个函数,所以您无法有效利用一个多核CPU。
虽然单循环结构可以处理较低的采集速率,但是,如需更高的数据吞吐量,仍须采用多循环方式。
多循环架构使用队列结构实现while循环间的数据传递。
图9描述了多个while循环(带有一个队列结构)间的编程方式。
图9.借助队列结构,可以实现多个循环间的数据共享。
图9所表示的是典型的所谓生产者/消费者循环结构。
在此例中,一个高速数字化仪在一个循环中持续采集数据,并在每次迭代中将新的数据集传递至FIFO队列。
消费者循环仅需监视队列的状态,当每个数据集可用时将其写入磁盘。
采用队列的意义在于这两个循环均可相互独立执行。
在上例中,高速数字化仪可以持续采集数据,即使这些数据写入磁盘时存在一定的延迟。
与此同时,其它的采样仅需存储在FIFO队列中。
通常来说,生产者/消费者流水线方法,通过更有效的处理器利用率,提供更高的数据吞吐量。
这一技术优势在多核处理器环境下更为显著,因为LabVIEW可以动态分配处理器线程至每个处理器核。
对于一项在线信号处理应用,您可以使用三个独立的while循环和两个队列结构,实现其间的数据传递。
在此应用情况下,一个循环将从一台仪器采集数据,一个循环将专门执行信号处理,而第三个循环将数据写入到另一台仪器。
图10.该模块框图描述了带有多个循环与队列结构的流水线式信号处理。
图10中,最上面的循环是一个生产者循环,它从一个高速数字化仪采集数据,并将其传递至第一个队列结构(FIFO)。
中间的循环同时作为生产者和消费者工作。
每次迭代中,它从队列结构中接收(消费)若干个数据集,并以流水线的方式独立对其进行处理。
这种流水线方式通过支持高达四个数据集的独立处理,实现了在多核处理器环境下的性能改进。
注意,中间的循环同时也作为一个生产者工作,将处理后的数据传递至第二个队列结构。
最后,最下面的循环将处理后的数据写入至高速数字I/O模块。
并行处理算法改善了多核CPU的处理器利用率。
事实上,总吞吐量取决于两个因素,处理器利用率和总线传输速度。
通常,CPU和数据总线在处理大数据块时工作效率最高。
而且,我们可以进一步使用具有更快传输速度的PXIExpress仪器,减小数据传输时间。
图11.多循环结构提供比单循环结构高得多的吞吐量。
图11描述了最大吞吐量和采样率的关系,采样数据块大小以采样点数来计算。
此处所描述的所有标定都是围绕16位采样进行的。
此外,所采用的信号处理算法为一个截止频率为采样率的0.45倍的7阶巴特沃兹低通滤波器。
如数据显示,您可以在4阶流水线式(多循环)方式下达到最大数据吞吐量。
注意,2阶信号处理方式获得了比单循环方式(顺序)更好的性能,但其CPU的利用率低于4阶方式。
上面所列的采样率均为NIPXIe-5122高速数字化仪和NIPXIe-6537高速数字I/O模块的输入和输出的最大采样率。
注意,当采样率为20MS/s时,应用总线的输入和输出的数据传输率均为40MB/s,所以总的总线带宽为80MB/s。
而且,应当考虑的是,流水线式处理方式在输入与输出之间确实引入了时延。
所引入的时延取决于几个因素,包括数据块的大小和采样率。
下面的表1和表2比较了单循环和4阶多循环架构中的实测时延随数据块大小和最大采样率的变化情况。
表1和2.这两个表格描述了单循环和4阶流水线的时延。
如您所推测,当CPU的使用率接近100%时时延也随之增加。
这一点在采样率为20MS/s的4阶流水线范例中尤为明显。
相比之下,任何一个单循环范例的CPU使用率都几乎不会超过50%。
总结
基于PC的仪器系统,如PXI和PXIExpress模块化仪器,从多核处理器技术的进步和数据总线速度的提高中获益匪浅。
当新型CPU通过添加多个处理核改进性能时,并行或流水线式处理结构在最大化CPU效率时是必须的。
幸运的是,LabVIEW通过将需要处理的任务动态分配至每个处理核,解决了这一编程难题。
如上所述,您可以通过将LabVIEW算法结构化以利用并行处理,实现性能的显著提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用NI LabVIEW优化多核处理器环境下的信号处理性能 利用 NI LabVIEW 优化 多核 处理器 环境 信号 处理 性能