ccidnet????

出版日期:2004-08-30 总期号:1343 本年期号:64

本期导读
要闻综合
中国信息化
中国网络大会会刊
产品与应用
渠道与市场
华东专刊
华南专刊
东北专刊
西北专刊
信息安全
可视化并行处理的三种方式

装备指挥技术学院电子工程系 淡鹏 张文 李晓梅

  并行可视化技术可以增加处理规模,提高处理速度,解决海量数据利用的难点。研究了可视化并行处理的三种基本方式:作业并行、流水线并行、数据并行。基于VTK(The Visualization Toolkit),实现了三种并行处理方式,取得了较好的并行效果。

  

  科学计算可视化是一种将科学计算过程中产生的数据及计算结果转换为图形图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。现今可视化技术的许多应用领域,如气象预报、地质矿藏、天体物理、航空航天以及医学等,处理的信息常常是一些超大规模的数据,这些数据的处理对可视化的要求比较高,计算的复杂程度比较大,时间开销显著。因此,对这种大规模数据进行并行和分布式处理就显得十分重要。

  目前的许多可视化软件都引入了并行处理技术,以便更好地适应超大规模数据的可视化处理特点。但是在这方面还有很多地方需要不断地进行完善,以满足日益繁重的可视化处理在时间、空间、硬件等方面的要求。并行可视化技术可以增加处理规模,提高处理速度,已经成为科学计算可视化领域的一个研究热点。

  本文在研究并行可视化技术的基础上,基于VTK(The Visualization Toolkit,可视化工具包)实现了作业并行、流水线并行和数据并行三种基本的并行方式。这几种方式是进行并行可视化处理的基本技术。

  可视化并行处理的三种方式

  可视化程序的并行实现,主要有三种基本的处理方式:作业并行、流水线并行和数据并行。以这三种方式为基础组合,可以进行更复杂的并行处理。

  作业并行

  如果在一个数据流图中,某些独立模块之间在进行并行执行,这种方式就称为作业并行(task parallelism)。图1中,椭圆代表可视化处理模块,连线代表模块间的输入输出连接。当此数据流图中模块A和模块B并行执行时,发生的就是作业并行。

  作业并行适合于数据流图中有多个独立分支的情况。此时,可以使用多个进程(或者线程)来分别处理这几个独立分支。

  对于同样的处理数据,我们常使用作业并行来进行不同的处理操作。然后再将各进程(线程)的处理结果进行合成。作业并行的缺点就是其并行度受到数据流图中独立分支个数的限制,而且由于各个作业处理操作的差异,要做到各分支的负载平衡比较困难。

  流水线并行

  当一系列相连模块(形成一个可视化流水线)并行处理独立数据元素(这些数据元素通常是一个时间序列或者某数据集的独立子集)的时候,就是流水线并行(pipeline parallelism)。也就是说,各模块之间存在着并行关系。在图1所示的数据流图中,当模块A、C和D以并行的方式执行时,发生的就是流水线并行。流水线并行是以不同模块同时重叠地执行操作来达到整体并行效果的。

  流水线并行常常用在那些有独立计算资源,即可以同时从磁盘读取、计算和使用硬件进行绘制的数据集。流水线并行处理的数据集必须是一个时间序列或者可以分成独立的子集,这些所处理的数据一部分一部分地像“流”一样通过可视化管道。流水线并行的各处理模块(各并行处理部分)占用着不同的计算资源。

  数据并行

  当一个模块本身在进行并行执行时,就是数据并行(data parallelism)。比如用同一个可视化流水线并行处理数据集的不同分块的情况。在图1的数据流图中,若模块B以并行方式读取数据,则发生的是数据并行。

  在处理大规模数据的时候,数据并行是一种行之有效的方式。这种情况下,常常需要将数据集进行分块,以便将各分块分别进行处理。数据分块操作必须确保分块的合理性以及最终结果的不变性。

  数据并行时,各进程(线程)使用的是同一个处理模块,但处理的是数据的不同分块,各模块处理的结果常常需要进行合并,以产生单一的最终结果。合并的时候应注意对边界的处理。

  数据并行具有一定的可扩展性,其并行度容易控制。数据并行时,还应注意各个进程(线程)的负载平衡问题,特别在处理非结构数据的时候。

  基于VTK的并行实现

  在国外推出的一些优秀可视化软件中,VTK以其强大的功能、方便的使用、源码开放的特点受到了许多研究人员和机构的重视。VTK是在三维图形图像函数库OpenGL的基础上,采用面向对象的方法,将一些常用算法和可视化程序的开发过程进行封装,形成的一个抽象的可视化类库。

  VTK采用的是一种基于数据流水线[2,3]的可视化机制,可以方便地将各种数据对象进行组合,形成一个可视化加工流水线,并且使得开发的系统具有良好的模块化的特点,便于进行“搭积木式”的应用构造。

  VTK不仅具有强大的可视化能力,而且也提供了对于并行处理技术的基本上的支持。VTK集成的MPI(消息传递接口)、Sockets功能大大方便了并行可视化程序的开发,而且VTK的体系结构具有非常好的流(streaming)和高速缓存(caching)能力。这些都使得VTK成为并行可视化程序开发的一个较好的选择。

  基于VTK的并行处理程序,控制部分的实现主要有以下一些技术。

  1.模块的连接:由于各模块在处理时间、效率、数据量等方面的差异,使用并行方法执行时,不同进程(线程)间模块的连接不能直接进行。VTK是使用端口对象来实现不同进程(线程)中模块的输入输出连接的。它对数据起到了缓冲的作用,而且借助于端口对象,多进程(线程)的实现更加容易。对端口对象的Update()操作会引发异步触发更新操作,此操作会引起所触发进程(线程)的执行。VTK中端口对象的实现类是vtkInputPort和vtkOutputPort。

  2.总体控制:VTK使用vtkMultiProcessController类来实现共享存储或分布式计算环境中的多线程或多进程的执行控制。这个类封装了进程(线程)的安装和初始化操作,远程方法调用RMI的注册、触发和终止等方法。它有三个子类:vtkMPI Controller、vtkSocketController和vtkThreaded Controller。

  3.通信:VTK并行执行的通信机制有两种,一种为用户通信(User Communications)方式,它使用通信器对象实现,其实现类为vtkCommunicator,此类封装有数据的接收、发送等方法;另一种为内部通信(Internal Communications)方式,其实现方式为远程方法调用(RMI)。在程序中,这两种通信方法不能相互干涉。

  4.模块的执行:并行程序中,模块参数的修改要比串行程序复杂,因为模块驻留在不同的进程(线程)中。VTK的系统处理对象提供了一种称为“远程方法调用”的服务。在每个进程里,将能够被远端进程调用的模块方法进行注册,并给其赋予唯一的标识。这样,当一个程序处于运行状态时,一个远端进程可以调用另一个进程中的这些方法。

  实例

  基于VTK的并行处理技术,在实现过程中还有很多细节需要注意。下面针对这三种基本的并行处理方式,给出三个实例,来具体说明它们的实现过程。

  数据并行

  第一个实例,我们使用数据并行的方式来对某数据集进行等值面提取操作,每个进程完成一部分数据的处理,最后,将处理的结果合成,并进行映射和绘制操作(此操作在0号进程(主进程)中完成)。其实现过程如图2所示(以两个进程为例)。

  此图中,两个处理模块(进程1和进程0)分别通过计算提取部分数据的等值面,然后将计算结果合并,再映射为几何图形,并绘制出来。两个模块之间用一个输出端口(Port1)和一个输入端口(Port2)进行连接,以实现对数据的缓冲作用。具体实现时,应注意对数据集进行合理的分块操作,使得各个进程处理的数据规模一致或者相近,从而达到负载平衡的目的。

  流水线并行

  第二个实例,我们在对一个由计算得到的数据源进行等值面提取的基础上,先后多次改变其参数,并进行等值面的重绘。

  整个过程使用流水线并行方式实现,进程(线程)1进行数据的生成操作,并定义一个输出端口;进程(线程)0提取等值面,并进行映射和绘制。先后多次改变数据源参数,使数据重新产生和重绘。进程1的数据产生与进程0的处理并行执行(流水线并行方式),其模块连接如图3所示。

  此实例为一个简单的二阶段流水线。由于流水线并行的性能与流水线的段数、各段的执行时间、以及进入流水线的任务数等有关,因此对可视化过程进行合理的分段(模块划分)是非常重要的,它直接影响到程序的并行效果。

  作业并行

  第三个实例,使用作业并行的方式对不同数据源分别执行等值面提取操作(各作业取不同的等值面阈值)。进程(或线程)1读取数据源1,并计算等值面1(此为操作1);进程(线程)0读取数据源0,并计算等值面2(此为操作2)。整个的绘制和显示工作在进程0中完成,模块间连接如图4所示。

  测试结果

  在DELL Precision 650工作站上进行了测试,该工作站采用双CPU共享1GB内存,支持超线程技术。

  对于上面给出的数据并行、管道并行和作业并行的三个实例,采用共享存储的并行方式予以实现,经过调试运行,得到的实验结果见表1。

  其中,数据并行实例(实例1),所取等值面阈值为0.7,数据集为30个340×79×79的结构点数据。流水线并行实例(实例2),参数改变次数为100次,即100个作业通过流水线。作业并行实例(实例3),每个作业处理的数据集为15个340×79×79的结构点数据,作业1等值面阈值取为0.7,作业2等值面阈值取为1.0。可以看出,使用多个线程执行时,执行速度有所加快,所用时间减少。但由于此处所用的实验数据规模比较小,使得减少的时间相对于通信开销来说不是很多,因而加速的效果不是很明显。对于大规模数据,可以得到比较理想的加速效果。

  本文主要研究了并行可视化处理的三种基本方式,并基于VTK实现了这三种方式,得到了实验结果。文中所述的三种并行方式是使用VTK编制并行可视化程序的基础,可综合使用这三种方式来进行更大规模的并行可视化。 (E1)


  图1 一个简单的数据流图


  图2 实例1模块连接示意图


  图3 实例2模块连接示意图


  图4 实例3模块连接示意图




  图5 三个实例的最终可视化效果

  

  表1 实验结果