执行过程-ieee standard 829-2008
第十章安排管道执行这章提供了VTK执行过程的细节。理解这个过程会帮助你写新的滤波器,而且使用VTK的流动功能。通过描述管道执行过程开始,接着描述了如何在一个应用中使用流动。
10.1 执行过程VisualizationToolkit使用一个隐式的执行机制。即,没有控制可视化管道执行的中枢的执行者。与许多可视化比较,它有一些优点。方法在原理上相对简单——时间标签用来决定对象什么时候是废弃的。这样的对象尽可能地执行以是它们自己,和系统,是新的。第二,隐式执行对于并行处理是自然地,因为没有集中的瓶颈来阻止穿越处理器分配。后,没有一个中枢的执行者,通过在你的应用中控制它来改变执行过程是相对直接了当的,简单的。你可以通过在一个简单的滤波器上响应一个用户输入(e.g,一个菜单选择),调用Update(),如果必要地话动态地改变每个滤波器的输入输出,使VTK看起来像一个功能的系统。如我们在纵览部分(26页的“管道执行”)所看到的,管道执行由一个数据请求发起。通常当绘制vtkProp的一个子集时,请求就被发动。绘制请求产生了在一个投射器上被调用的一个Update()方法,它相反地把方法发送给它的数据对象。
在NS方程隐式分区并行计算和图像处理vtk体数据中,我们可以看到更多关于隐式执行和数据流的实例。 vtkDataObject中的Update ()方法由以下阐述的四个分离的步骤组成。这些方法中的每一种通常递归地沿管道传播。在第一个关口, UpdateInformation()方法沿管道扫视(与数据流的方向相反)而且终两个重要的信息块返回管道——每个数据对象的WholeExtent(或者MaximumNumberOfPieces),和PipelineMTime。全部范围指可以用来进行处理的完整的数据,而且被表示为结构化数据的一个6-向量。PipelineMTime是在管道中发现的大的被修改的时间。(时间标签)在PropagateUpdateExtent()关口,管道中的每个过程对象决定了它会产生多少数据(这至少与输出的请求的更新范围一样大)的和它需要执行多少输入数据。
通过隐式反馈数据集的案例,我们可以更直观地理解这些概念。在TriggerAsynchronousUpdate()关口,给端口一个机会以开始在其它的过程中的一个非模块化的更新。(一个端口是通过网络,或者在处理器之间发送数据的一个对象。端口用于分布式的,并行的应用)如果在管道中没有端口存在,那么TriggerAsynchronousUpdate ()向上传播而且接着向下回到管道,没有做任何事情。后阶段是UpdateData()关口,那里每个源的实际执行通过过程对象Execute()方法在路上反向沿管道发生。
您可以参考VTK开发精要数据结构与管线机制以获取更多细节。
这些方法的理由,和它们返回的信息,在这点上可能对你有一些神秘。除了控制滤波器执行的基本需求,执行过程支持两个重要的其它的特征。它允许数据流动——即,数据可以被划分为块(而且从块—块地处理)以降低内存的消耗(看232页的“使用流”)。应用也可以只请求一块数据。当开发需要高交互性的应用或者当用户只对数据集的一部分有兴趣时这会是有用的。第二,执行过程支持支持异步的,分布式地,并行地处理。
通过这些链接,你可以探索更多关于如何优化并行处理和数据流动的知识,如不可压缩Couette流动隐式和Oracle9i的并行处理机制。每一个资源都能带来新的视角和深入的理解,真是不可错过的学习材料!