GeoGeo并行计算

GeoGeo并行计算

 

分布式计算的目的是当任务较大单独一台计算机很难完成时,由多个计算机组成的计算集群来协同解决这个任务。GeoGeo的分布式计算与进程控制也是为了实现这一目标而设计的。

一、配置并行计算环境

硬件和网络设置见《GeoGeo安装说明》。

软件设置,在Master机上安装GeoGeo解释程序,在Slave机上安装GeoGeo服务程序。

二、GeoGeo进程

Master或者Slave机上开始执行一段脚本代码,这里认为开始了一个GeoGeo进程。一个GeoGeo进程包含若干线程,是这些线程的总称,不具体指某一个执行线程。

并行计算就是在每台Slave机上开辟新的GeoGeo进程以完成并行计算任务。

三、函数进程与过程进程

函数进程与过程进程的关系如同函数线程与过程线程的关系,不同的是函数线程与过程线程在本机进程开辟新的执行线程,而函数进程与过程进程在Slave机上开辟新进程。

函数进程由进程函数启动,GeoGeo脚本执行到调用进程函数时,会选定某一Slave机,在该Slave机上启动1GeoGeo进程,将进程函数及其相关的函数和代码迁移到该Slave机上执行。

进程函数是由关键字process声明的函数,如:

process func(double x,double y){

       …

}

过程进程使用ProcessCall函数启动

int ProcessCall( STRING pathName);

函数的参数为过程代码文件的路径名。GeoGeo脚本执行到调用ProcessCall函数时,会选定某一Slave机,在该Slave机上启动1GeoGeo进程,将ProcessCall函数参数指定的过程代码迁移到该Slave机上并开始执行这些代码。

四、启动/结束进程

Slave机上启动一个进程比在本机启动一个子线程要麻烦一些。起码要进行一些网络连接以及变量同步等工作。结束时也需要执行断开连接和计算结果收集等任务。这些函数由下述一对函数完成:

int ProcessBegin(变量名表);

int ProcessEnd(变量名表);

在开始函数进程(调用进程函数)或过程进程(调用ProcessCall函数)之前,需要先执行ProcessBegin函数。该函数初始化Master与所有Slave的网络连接,并进行变量同步。

变量同步视ProcessBegin函数的参数而定,如果该函数参数的变量名表为空,则将所有全局变量同步到Slave上,如果仅需要同步个别变量,就将这些变量的变量名列入函数参数。如果没有变量需要同步,就在参数中写NULL

结束函数进程或者过程进程使用ProcessEnd函数,该函数通知Slave机结束任务,清理线程、断开与Master的连接,并确定将哪些变量同步回到Master上。

ProcessEnd函数将参数指定的变量同步到Master上,如果函数参数为空,则没有变量同步。

ProcessBegin函数做好启动准备后,可以通过下述代码即可在m*n个节点机上启动进程。

for( i=0; i<m; i=i+1){

for(j=0; j<n;j=j+1){

              func(i,j,…);

}

}

函数func声明为

process func(int i, int j, …){

       … //函数语句

}

GeoGeo解释程序遇到process关键字定义的函数时,在Slave机列表中查找已经安装GeoGeo服务的Slave机,在适当的Slave机上启动执行该函数。如果多次启动该函数或者启动多个不同的进程函数,GeoGeo将其轮换分配在多个Slave机上运行。

可以使用ProcessTo函数将指定的进程分配到指定的Slave机上。

五、变量同步/内存共享

除使用ProcessBegin函数和ProcessEnd函数同步变量外,GeoGeo可以在Slave端代码中使用Flush函数将变量同步到Master,也可以在Master端使用FlushSlave函数随时向Slave机更新变量。

GeoGeo支持子变量同步,一个数组变量可以分解为若干子变量分配给不同的Slave,也可以进行分别更新和同步。

网络上进行的变量同步效率不高,同时也无法完成大数据集的变量同步。

对于大数据集,GeoGeo通过共享磁盘驱动器实现多机共享大数据集的TFS,各Slave机将FTS分别映射到各自的内存,实现模拟的内存共享。相关技术细节请联系开发人员。

有关更多并行计算的内容见《GEOGEO-PART1GeoGeo脚本基础第6章分布式计算与进程控制。

示例程序清单中6-1~6-11提供了有关并行计算的示例代码以供参考。

 

下载地址:http://download.csdn.net/detail/gordon3000/7922555 

猜你喜欢

转载自blog.csdn.net/gordon3000/article/details/39544939