>
首页 » 技术文章 » Agilent VEE 9.0 中的多线程

Agilent VEE 9.0 中的多线程

作者:Vincent Foo  时间:2009-01-08 16:36  来源:安捷伦公司基础测量仪器部

目前的技术环境对测试和测量的要求越来越严格,软件的性能也因此变得至关重要。针对这一要求,一种经证明有效的方法是采用基于并行处理或并行计算的多线程工作方式。

自从1958年在计算机中首次提出并行计算*的概念,随着近50年来计算机多处理器技术的发展,并行计算越来越受到重视。在一个过程中使用并行机制被称为多线程,其原理是把要解决的问题划分成若干线程任务,这些任务以并行方式,而不是以线性方式执行。在单一处理器上运行一个进程的速度受光速的制约。因此为进一步提高进程的速度,就必须将其分解成多个线程,并在多个处理器上以并行方式执行。

* IBM公司的John Cocke 和 Daniel Slotnick最先提出计算机中的并行机制(Cocke, J.; Slotnick, D.S., (1958) ‘Use of parallelism in numerical calculations’, Research memorandum; No. RC-55,  Retrieved October 10, 2008 from http://www.computerhistory.org/collections/accession/102635119

2008年最新推出的Agilent VEE 9.0可视化、数据流编程软件允许用户选择使用多线程的解决方案。与直观的图形拖放编程相配合,多线程更易于使用并更节省时间。

理解多线程

在开始使用 Agilent VEE 9.0多线程前,事先必须详细了解多线程的工作坊式。只有当处理器为多核,并且其它任务有空闲时间时,采用多线程才是有益的。首先,用户需要把该解决方案分成若干分立和有明确意义的子任务。例如,如果解决方案是编程导弹发射,子任务将是:“打开发射井”,“插入发射钥匙”,“激活电池”,“制导”,“点火引擎”和“升空”。图 1 是 Agilent VEE 中的序列线性程序。


 
图 1:     Agilent VEE 中的序列程序

接下来,用户需要把子任务编组,从而构成一些代码组,并确定这些独立的代码没有任何相关性。例如导弹发射中有两件相关的任务:“升空”必须在“引擎启动”后开始,而“引擎启动”必须等所有其它任务完成。而“打开发射井”,“插入发射钥匙”,“激活电池”,“制导”是独立于任何其它子任务输入或输出的任务,因此可以安全地执行多线程。


 
图 2:     在导弹发射程序中使用 Agilent VEE 的多线程任务

并非所有应用程序都可以采用多线程。例如,机器人过马路的程序,子任务将是:“向左看”,“向右看”,“站住”,“分析车流”,“过马路”。在这种情况下,每项子任务都有相关性:

 
图 3:    在使用 Agilent VEE 的机器人控制程序中子任务的相关性

死循环

试图把多线程用于具有相关性的子任务,如果没有控制程序,就会导致死循环,它也被称为竞争条件。一个简单的死循环例子是进程A 等待进程B,而进程 B 也在等待进程 A,从而构成一个无限循环。现代实时软件和操作系统使用同步方法,如文件锁定、信标、互斥和消息传递,使相关过程的多线程能够克服死循环。一个简单的模拟同步例子是用时间表控制共同使用的铁路轨道。没有时间表,火车就可能在铁轨上相撞。


多线程的好处

多线程如何提高真实世界测量应用的性能?一个明显的好处是能让多台仪器同时工作。例如下面图 4 中的解决方案有5台仪器,在仪器开始测量前,每台仪器需要 10 秒钟的初始化和校准时间。

 

图 4:     多线程改进多仪器工作的性能

按线性序列运行将需要50秒时间。但使用多线程以并行方式运行时,所有 5 台仪器就只需要 10 秒钟的初始化时间。

在以前的 Agilent VEE版本中,用户可以使用UserObjects 轻松地创建功能型子步骤。现在,Agilent VEE 9.0配有ThreadObject(UserObject 扩展)线程,用户可在这里放置非相关的线程安全代码。图 5 中的简单例子是同时执行的 2个ThreadObjects和 2 个UserObjects的对比。如定时器所显示, ThreadObjects执行时间要比UserObjects快一倍。


 
图 5:  在 Agilent VEE 中,ThreadObjects 的执行要比 UserObjects 快一倍


流水线

流水线是能够获益于多线程的另一种典型过程。下面是量产装配厂的常用做法,这里将输入流的子过程排队。一个子过程的输出持续送入下一个子过程,同时收到来自队列的另一输入。例如下列香蕉汁生产过程的例子,从香蕉到果汁罐头需要30秒时间 —— 见图6 。

 
图 6:     香蕉汁生产流程

5 个香蕉变成 5 个香蕉汁罐头要多少时间呢?

为完成这一过程,序列化的线性生产线总共需要 150 秒:
5 x 30 秒 = 150 秒


 
图 7:  实现 5 罐香蕉汁的流水线生产

而在如图 7 的理想条件下,执行流水线的解决方案能提升80% 的效率 —— 只需要80秒,而使用序列线性方法则需要 150 秒。但并非所有解决方案都能从流水线得到如此多的好处。例如,如果上述例子中香蕉剥皮机子过程需要100秒,那么整条流水线都会用大量时间等待香蕉剥皮机完成任务。效率改进只能从600秒提升到530秒(理论上为13% 的改进)。为优化流水线效率,用户应确保所有子过程的执行时间应大致相同。

Agilent VEE 9.0软件中的并行机制对于多线程是非常有益的,并能实现最佳的性能。这一改进将直接转化为提升生产力和缩短产品上市时间。

 

相关推荐

elmos在2019传感器+测试展会展示多款卓越的半导体解决方案

重庆日图携全线测试测量解决方案受重庆企业欢迎

日图科技  测试测量  2012-05-08

安捷伦收购美国Centellax公司测试测量业务

安捷伦  Centellax  测试测量  2012-05-03

安捷伦宣布Bluetest支持Agilent PXT进行LTE OTA测试

安捷伦  测试仪  Agilent  PXT  2012-02-10

RIGOL体验店落户北京知春电子城

RIGOL  测试测量  2011-10-20

安捷伦推出首个宽带信号分析的160MHz信号分析仪

安捷伦  信号分析仪  Agilent  PXA  2011-09-21
在线研讨会
焦点