LabVIEW驰骋多核技术时代
和快速傅立叶变换(FFT),使它们可以在双核机器上并行化执行。首先程序在单核的模式下(关闭其中一个核)运行一次,然后在双核模式下运行。从图中可以看到,由于两项任务的计算量都很高,因此利用任务并行化获得的性能改进为原先的1.8倍。
图3 LabVIEW数据流编程的并行特性
Windows操作系统是自动将线程分配到不同的核上,那么对于某些应用,如果有一个对时间要求非常高的线程,那么是否有办法能够保证它执行的确定性呢?
使用LabVIEW 就可以很好地解决这个问题,从而获得对于多核处理器更多的控制权。在 LabVIEW中,工程师可以根据自身需求手动设置线程运行在特定的核上,例如将时间要求苛刻的采集与控制任务放在单独的核上运行,而将对确定性要求不高的界面响应、数据记录等任务放在另外一个核上运行(图4)。值得一提的是,实现这样的操作非常简单,就像放一个LabVIEW循环一样,只需放置一个定时循环(Timed Loop),再分配那个循环到指定的核上即可。
图4 LabVIEW 允许用户手动分配线程在指定的核上运行
作为一个典型的多核应用案例,德国的Max Planck研究院要实现针对核聚变能源的受控热核反应装置的等离子控制,这种高速控制需要将88个磁感应器上的大量数据转换为64×128个点格上的偏微分方程组,并要在短短的1ms内完成整个计算过程。最终他们使用LabVIEW在一个8核的系统上采用并行技术,将整个系统的运算速度提高了5倍,成功地达到了1ms闭环控制速率的要求,完成了这个“不可能的任务”。
基于LabVIEW的并行编程
LabVIEW自身所具有的并行特性使得开发人员可以不用花过多的时间放在多线程的创建、管理、同步、调试等底层实现过程上,而可以将主要精力聚焦在整个并行程序的高层架构上,这是能否高效利用多核处理器技术的关键所在。
本节中将简单介绍针对多核的三种常用编程方式及其在LabVIEW下的实现方式。
任务并行化(Task Parallelism)
将整个程序分成多个线程来并发运行,是并行编程的一个基本理念,那么通常一个程序都会由几个子任务组成,例如在某个测试测量程序中,就可以分为模拟采集和数字输出两个任务,那么如果我们将这些独立的任务并发地执行在多核处理器中,那么就自动提高了运行的效率。这种将独立的几个任务在程序中并发执行的方法,就叫做任务并行化。
对于任务并行化,如何合理地去实现任务分配是需要解决的问题。首先,我们可以将本身就互相独立的任务分配在不同线程中,如上例所提到的模拟采集与数字输出任务,之间就没有任何的数据连接,因此在LabVIEW中我们就可以并行地将代码放在程序框图中,不需要添加任何其他代码,如图5所示。
图5 LabVIEW对独立任务自动实现“任务并行化”
此外,编程中常见的生产者—消费者循环也是一种任务并行化,在LabVIEW下我们可以将生产者(读取数据)与消费者(分析数据)分成并行的两个任务,任务之间的数据交互可以使用队列结构(Queue)来实现,如图6所示。
图6 生产者—消费者模型实现任务并行
数据并行化(Data Parallelism)
除了可以将程序任务进行并行化之外,对于一些海量数据的处理分析,我们还可以将数据分成几个可并行操作的小数据集,然后分别在各个核上实现并行处理,最后将结果整合起来作为整体数据集的处理分析结果,这种方式称为数据并行化。
如图7(a)所示,一个大的数据集仅仅在一个核上进行处理和运算,当核1在处理数据时,其它的三个CPU核都处在闲置状态,整个系统的运行效率很低。
那么,使用了数据并行化之后,如图7(b),之前的大数据集被分割成4个小数据集,并将它们在各自的核上进行处理运算,最终再将各自的运算结果整合起来作为大数据集的处理结果。经过了数据并行化之后,整个系统的运算效率有了直线的提升。
(a)
(b)
图7 数据并行化
与“任务并行化”类似,在LabVIEW下实现“数据并行化”也相当的直观与方便,图8就显示了一个矩阵相乘的代码,程序中将两个大矩阵各自分割成小矩阵进行相乘,最 后再整合起来,仅仅这样一个简单的改变就可以在一个双核处理器上得到0.9倍的性能提高。
图8 LabVIEW矩阵相乘的数据并行化
流水线式(Pipeline)
流水线,顾名思义,就是指将一系列的任务分割成固定的几个步骤,然后按照装配线的方式来执行。
我们以一个最简单的汽车装配线为例,一辆车的装配完成需要3个步骤:底盘安装、零件安装以及上漆。如果每个步骤都需要花费1个小时的话,那么如果一次就装配一辆车的话,我们需要花3个小时来
LabVIEW 多核 并行处理 并行编程 200809 相关文章:
- 基于LabVIEW RT的自定义流程测控系统(10-30)
- 基于LabVIEW的语音分析平台的实现(10-30)
- 基于示波器卡和LabVIEW的马达编码器测试系统(11-06)
- 基于虚拟仪器的网络虚拟实验室构建(11-06)
- 运用LabView控制DS3900串口通信模块(02-02)
- 采用模块化仪器,对新兴音频和视频应用进行测试(02-19)