本节书摘来自华章出版社《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》一书中的第1章,第1.8节,作者:[美]爱德华·阿什福德·李(Edward Ashford Lee),更多章节内容可以访问云栖社区“华章计算机”公众号查看
1.8 域和指示器概述
在Ptolemy II中,计算模型的实现称为域。本节将简要描述Ptolemy II中实现的域,但没有涵盖所有的域。本节主要目的是展示计算模型的多样性。这些域以及其他域将在接下来的章节中得到更详细的介绍。图1-6总结了这些域之间的关系。
这里所描述的所有域都具有确定性,除非模型明确地说明具有非确定性行为。即如果需要不确定性,则要在模型中明确地加入不确定性;因此不确定性不会因为模型框架的弱语义而意外发生。如果符合以下条件,则可称一个域是确定性的:即角色之间发送的信号,包括消息所传递的数据值、消息顺序和时间戳,不受调度决策的影响(尽管模型有并发性)。保证确定性在并发计算模型中相当困难,并且提供合理的不确定机制也是相当具有挑战性的。目标是保证当一个模型包含不确定性的行为时,它应被模型的建立者明确地描述;不确定性行为不会意外出现,并且出现也不会让用户感到意外。
数据流(dataflow)。Ptolemy II包含多个数据流域,将在第3章中描述。数据流域中角色的执行包含一系列点火(firing)行为,每一次点火行为都是对输入数据有效性的反应。一次点火行为就是一次(很小的)计算,消耗输入数据,产生输出数据。
同步数据流域(Synchronous DataFlow,SDF)(Lee and Messerschmitt,1987b)是很简单的,也几乎是使用最多的域。在同步数据流域中,当一个角色执行时,它消耗固定数量的输入数据,并对每一个输出端口产生固定数量的输出数据。同步数据流域的一个好处(如第3章中描述的那样)就是可以静态地检查潜在的死锁和有界性,并且可以静态地进行调度的计算(包括并行调度)。这个域中的通信由固定容量的先进先出(First In First Out,FIFO)队列实现,并且组件的执行顺序被静态地调度。尽管同步数据流可以是计时或不计时的,但通常它是不计时的,如图1-6所示。
相反,动态数据流(Dynamic DataFlow,DDF)域比同步数据流域更为灵活,它进行在线的调度策略计算。在动态数据流中,FIFO队列的容量是无界限的。当角色之间的通信方式取决于两者之间传递的数据时,动态数据流是十分有用的。
数据流模型对于表示流系统(streaming system)是十分理想的,因为流系统中组件间数据值顺序的流动也是相对有规律的。比如说,应用到信号处理系统中是特别适合的(如音频和视频系统)。
进程网络。在进程网络(Process Network,PN)域中,如第4章描述的那样,角色表示那些通过FIFO队列(概念上无限容量的)进行通信的并发进程(Lee and Parks,1995)。写入队列通常是立即成功的,但从空队列里读取内容会导致读取阻塞。简单的阻塞读取和非阻塞写入策略保证了模型的确定性(Kahn and MacQueen,1977)。然而,本文将模型进行了扩展以支持特定形式的不确定性。每个角色都在自己的Java线程上执行,所以对于多核机器,它们可以并行执行。进程网络域实现了数据流的一般化,该域是不计时的。角色表现为连续的执行过程以替代离散的点火(Lee and Matsikoudis,2009)。
进程网络域很适合表示通过消息传递进行通信的并发过程。最终,消息将以发送的顺序被交付。消息的传递被假定为可靠的,所以发送者不用期待或接收任何确认消息。这种域为“无反馈通信”(sendand forget)。
进程网络也提供相对简单的方法来实现模型的并行执行。每个角色在自己的线程中执行,大多数现代的操作系统都能自动将线程映射到可用的核上。注意,如果角色的构造相对精细,也就是说它们对每次通信执行很少的计算,则多线程和内部线程通信的开销可能会掩盖并行执行的性能优势。这样,建模者只能在粗粒度模型中考虑并行性能优势。
会话。会话域(rendezvous domain)在第4章详述,它和进程网络相似,因为角色都表示并发进程。但是,与进程网络的“无反馈通信”不同,在会话域中,角色通过原子瞬时值数据交换进行通信。当一个角色向另一个角色发送消息时,在接收者准备接收之前,发送者会阻塞发送。相似地,若一个角色试图读取输入数据,当发送者准备发送之前,接收者会阻塞接收。这样的结果就是,首先到达会话点的过程会暂停以等待另一个过程也到达会话点(Hoare,1978)。在这个域中可以创建多路会话进程,在多个进程都到达会话点之前,任何进程都不能继续执行。与进程网络一样,这个域也是不计时的,它支持明确的不确定性,并且可以透明地利用多核机器。
会话域在解决异步资源竞争问题时十分有用,这种情况是指单一资源被多个异步过程共享的情况。
同步响应。同步响应(Synchronous-Reactive,SR)域在第5章详述,它基于同步语言的语义(Benveniste和Berry,1991;Halb-wachs et al.,1991;Edwards and Lee,2003a)。同步语言的准则很简单,尽管结果意义重大。它的执行遵循全局时钟的节拍(tick)。每个节拍上,每个变量(在Ptolemy II中图示为连接块与块之间的线)可能会得到一个值,也可能不会。它的值(或缺失)是由一个其输出端口连接在线上的角色赋给的。这个角色实现了这样的功能:将它输入端口的值映射到输出端口(在每个节拍上,功能有所变化)。比如,在图1-7中,在一个特定节拍上的变量x和y有如下关联:
x = f (y),且y = g (x)
域中指示器的任务是在每个时钟节拍上寻找满足上式的x和y的值。这种解法称为定点求解(fixed point)。尽管同步响应模型是默认为不计时的,但是当节拍之间有固定时间间隔时,它可以是计时的。
同步响应域和数据流域、进程网络域是相似的,因为角色彼此之间发送数据流。但不同的是,同步响应域中的流是同步的;在时钟的一个节拍上,每一个通信链路要么有一个消息,要么消息明确是缺失的。相比之下,数据流模型更具异步性;一个消息是“缺失的”,仅仅是因为发生调度意外而导致其未到达。为了阻止不确定性,进程网络和数据流都没有“缺失的”输入这一语义概念。输入总是有消息的(或者将有消息的,这种情况下角色被要求等待消息到来)。
同步响应很适合更复杂的控制流,即一个角色可以依据一个消息是否出现而采取不同动作。通过同步动作,域可以掌控那些不含非确定性的场景。同步响应相比数据流和进程网络较少出现,因为每个时钟节拍必须紧密连贯。所以,它较难并行执行。
有限状态机。有限状态机(Finite-State Machine,FSM)域在第6章详述,它是本书讨论的各种域中唯一一个非并发性的域。这个域中的组件不是角色,而是状态,并且组件之间的联系不表示通信链路,而是状态之间的转移。转移通过检测器(guard)来确定状态转移在何时发生。
有限状态机可以用来定义其他域中使用的角色的行为。角色有很多输入和输出。当角色执行时,有限状态机读入输入,评估检测器得到结果以决定执行哪种转移(transition),然后按照选择的转移指定的值进行输出。有限状态机也可以有局部变量,它们的值可以被转移修改(提供了一种称为扩展状态机的计算模型)。
有限状态机也可以用来创建一大类称为模态模型(modal model)的层次模型,这在第8章中讨论。在模态模型中,有限状态机的模型包含子模型,这些子模型处理输入且产生输出。有限状态机的每一个状态表示一种执行模式,且模式细化(mode refinement)定义了该模式下的行为。模式细化是一个子模型,有自己的指示器,且仅当有限状态机在相应状态时它才是活动的。当一个子模型不在活动状态时,它的本地时间不再推进,如1.7.1节解释的那样。
离散事件。在离散事件(Discrete Event,DE)域中,如第7章所述,角色通过位于同一时间轴的事件进行通信。每个事件都有一个值和时间戳,并且角色对事件的处理是按照时间序的。由角色产生的输出事件在时间上不得早于被消耗的输入事件。也就是说,离散事件域中角色之间是因果联系的。
该模型按照一个全局事件队列进行执行。当一个角色产生一个输出事件时,该事件根据其时间戳被插入队列。在离散事件域模型的每次迭代中,最小时间戳的事件从全局事件队列中被删除,且它们的目标角色被点火。离散事件域支持同时性(simultaneous)事件。当一个角色被点火时,指示器就计算一个定点,该过程与同步响应类似(Lee and Zheng,2007)。离散事件域和众所周知的离散事件系统规范(Discrete Event System Speci?cation,EDVS)的形式体系紧密相关(Zeigler et al.,2000),EDVS广泛应用于大型复杂系统的仿真。Ptolemy II多样的DE(Discrete Event)语义由Lee(1999)给出。
DE很适合对时间相关的复杂系统进行建模,例如网络系统、数字硬件电路、金融系统、行政管理系统等。另外,第10章还将介绍DE如何被扩展应用到多样时间(mutiform time)系统中。
连续时间。连续时间(continuous time)域(Lee and Zheng,2005)(在第9章详述)对常微分方程(Ordinary Differential Equation,ODE)进行建模,同时它也支持离散事件。表示积分器(integrator)的特殊角色被连接在反馈回路中,用以进行常微分方程的表示。域的每个连接(connection)代表一个连续时间函数,组件表示函数之间的关系。
连续模型使用数值方法计算常微分方程的解。与同步响应和离散事件一样,在每一个瞬间,指示器为所有信号值计算一个固定点(Lee and Zheng,2007)。在每次迭代中,时间以一定增量向前推进,这个增量取决于ODE求解器。为了推进时间,指示器在求解器的帮助下进行时间戳的选择,然后通过该时间步长进行角色的推测执行。如果时间步长足够小(比如一些关键事件:层间交叉,模式改变,等行足够点火次数和迭代次数计算等),那么指示器提交时间增量。
连续指示器与Ptolemy II中所有的计时域都可交互。它与有限状态机结合产生了一种特定的模态模型,叫作混合系统(hybrid system)(Lee and Zheng,2005;Lee,2009)。将它与同步响应域或离散事件域结合同样比较有用。
Ptera。Ptera域在第11章详述,实现了事件图(event graph)的一个变体。在Ptera中,组件不是角色。这里的组件是事件,组件之间的关系决定事件之间的关系。一个Ptera模型展示系统中的一个事件是怎么触发另一些事件的。Ptera是一个计时模型,与有限状态机一样,它可用于定义另一个域的角色行为。另外,事件是可以组合的,因为它们有一些与它们相关的动作,这些动作本身就是被一个子模型定义的,而这个子模型使用了另一个域描述。Ptera在描述计时行为时很有用,这些行为中,输入时间有可能触发一系列反应。