文档库 最新最全的文档下载
当前位置:文档库 › 基于JAVA RMI的分布式计算

基于JAVA RMI的分布式计算

基于JAVA RMI的分布式计算
基于JAVA RMI的分布式计算

第一章概述

1.1 Java RMI 技术

在分布式应用开发中,Java提供了RMI(Remote Method Invocation 远程方法调用)机制来实现远程对象的通信。RMI是一种分布式系统技术,它允许一台Java虚拟机(JVM)调用运行在位于网络中另一处地方的JVM中的远程对象方法(object method),如图1所示。这样的通信不必一定得是单向的过程——远程对象不仅可以接受数据作为其参数,而且可以返回数据。这样RMI可以利用已存在的本地或远程对象,提供无缝的集成,实现分布式计算。

图1 调用在远程机器上执行的远程对象方法

1.2 RMI 回调技术

通常意义下,在RMI机制中把提供远程对象方法的、运行在远程JVM上的应用程序称为服务器,而把调用远程对象方法的应用程序客户机。但在实际应用中,有时也存在服务器调用运行在客户端JVM上的对象方法的需求,也就是回调[1]。

在基于RMI的分布式并行计算应用中使用回调技术的基本思想是:提供实现分布式并行计算资源的工作站不需要周期性地主动(调用服务器上运行的远程方法)检查服务器是否有新的计算任务下达,相反地,当服务器需要完成客户请求完成的高计算量任务时,按该类任务的并行算法分解成可并行执行的子任务,然后服务器将远程调用(回调)各工作站上远程对象所提供的、具有完成子任务能力的方法,将各个子任务分配到各工作站并发执行。当然,各个提供计算资源的工作站事先必须在服务器注册表中注册。

1.3 RMI与分布式并行计算

Java RMI机制的引入给分布式并行计算的实现带来了新的特点:Java作为面向网络的跨平台语言,在移植性、网络应用和安全问题方面具有独到的优势,对于分布式计算问题,Java RMI

在语义上提供了更为简洁清晰的描述,用Java来构造分布式计算系统,在实现上更符合网络计算的特点。

根据Java所起的作用可以分成两类:一类是基于Java的分布式并行计算环境,利用Java 和Web的特点为网络上的并行计算的组织提供良好的用户界面和丰富、通用的开发工具;另一类是Java的并行程序设计,希望利用Java的跨平台特征,构造可以在网络中的异构机器上自由迁移和协同工作的程序。这两类存在密切的联系,二者还可以结合起来,构成完整的分布式并行解决方案。

运用Java的RMI机制,结合Java的多线程技术,可将一个具有并行计算特征的计算任务分解成多个可同时计算的子任务,每个提供计算资源的工作站承担一个或多个子任务,每个子任务由一个独立的子线程控制。由Java线程并发性,多个工作站可并发执行多个子线程。而服务器上的主线程负责控制、协调这些子线程,从而控制逐个并发计算过程,使之正确运行。

RMI 体系 图3 java RMI 体系结构 第二章 Java RMI 体系结构

设计RMI 体系的目的是建立一个Java 分布式对象模型,很自然地,该模型与Java 程序语言和面向对象模型结合。RMI 体系已经成功地创建这样一个系统,并将Java 体系的安全性和健壮性延伸至分布式计算机体系。

2.1 接口:RMI 的核心

RMI 体系是基于一个重要的原则:行为的定义和实现是两个不同的概念。RMI 是允许行为定义的代码和行为实现的代码分开存放,并在不同的JVM 上运行。这样很好地适应了分布式系统:客户关注服务的定义,服务器注重提供服务。

具体地说,用Java 的一个接口编写

远程服务的定义。这个Java 的接口不包括行为实现的代码,而运行在服务器上的类是真正实现行为。运行在客户端的类作为一个远程服务的代理。远程方法的调用过程简单的叙述如下:客户程序在代理对象中调用方法,RMI 发送请求给远程JVM ,

接着远程JVM 实现方法。由远程JVM 实现的返回值送回到代理,然后代理将返回值

给客户程序。

2.2 RMI 体系的层次

RMI 的实现本质上建立在三个抽象层上(如图3)。

第一层是存根和骨架层

(Stub/Skeleton Layer 也称代理

层):它屏蔽了远程引用层和传输层的细节,提供了Java 应用程序调用远程对象透明接口。存根也就是上面提到的代理。 第二层是远程引用层:解释和

控制客户对远程服务对象的引用。 第三层是传输层:传输层连接

基于TCP/IP 协议网络中的机器。它提供基本的连接、管理,远程对象的追踪,还有一些防火墙

功能。[2]

RMI 代理层提供了Java 应用程序与RMI 系统的接口,Stub 是一个远程对象在客户端的代理,当客户调用远程对象方法时,Stub 负责把调用的远程对象方法的方法名机器参数编组打包,并将该包向下由远程引用层、传输层转发给远程对象所在的服务器。通过RMI 系统的RMI 注册表实现的简单服务器名字服务(2.3中具体说明),可定位远程对象所在的服务器。该包到达服务器后,

图2 接口定义行为,类则实现行为的分离图

RMI 系统

向上经由远程引用层,被远程对象的Skeleton接收。此Skeleton解析客户包中的方法名及编组的参数后,在服务器端执行客户要调用的远程对象方法,然后将该方法的返回值(或产生的异常)打包后通过相反的路线返回给客户端,客户端的Stub将这些返回的结果解析后传递给客户程序。

远程引用层定义并提供RMI连接请求的语义。该层提供一个RemoteRef的对象表示与远层服务实现对象的连接。存根对象使用RemoteRef中的invoke()方法来传送方法的调用。RemoteRef 对象明白对远程服务的请求协议。

运输层是在JVM之间建立连接。所有的基于流的网络连接使用TCP/IP。如果两个JVM在配置相同的机器上运行,它们通过它们主机的TCP/IP网络协议栈建立连接。在现行的RMI中,TCP/IP 的连接是所有机器间连接的基础。如果运输层需要使用多条TCP/IP连接,而一些网络结构只允许客户和服务之间只有一条TCP/IP连接;运输层采用多种形式增多虚拟的连接,但实质上只有一条TCP/IP连接。

2.3 命名远程对象

在RMI体系中,有这样一个问题:“客户如何使用RMI远程服务?”。答案是客户通过一个命名或一个查找服务找到远程服务。不过这好像是一个循环的矛盾。客户如何通过一个服务找到另一个服务?事实上是这样的。在默认的主机的端口运行着一个命名或一个查找服务。

RMI能使用多种不同的服务,包括Java的命名和查找接口(Java Naming and Directory Interface JNDI)。RMI自带一个简单的服务,叫作RMI注册处rmiregistry[3]。RMI注册处,通过默认端口1099,运行在每台计算机上:主机提供远程服务,接收服务的询问。启动注册处的命令是:start rmiregistry。

在一台主机上,服务程序首先新建一个实现服务的本地对象,通过这样的办法建立远程服务。然后,将对象输出给RMI。当对象输出,RMI建立一个监听服务,等待客户的连接和请求服务。输出后,服务在RMI注册处注册该对象,使用一个公共名字。

在客户端,使用一个静态类Naming到达RMI注册处。它提供lookup()方法,客户用来询问注册。Lookup()方法接收一个URL,该URL说明服务主机和需要服务的名字。该方法返回的是一个远程服务对象引用。URL的格式如下:

rmi://

[:]

/

其中host name是指局域网中的可识别的名字或因特网上的一个域名。如果不希指定的服务望在默认端口1099运行,则可以指定name_service参数。

2.4 利用RMI实现回调

在RMI系统中,当服务器接到任务时(这与工作站不间断地轮询(polling),以看看是否有任务派发的方式相对),主动通知工作站并派给任务分的方式,就需要使用回调技术。回调技术通常能实现一种效率较高的系统,因为工作站不需要周期性地检查服务器是否有任务下达——相反地,当服务器需要工作站完成任务时,工作站将得到通知。可以向同一个服务器注册(图4)。当任务分配给工作站时,服务器将通知每个已注册的工作站。这意味着服务器维护一个有效的工作站列表,然后把需完成一个子任务的通知并派发它们,还可以有选择地给出某些参数(图5)。

那么如何实现服务器向工作站发出通知?某些系统被设计成发送并接收消息,但一个对象怎样把消息发送给另一个对象(从而通知对象事件已经发生)?其实对象通过调用方法,时时刻刻

在做着这个事情。在面向对象的系统中,通过向对象传递一个指向服务器的对象引用(工作站)实现回调。然后,在适合的事件,服务器将调用工作站的某个方法通知它来完成工作,并允许它将工作结果返回。

图4 可以向同一个服务器注册为工作站

图5 为每个已注册的工作站完成子任务的回调通知

第三章RMI系统的实现技术及运行

3.1 创建并运行RMI系统的过程

一个能正常工作的RMI系统包括以下几个部分:

●远程服务的定义接口

●远程服务接口的具体实现

●存根(Stub)和骨架(Skeleton)的类文件

●远程服务的服务主机

●RMI的命名服务:使客户能找到远程服务

●一个类文件供应器(http或ftp服务器)

●一个需到这个远程服务的客程序

建立一个RMI系统具体步骤如下:首先在机器里建立一个新的文件夹,以便放置创建的文件。在调试过程中,Stub和Skeleton的类文件也许要被多次编译,如果将文件事先分在不同的文件夹,可能要多次更新Stub和Skeleton的类文件。所以为了调试简单起见,一开始可以只使用一个文件夹存放客户端和服务端代码,并且在同一个目录下运行服务端和客户端。当然可以在整个系统运行正常后,将文件按客户端、服务器端存放在不同的文件夹。

下面是生成系统的步骤:

1.编写和编译接口的Java代码

2.编写和编译接口实现的Java代码

3.从接口实现类中产生存根和骨架类文件

4.编写远程服务器的主运行程序的Java程序代码

5.开发RMI的客户端程序

6.安装并运行RMI系统

具体步骤和代码如下:

1) 定义接口:

第一步,编写并编译服务接口的Java代码。接口PrimeServer_inter定义服务所提供的所有远程的功能。下面是源代码:

import Java.math.*;

public interface PrimeServer_inter extends Java.rmi.Remote

{

public boolean isPrimality(int e)

throws Java.rmi.RemoteException;

}

注意,这个接口继承自Remote,每一个定义的方法都必须抛出一个RemoteException异常对象。建立这个文件,把它存放在刚才的目录下,并且编译。

2) 接口的具体实现:

编写远程服务的实现。这是PrimeServer_interImpl类:

public class PrimeServe_interImpl extends UnicastRemoteObject

implements PrimeServer_inter

{

public PrimeServe_interImpl ()throws Java.rmi.RemoteException

{super();}

public synchronized boolean isPrimality(int e) throws Java.rmi.RemoteException { //判断2e-1是否是素数的远程方法的具体代码

}

}

同样的,把这个文件保存在刚才建立的目录里然后编译。

这个实现类使用了UnicastRemoteObject去联接RMI系统。在例子中,是直接的从UnicastRemoteObject这个类上继承的,事实上并不一定要这样做,如果一个类不是从UnicastRmeoteObject上继承,那必须使用它的exportObject()方法去联接到RMI。

如果一个类继承自UnicastRemoteObject,那么它必须提供一个构造函数并且声明抛出一个RemoteException对象。当这个构造函数调用了super(),它就激活UnicastRemoteObject中的代码完成RMI的连接和远程对象的初始化。

3) 产生存根(Stubs)和骨架(skeletons):

使用RMI编译器rmic[4],产生存根stub和骨架skeleton文件。这个编译运行在远程服务实现类文件上。使用命令:

>rmic PrimeServer_interImpl

在运行rmic 后,在目录下,应该可以找到两个文件PrimeServer_interImpl_Stub.class,PrimeServer_interImpl_Skel.class.。

4)定义RMI服务器:

必须有一个服务器进程提供远程RMI服务。PrimeServer 是一个简单的服务,仅仅提供本质的服务。

import Java.rmi.Naming;

public class PrimeServer{

public static void main(String args[])

{ try

{

PrimeServer_interImpl s=new PrimeServer_interImpl ();

String registry="localhost";

if(args.length>=1){registry=args[0];}

String url="rmi://"+registry+"/workstation_inter"; //形成URL

Naming.rebind(url,s); //注册远程对象s

}catch(RemoteException re){}

catch(Exception ex){}

}

}

5)实现RMI客户:

import Java.rmi.RemoteException;

import https://www.wendangku.net/doc/7e3050424.html,.MalformedURLException;

import Java.rmi.NotBoundException;

public class client

{ static PrimeServer_inter pserver;

public client() {}

public static void main(String args[])

{ int e=4423;

try

{ String registry = "localhost";

if (args.length >=1){registry = args[0];}

String url = "rmi://" + registry + "/PrimeServer";

pserver =(PrimeServer_inter) Naming.lookup (url);

//通过远程接口实例pserver调用远程对象方法

if (pserver.isPrimality(e))

System.out.println ("2^"+e+"-1 is a probably prime");

else

System.out.println ("2^"+e+"-1 is not a prime");

}

catch (NotBoundException nbe){ …………}

catch (RemoteException re) {…………}

catch (Exception ex){…………}

}

}

6) 运行RMI系统

需要开启三个控制台窗口:客户,服务器,RMI注册处。

先开始启动注册处。必须在包含刚写的类的那么目录下运行这个注册程序。输入命令:start rmiregistry

在第二个控制台里,启动服务器:calculator service:

>Java PrimeServer

这个服务器就开始工作了,把接口的实现加载到内存等待客户端的联接。最后的操作是启动客户程序:

>Java Client

即使运行在同一个计算机上,RMI还是使用了网络堆栈和TCP/IP去进行通讯,并且是运行在三个不同的Java虚拟机上。这已经是一个完整的RMI系统。

3.2 RMI回调的实现技术

在理论上,RMI回调技术听起来很复杂,但是实践起来却相当简单,只需要一点点额外的代码。下面的例子是在3.1代码的基础上利用RMI实现了回调(具体接口的实现详见第四章)。

1)定义服务器的接口

服务器必须为未注册的工作站提供注册的功能,为已注册的工作站从注册表中删除的功能。无论是注册还是删除的操作,工作站都可以根据自己的具体状态(是否是工作状态),主动将自己从注册表中注册或删除。当然,服务器也可以将不能正常工作的工作站从注册表中删除。

在这里有两个队列,第一个队列表示已注册的工作站但未被分配工作;第二个队列表示工作站正在工作,这个队列告诉服务器现在无法分配工作给该队列中的工作站。当一个工作站注册成功后,就加入第一个队列中;当有任务被分配时,工作站就从第一个队列中删除,加入到第二个队列中;完成任务后,如果该工作站还能继续工作就再次加入第一个队列,等待下一个子任务。这两个队列都提供工作站加入和删除的方法。当然服务器也要向客户机提供一个完成大工作量任务的远程方法。

public interface PrimeServer_inter extends Java.rmi.Remote

{

/*服务器向工作站提供的远程方法*/

public boolean addWorkstation(workstation_inter workstation) throws Java.rmi.RemoteException;

/*由工作站调用addWorkstation()方法。当一个工作站自愿加入第一个队列,

就主动调用该方法将自己加入。*/

public void removeWorkstation(workstation_inter workstation)

throws Java.rmi.RemoteException;

/*当某个工作站有任务时,就由服务器将这个工作站从第一个队列中移走,接着

用下一个方法addToBusyList()加入第二个队列。*/

public void addToBusyList(workstation_inter workstation)

throws Java.rmi.RemoteException;

public void removeFromBusyTesterList(workstation_inter workstation) throws Java.rmi.RemoteException;

/*当某个工作站完成任务时,就由自己主动将从第二个队列中移走,接着用方法addWorkstation()再次加入第一个队列。*/

/*服务器向客户机提供的远程方法。*/

………………

}

2)定义工作站的接口

工作站只要向服务器提供的远程方法,而且工作站的接口只定义一个方法。

public interface workstation_inter extends Java.rmi.Remote

{

public int Rabin_miller(int e)

throws Java.rmi.RemoteException;

}

服务器调用该方法,将子任务分配给工作站,从而实现回调。当工作站执行该方法,表示对服务器派发的一个子任务(也可以认为时子线程,而主线程在服务器中执行)的执行,并将执行的结果返回给服务器。

第四章基于RMI的分布式计算应用实例——大数的素性检测

4.1 设计思想

4.1.1 大数的素性检测的算法

公开密钥算法需要素数,任何合理规模的网络也需要这样的素数。比如:数字签名能够实现数据的公开、公正、不可伪造和不可抵赖等特性,是数据在公开信道中传输的安全保障。DSA (Digital Signature Algorithm,数字签名算法,用作数字签名标准的一部分),它是一种公开密钥算法。DSA算法的安全性基于解离散对数的困难性,这类签字标准具有较大的兼容性和适用性,成为网络安全体系的基本构件之一。DSA签名算法中用到了一个参数p。p是L位长的素数,其中L从512到1024且是64的倍。因此如何快速地对一个“大数”的素性检测是一个值得探讨的问题。

快速地对一个“大数”的素性检测首先要选择适合的算法。对于计算机来说,问题“n是素数吗?”比复杂点的问题“n的因子是什么?”更容易计算。所以,假如有一个随机数,如果试着分解它从而找到素数,这种方法十分复杂又费时间;但如果计算机使用基于概率测试来确定是否是素数,比如经典的测试算法有:Solovag-Strassen, Lehmann,Rabin_Miller算法,那么要比分解因子的方法大大减少计算时间。

一般使用可信度来测试一个数是否是素数。假如该“可信度”有足够大,那么这类测试就很可靠。假定一个测试的失败概率设置为250分之一,这意味着有1015分之一的几率可能是合数从而错误地判定为素数(该测试永远不会将素数错判为合数)。如果为了某些原因,需要更多的可信度来确认一个数是素数,那么可以将错判的概率设定的更低。

下面是有关素数测试的Rabin_Miller算法[5]和分析:

首先一个待测的随机数p,计算b,b是2整除p-1的次数(即,2b是能整除p-1的2的最大幂数)。然后计算m,使得n=1+2b m。

1)选择一个小于p 随机数a。

2)设j=0且z=a m mod p。

3)如果z=1或z=p-1,那么p通过测试,可能是素数

4)如果j>0且z=1,那么p不是素数。

5)设j=j+1。如果j

6)如果j=b且z≠p-1,那么p不是素数。

分析:数a被当成证据的概率为3/4。这意味着当迭代次数为t时,它产生一个假的素数所花费的时间不超过(1/4)t。对大多数随机数,几乎99.9%肯定a是证据。

4.1.2 分布式计算的组织和分布

工作站群系统中,机器的组织形式有两种相对的模型:雇佣者模型和志愿者模型。雇佣者模型中,参与运算的机器(雇佣者)出让控制权,在统一的调度下共同完成任务。在雇佣者模型中,机器的各种可用信息事先都可以知道,基本上可以继承传统模型的系统结构和组织方式。

志愿者模型则相反,愿意参加计算的机器自愿地加入到工作站群中去,其负载情况、工作能力事先都无法预知。志愿者在志愿者模型中,事先不存在一组固定可用的机器,为了对临时组合的计算资源加以管理,必须提供一个相对集中的管理机制。

获得工作站后,并行的子任务分布到工作站上有两种形式,一种是送,另一种是取。“送”:

将任务送到工作站上,要求送出任务(程序)的机器能够获得工作站的访问权限。“取”:工作站到放置任务的服务器上取回任务。

本文实验系统采用的是志愿者模型:工作站“自愿”在服务器的注册表里登记,而服务器将子任务“送”到已登记的工作站。采用志愿者模型是考虑到在这个系统的“工作站”大多是一个局域网中pc机,而这些pc机单机的工作时间很灵活,事先无法固定一组可用的机器。

4.1.3 系统结构设计

测试一个大数的素性,如果使用Rabin_Miller算法,需要t次重复计算。这种计算的特性很容易将一个测试一个大数的素性分解成t个子任务,恰好可以利用来实现RMI体制分布式计算。

在这个体系中有三个子系统:客户机,服务器和工作站,其中工作站群采用自愿者模型。客户机产生一个随机数,需要知道该数是否是素数,将该测试交给服务器。服务器接到任务后,根据客户机要求,将测试分解t个子任务。运行在服务器的主线程控制两个队列,用来调控工作站完成子任务。两个队列都是存放工作站的远程对象引用,一个是空闲的工作站队列list,另一个是正在工作的工作站队列busylist。

当有工作站注册到服务器,首先在list排队。当服务器接到客户机的任务,就启动子线程,从list队列取出第一个工作站远程对象,并调用这个远程对象的方法。一个子线程是对该大数的一次测试。一旦子线程启动,主线程就将该工作站的远程对象从list队列删除并加入到busylist队列。当一个子线程结束,将结果送到主线程,然后由工作站主动从busylist队列删除并再次加入list队列,等待下一次主线程的调用。主线程每次都是取队列的第一个远程对象,需要多少次测试就从list队列取多少次工作站远程对象。

4.2 实现技术

根据为测试一个大数的素性所设计的体系结构,需要使用以下技术:在Java RMI机制下建立三个子系统,使用回调技术实现服务器和工作站之间的通信以及Java的多线程技术实现分布式计算。在前面的章节已经论述建立一个RMI分布式体制的完整步骤,和如何在RMI体制下实现回调,并且例举了具体的代码。下面将进一步论述三个子系统的具体实现技术。

1)客户端。只要生成在服务器端的远程对象,就可以调用这个远程对象提供的方法boolean isPrimality( int e)。其中所要测试的大数不是参数e而是2e-1。其原因有:一是如果一个大数作为参数传送,将大大增加网络上的通讯延迟,浪费分布式计算的时间;二是目前已知的部分Mersenne 素数的公式是p=2e-1。到目前为止最大的Mersenne 素数[6]是在2004年5月15号,Michael Shafer用计算机测试证明了第41个已知的Mersenne素数:2 24,036,583 -1。代码详见第三章。

2)服务器。服务器需要向另外两个子系统都提供远程方法的接口,接口的定义代码在4.2节详细说明,下面是实现该接口的具体分析。

对工作站提供的远程方法,是两个队列list,busylist中对工作站的添加删除。多个工作站,即多个子线程对队列的访问,就涉及进程同步的问题。这里的队列是临界资源,所以需要保证诸进程能互斥地访问临界资源。采用信号量机制是一种卓有成效的进程同步工具。先定义一个信号量的类List_monitor和两个原子操作即P、V操作:

class List_monitor {

int s=0; / //信号量,对应List队列中的当前远程计算机数

public synchronized void wait_op() {

s--;

if (s<0)

try { wait(); }catch(InterruptedException e) { }

}

public synchronized void signal_op() {

s++;

if(s<=0) notify();

}

}

这样在访问队列时,就要使用信号量机制:

public class PrimeServer extends UnicastRemoteObject

implements PrimeServer_inter

{ //两个队列的定义为两个Vector类的对象的数组。

Public static Vector list = new Vector();

p rivate Vector busylist=new Vector();

s tatic List_monitor lm; //信号量

public oolean addWorkstation(workstation_inter workstation)

throws Java.rmi.RemoteException

{ list.add(workstation);

l m.signal_op();

r eturn true; }

public void removeWorkstation(workstation_inter workstation)

throws Java.rmi.RemoteException

{ list.remove(workstation); }

public void addToBusyList(workstation_inter workstation)

throws Java.rmi.RemoteException

{busylist.add(workstation); }

public void removeFromeBusyList (workstation_inter workstation)

throws Java.rmi.RemoteException { busylist.remove(workstation); }

}

接下来是如何让工作站们并行工作。主线程启动子线程,并使用信号量机制控制子线程的同步。然后在子线程中调用远程对象的方法:

class workThread extends Thread //定义子线程

{ int []result;

i nt e,id;

String oolean ;

workstation_inter worker;

public workThread ( int e, workstation_inter worker, int []result, int id)

{ //各个参数初始化}

p ublic void run()

{try

{ result[id]=worker.Rabin_miller(e); //子线程中调用远程对象的方

} catch(RemoteException re) {…………}

}

}

为客户端提供的远程方法的实现,其实是一个主线程对数个子线程的调控。除了使用信号量机制控制对两个队列的访问,还需处理工作站在工作时可能出现的故障,即工作站失效。所谓工作站失效,包括三种可能的情况:1)工作站或程序运行出错;(2)连接线路出错;(3)工作站不能在限定的时间内完成任务。

头两种情况的主要问题有:能否及时发现这一失效,由控制机构和工作站进行定期性确认对话可以完成这一功能;失效后能否从某个合适的点处重启整个并行程序或部分任务,简单的办法是整个程序完全重启,这对于系统性能是最坏的做法。第三种情况适用于对性能有苛刻要求的情形,一般是高速的科学计算问题。最好的解决方法是对工作站系统提供的运算能力提供合理的评价,以此作为问题分布的依据。Charlotte[7]系统将慢系统和出错同等看待。它采取的自调度方案是:子任务自由分配给请求的机器,提供的运算能力强的机器会较快的完成任务,也就会获得更多的任务;一旦任务分配完了,还有空闲的机器,就将尚未完成的任务重新分配出去,避免某一个任务在太慢的机器上过于拖延。这一方案实现简单,在任务划分平均合理时可以取得较好的效果。。

public synchronized oolean isPrimality(int e) throws Java.rmi.RemoteException

{ int I,j,wn=30;

oolean isPrime= true;

workstation_inter workstation;

int[] result = new int[NumOfTesting]; //测试结果数组

while(wn!=0 )

{ w orkThread t[] = new workThread[wn]; //初始化测试结果数组:

I=0;

while (I

for(j=0;j

if(result[j]== -1) isPrime=false;

//如果一旦有子线程的测试结果不是素数,就停止产生其他的子线程

if (!isPrime) break;

lm.wait_op();

workstation = (workstation_inter) list.firstElement();

try { removeWorkstation(workstation);

}catch(Exception ex){}

try { addToBusyList(workstation);

}catch(Exception ex){}

t[i] = new workThread(e,workstation,result,i);

t[i].start();

i++;

}//while

j=0;

try {

while (j

}catch(InterruptedException ex){ …………}

//接着根据结果进行判定

temp=0; //对本次有效子线程的数目的统计

for(i=0;i

wn=temp;

System.out.println("now Number Of Testing is : "+wn);

//如果变量wn>0,说明wn个子线程没有有效返回值,还需再次计算

}//while

if(!isPrime) return false;

else return true;

}

3)工作站。工作站接口的实现就是Rabin_Miller算法的实现,而主函数只要在服务器上注册成功即可。

第五章分析总结与展望

在Windows2000下安装jdk1.3.1_09的、硬件配置相同的(Pentium IV 2.4G,250MB)pc机组成的局域网上进行测试的结果如表1所示,每次测试产生30个子线程。单机计算指所有工作站使用相同的IP地址的情形。

表1 测试结果(单位:毫秒)

测试的大数大数的位数判断结果单机计算

分布式计算

3台工作站5台工作

10台工作

2521-1 156位是素数453 172 125 94

2-1 663位是素数15187 5031 3016 1531

2-1 1331位是素数115891 38297 23219 11625

2-1 3375位是素数1747313 581438 349516 174735

2-1 662位不是素数516 516 516 516

2-1 3375位不是素数58609 58234 58281 58000

从测试结果分析,随着工作站数量增加,整个测试的时间按比例减少。但由于网络通讯也需要占用时间,特别是当测试的数不是很大时,网络通讯所用的时间占整个测试的比例就比较大,时间并没有按希望地成比例减少。比如:2521-1的计算,10台工作站的测试时间并没有单机计算时间的十分之一;但211213-1,10台工作站的测试时间就大约时单机计算时间的十分之一。所以,测试的数越大,分布式计算的效果越明显。

进一步工作可以研究工作站的工作效率问题。比如有些工作站在工作时,明显要比一般工作时间要长,现象是有的工作站已经完成二三个子线程而有的却还没有结果。这种现象有很多原因:工作站本身硬件配置,运行的应用软件甚至死循环,死机等等。这样情况,如果在服务器中增加每个工作站的日志,通过对日志的分析在下一次分配任务的时候,平时工作状态好的工作站享有优先分配权。常常需要使用工作站群进行大工作量的科学计算,而这个群体是志愿者模式中可采用这种方案。当然,在分布式计算中,还有工作站的数量,状态、计算能力是动态地变换的问题,如何解决这些问题都需要进一步研究、探讨。

参考文献

[1]David Reilly,Michael Reilly著,沈凤等译,《Java网络编程与分布式计算》,北京:机械

工业出版社,2003.268-270

[2]Sun corporation. Java Remote Method Invocation(RMI),

https://www.wendangku.net/doc/7e3050424.html,/products/jdk/rmi

[3]Sun corporation. rmiregistry - The Java Remote Object Registry,

https://www.wendangku.net/doc/7e3050424.html,/j2se/1.4/docs/tooldocs/windows/rmiregistry.html

[4]Sun corporation. rmic-The Java RMI Compiler,

https://www.wendangku.net/doc/7e3050424.html,/j2se/1.4/docs/tooldocs/windows/rmic.html

[5]Bruce Scheier著,吴世忠等译,《应用密码学》。机械工业出版社,2000.181-183

[6]41st Known Mersenne Prime Found!!

https://www.wendangku.net/doc/7e3050424.html,/prime.htm

[7]TakagiH, MatsuokS, NakadaH. Ninflet: A Migratable Parallel Objects Framework Using

Java[M]

[8]徐建波等,一种面向应用的分布式计算新方法[J],计算机工程与应用,2002年第38卷第4

期。

[9]陶永祥等,基于Java的多层分布式应用结构[J],计算机工程与应用,2001年第37卷第19

期。

大数据与并行计算

西安科技大学 计算机科学与技术学院 实习报告 课程:大数据和并行计算 班级:网络工程 姓名: 学号:

前言 大数据技术(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法通过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》中大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据进行分析处理。大数据的4V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)。 特点具体有: 大数据分析相比于传统的数据仓库应用,具有数据量大、查询分析复杂等特点。《计算机学报》刊登的“架构大数据:挑战、现状与展望”一文列举了大数据分析平台需要具备的几个重要特性,对当前的主流实现平台——并行数据库、MapReduce及基于两者的混合架构进行了分析归纳,指出了各自的优势及不足,同时也对各个方向的研究现状及作者在大数据分析方面的努力进行了介绍,对未来研究做了展望。 大数据的4个“V”,或者说特点有四个层面:第一,数据体量巨大。从TB级别,跃升到PB级别;第二,数据类型繁多。前文提到的网络日志、视频、图片、地理位置信息等等。第三,处理速度快,1秒定律,可从各种类型的数据中快速获得高价值的信息,这一点也是和传统的数据挖掘技术有着本质的不同。第四,只要合理利用数据并对其进行正确、准确的分析,将会带来很高的价值回报。业界将其归纳为4个“V”——Volume(数据体量大)、Variety(数据类型繁多)、Velocity(处理速度快)、Value(价值密度低)。 从某种程度上说,大数据是数据分析的前沿技术。简言之,从各种各样类型的数据中,快速获得有价值信息的能力,就是大数据技术。明白这一点至关重要,也正是这一点促使该技术具备走向众多企业的潜力。 1.大数据概念及分析 毫无疑问,世界上所有关注开发技术的人都意识到“大数据”对企业商务所蕴含的潜在价值,其目的都在于解决在企业发展过程中各种业务数据增长所带来的痛苦。 现实是,许多问题阻碍了大数据技术的发展和实际应用。 因为一种成功的技术,需要一些衡量的标准。现在我们可以通过几个基本要素来衡量一下大数据技术,这就是——流处理、并行性、摘要索引和可视化。 大数据技术涵盖哪些内容? 1.1流处理 伴随着业务发展的步调,以及业务流程的复杂化,我们的注意力越来越集中在“数据流”而非“数据集”上面。 决策者感兴趣的是紧扣其组织机构的命脉,并获取实时的结果。他们需要的是能够处理随时发生的数据流的架构,当前的数据库技术并不适合数据流处理。 1.2并行化 大数据的定义有许多种,以下这种相对有用。“小数据”的情形类似于桌面环境,磁盘存储能力在1GB到10GB之间,“中数据”的数据量在100GB到1TB之间,“大数据”分布式的存储在多台机器上,包含1TB到多个PB的数据。 如果你在分布式数据环境中工作,并且想在很短的时间内处理数据,这就需要分布式处理。 1.3摘要索引 摘要索引是一个对数据创建预计算摘要,以加速查询运行的过程。摘要索引的问题是,你必须为要执行的查询做好计划,因此它有所限制。 数据增长飞速,对摘要索引的要求远不会停止,不论是长期考虑还是短期,供应商必须对摘要索引的制定有一个确定的策略。 1.4数据可视化 可视化工具有两大类。

腰椎间盘突出症手术并发症的防治体会

腰椎间盘突出症手术并发症的防治体会 目的:探讨手术治疗腰椎间盘突出症的并发症以及并发症防治方法。方法:回顾性分析本院2006年1月~2010年1月收治的205例行手术治疗腰椎间盘突出症的患者的临床资料,对所有患者术后随访1个月~2年,总结其并发症发生情况及防治方法。结果:术后并发症多为术后坐骨神经痛症状不缓解、术后出血、神经损伤、脑脊液漏、椎间隙感染等。结论:严格掌握手术指征,术前充分准备,术中精细操作,尽量减少神经根的牵拉,椎管内彻底止血,术后认真护理等能减少手术治疗腰椎间盘突出症并发症的发生。 标签:腰椎间盘突出症;手术并发症;防治 腰椎间盘突出症(LIDP)又称腰椎间盘纤维环破裂症,患者表现为腰腿痛和腰部活动受限,伴一侧或两侧下肢外侧感觉减退或区域性麻木,还有脊椎侧弯,腰背肌痉挛等[1]。腰椎间盘突出症可以分为腰椎间盘膨出、腰椎间盘突出和腰椎间盘脱出,一般多发于青壮年,男性的发病率要高于女性,同时过于肥胖或过于瘦弱的人也是高发人群。对于一些急性椎间盘突出疼痛剧烈、病史较长、反复发作、有明显神经受损症状或经保守治疗无效的LIPD患者需要行手术治疗,通过手术治疗大部分患者可以达到满意疗效,但仍有5%~20%的患者因多种原因出现手术并发症,进而影响了手术的疗效。本文回顾性分析本院2006年1月~2010年1月收治的205例行手术治疗腰椎间盘突出症患者的临床资料,其中有21例出现不同的并发症,现总结如下: 1 资料与方法 1.1 一般资料 本组205例患者中,男109例,女96例,年龄为25~62岁,平均45.79岁。所有患者均参照腰椎间盘突出症的诊断标准,肌力减弱、跟腱反射减弱或消失,直腿抬高试验及屈髋伸膝实验均阳性,并经临床及CT或MRI确诊,均存在不同程度的硬膜囊或神经根受压。205例患者病程为1~6年,平均2.5年,大部分患者在发病前有慢性腰痛史。L1~3椎间盘突出症4例,L4~5椎间盘突出症124例,L5~S1椎间盘突出者77例。主要症状:腰痛伴下肢后侧放射性疼痛,小腿外侧皮肤麻木不适和灼痛,少数伴有间歇性跛行。 1.2 手术指征及方法 1.2.1 手术指征 ①腰椎间盘突出症,反复发作,保守治疗3个月症状不能缓解或加重,体征典型。②急性椎间盘突出,腰腿疼痛剧烈难忍。③间歇性跛行并有根性坐骨神经痛。④有明显的神经根或马尾神经功能障碍症状和体征者。⑤中年患者病程较长,影响工作。

MATLAB分布式并行计算服务器配置和使用方法Word版

Windows下MATLAB分布式并行计算服务器配置和使用方 法 1MATLAB分布式并行计算服务器介绍 MATLAB Distributed Computing Server可以使并行计算工具箱应用程序得到扩展,从而可以使用运行在任意数量计算机上的任意数量的worker。MATLAB Distributed Computing Server还支持交互式和批处理工作流。此外,使用Parallel Computing Toolbox 函数的MATLAB 应用程序还可利用MATLAB Compiler (MATLAB 编译器)编入独立的可执行程序和共享软件组件,以进行免费特许分发。这些可执行应用程序和共享库可以连接至MATLAB Distributed Computing Server的worker,并在计算机集群上执行MATLAB同时计算,加快大型作业执行速度,节省运行时间。 MATLAB Distributed Computing Server 支持多个调度程序:MathWorks 作业管理器(随产品提供)或任何其他第三方调度程序,例如Platform LSF、Microsoft Windows Compute Cluster Server(CCS)、Altair PBS Pro,以及TORQUE。 使用工具箱中的Configurations Manager(配置管理器),可以维护指定的设置,例如调度程序类型、路径设置,以及集群使用政策。通常,仅需更改配置名称即可在集群间或调度程序间切换。 MATLAB Distributed Computing Server 会在应用程序运行时在基于用户配置文件的集群上动态启用所需的许可证。这样,管理员便只需在集群上管理一个服务器许可证,而无需针对每位集群用户在集群上管理单独的工具箱和模块集许可证。 作业(Job)是在MATLAB中大量的操作运算。一个作业可以分解不同的部分称为任务(Task),客户可以决定如何更好的划分任务,各任务可以相同也可以不同。MALAB中定义并建立作业及其任务的会话(Session)被称为客户端会话,通常这是在你用来编写程序那台机器上进行的。客户端用并行计算工具箱来定义和建立作业及其任务,MDCE通过计算各个任务来执行作业并负责把结果返

网络与分布式计算复习提纲

1.2 什么是分布式计算系统?它的实质是什么? 分布式计算系统是由多个相互连接的计算机组成的一个整体,这些计算机在一组系统软件(分布式操作系统或中间件)环境下,合作执行一个共同的或不同的任务,最少依赖于集中的控制过程、数据和硬件。 实质:分布计算系统=分布式硬件+分布式控制+分布式数据。 1.10多处理机与多计算机的区别是什么?同构多计算机和异构多计算机各有什么特点? 区别:多计算机是将多个计算机联合起来处理问题, 多处理机是在一个系统内集成多个处理器. 广义上说,使用多台计算机协同工作来完成所要求的任务的计算机系统都是多处理机系统。即多计算机系统。 狭义上说:多处理机系统的作用是利用系统内的多个CPU来并行执行用户的几个程序,以提高系统的吞吐量或用来进行冗余操作以提高系统的可靠性。 同构计算机的特点: 1.每个节点是一台计算机,包含CPU和存储器。 2.节点间的通信量较少。 3.同构计算机系统的互连有两种结构:基于总线的多计算机系统和基于交换的多计算机系统。 异构计算机的特点:

1.节点差异很大,节点可能是多处理机系统、集群或并行高性能计算机。 2.节点间通过互联网络如Internet连接起来的。 3.有两种实现方法:采用分布式操作系统和中间件软件层。 1.16什么是中间件,它的功能是什么?它在分布式系统中的地位是什么? 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯,是连接两个独立应用程序或独立系统的软件 功能:命名服务作业调度高级通信服务资源管理数据持久化分布式事务分布式文档系统安全服务 地位:中间件的一个重要目标是对应用程序隐藏底层平台的异构型,因此中间件系统都提供一组完整度不同的服务集。这些服务是通过中间件系统提供的接口来调用的。一般禁止跳过中间件层直接调用底层操作系统的服务。 1.18分布式系统有哪些计算模式?(必考) 1.面向对象模式

分布并行计算技术

Hadoop部署 所需要的软件 使用VMwareWorkstationPro搭建虚拟机,安装操作系统 Ubuntu14.04。 JDK1.8 Hadoop2.6.0 1.在Ubuntu中安装JDK 将JDK解压缩到 /home/kluas/java 在~/.bash_profile中配置环境变量,并通过source~/.bash_profile生效。 #java export JAVA_HOME=/home/kluas/java/jdk export JRE_HOME=/home/kluas/java/jdk/jre export PATH=$JAVA_HOME/bin;$JRE_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 检验JDK是否安装成功 java –version 2.配置ssh信任关系,实现无密码登录 生成机器A的公私密钥对:ssh-keygen -t rsa,之后一路回车。在~/.ssh 目录下生成公钥id_rsa.pub,私钥id_ras。 拷贝机器A的id_rsa.pub到机器B的认证文件中: cat id_rsa.pub >> ~/.ssh/authorized_keys 这时候机器A到机器B的信任关系就建立好了,此时在机器A可以不需要密码直接ssh登录机器B了 3.安装Hadoop2.6.0 解压hadoop软件包,编辑/etc/profile文件,并追加 export HADOOP_HOME=/usr/kluas/Hadoop export PATH=HADOOP_HOME/bin:$PATH 运行 source /etc/profile命令 修改配置文件hadoop目录etc/Hadoop/Hadoop-env.sh追加: export JAVA_HOME=/home/kluas/java/jdk 修改配置文件hadoop目录下etc/Hadoop/core-site.xml追加: fs.defaultFS hdfs://master hadoop.tmp.dir /home/tmp/hadoop

LBGK模型的分布式并行计算

万方数据

2LBGKD2Q9模型的并行计算 2.1数据分布 将流场划分成N。xN,的网格。设有P=只×Pv个进程参与并行计算,进程号P。=H以(0≤i<只,0≤J<尸v)。将数据按照重叠一条边的分块分布到各进程中。其中,进程P。存储并处理的数据网格点集,如图l所示。 图1进程珊存储并处理的区域(斜线处为重叠部分) 2.2交替方向的Jacobi迭代通信 Jacobi迭代是一类典型的通信迭代操作。文献[4】主要讨论了一个方向的Jacobi迭代。根据数据分布及计算要求,需要采用2个方向交替的Jacobi迭代通信操作。本文认为,“即发即收”的通信策略能有效避免完全的“先发后收”可能造成的通信数据“堆积”过多,从而避免数据的丢失。进程Pli的通信操作如下(见图2): (1)Ifi≠只一1then发送数据到进程P¨,; (2)Ifi≠0then从进程Pf_J,接收数据; (3)If,≠只-1then发送数据到进程Pml; (4)IfJ≠0then从进程P—l接收数据。 各进程并行执行上述操作。 图2交普方向的Jacobi迭代 2.3通信时间理论 由一般的通信模型可知,若发送、接收信息长度为n字节的数据所需时间为:丁(n)=口+n∥,其中,常数口为通信启动时间;∥为常系数,则上述一次交替方向的Jacobi迭代通信操作的时间约为 20e+2fl'N、.P,=1 P。=1 其他 其中,∥7=∥sizeof(double)。 一般情况下,当等3鲁,即等=鲁时,通信的数据量(字节数)是最少的,为4口+4∥,./丝堡。可见,通信的信息 V只×0 总量和通信时间随进程总数只×尸v的增加而减少。 由于c语言中数组是按“行”存放的(Fortran是按“列”存放的),当存放、发送列数据时,需要一定的辅助操作,这就增加了并行计算的计算时间,因此在只:Pv无法恰好等于Nx:N。时,需要综合考虑流场形状及大小、数据在内存中的按“行”(或按“列”)的存放方式,以确定数据的最佳分布方案。 3数值实验 数值实验是在“自强3000”计算机上进行的ou自强3000”计算机拥有174个计算结点,每个计算结点上有2个3.06CPU,2GB内存。本文的实验使用了其中的32个计算结点共64个CPU。程序采用MPI及C语言编写,程序执行时,每个计算结点中启动2个进程。数值实验针对不同规模的网格划分、不同进程数以及不同的数据分布方案进行了大量实验,测得如下结果:不同的流场规模对应着各自的最佳网格划分方式;计算次数越多,加速比越大,越能体现并行计算的优越性。 由表1数据可以得知,对于规模为Nx×N、,=400x400,数据划分成6×6块时的加速比最高,而对于MXNy=600x200,数据划分为12×3块则更具优越性。合适的划分方式可以使总体通信量减至最少,从而提高加速比和并行效率。另外,计算规模越大,加速比越大。 表1并行计算D2Q9模型的加速比(进程数为36) 在固定计算规模,增加处理器的情况下,并行系统的加速比会上升,并行效率会下降;在固定处理器数目,增加计算规模的情况下,并行系统的加速比和效率都会随之增加。 从表2可见,流场规模越大,并行计算的优越性越显著。因为此时计算规模(粒度)较大,相对于通信量占有一定的优势。由图3可见,加速比随进程数呈线性增长,这表明LBGKD2Q9模型的并行计算具有良好的可扩展性。 表2漉场规模固定时并行计算D2Q9模型的加速比 0816243240485664 numofprocess 图3藐场规模固定时D2Q9模型并行计算的加速比 4结束语 本文讨论了LBGKD2Q9模型的分布式并行计算,通过大量的数值实验重点研究了数据分布方案如何与问题规模匹配,以获得更高的并行效率的问题。展示了LBGK模型方法良好的并行性和可扩展性。得到了二维LBGK模型并行计算数据分布的一般原则、交替方向Jacobi迭代的通信策略。这些结论对进一步开展三维LBGK模型的并行计算及其他类似问题的并行计算有一定的指导意义。(下转第104页) 一101—万方数据

分布式与并行计算报告

并行计算技术及其应用简介 XX (XXX,XX,XXX) 摘要:并行计算是实现高性能计算的主要技术手段。在本文中从并行计算的发展历程开始介绍,总结了并行计算在发展过程中所面临的问题以及其发展历程中出现的重要技术。通过分析在当前比较常用的实现并行计算的框架和技术,来对并行计算的现状进行阐述。常用的并行架构分为SMP(多处理系统)、NUMA (非统一内存存储)、MPP(巨型并行处理)以及集群。涉及并行计算的编程模型有MPI、PVM、OpenMP、TBB及Cilk++等。并结合当前研究比较多的云计算和大数据来探讨并行计算的应用。最后通过MPI编程模型,进行了并行编程的简单实验。 关键词:并行计算;框架;编写模型;应用;实验 A Succinct Survey about Parallel Computing Technology and It’s Application Abstract:Parallel computing is the main technology to implement high performance computing. This paper starts from the history of the development of Parallel Computing. It summarizes the problems faced in the development of parallel computing and the important technologies in the course of its development. Through the analysis of framework and technology commonly used in parallel computing currently,to explain the current situation of parallel computing.Framework commonly used in parallel are SMP(multi processing system),NUMA(non uniform memory storage),MPP(massively parallel processing) and cluster.The programming models of parallel computing are MPI, PVM, OpenMP, TBB and Cilk++, etc.Explored the application of parallel computing combined with cloud computing and big data which are very popular in current research.Finally ,through the MPI programming model,a simple experiment of parallel programming is carried out. Key words:parallel computing; framework; programming model; application; experiment 1引言 近年来多核处理器的快速发展,使得当前软件技术面临巨大的挑战。单纯的提高单机性能,已经不能满足软件发展的需求,特别是在处理一些大的计算问题上,单机性能越发显得不足。在最近AlphaGo与李世石的围棋大战中,AlphaGo就使用了分布式并行计算技术,才能获得强大的搜索计算能力。并行计算正是在这种背景下,应运而生。并行计算或称平行计算时相对于串行计算来说的。它是一种一次可执行多个指令的算法,目的是提高计算速度,及通过扩大问题求解规模,解决大型而复杂的计算问题。可分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。其中空间上的并行,也是本文主要的关注点。 并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的,含有多个处理器的超级计算机,也可以是以某种方式互联的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。 目前常用的并行计算技术中,有调用系统函数启动多线程以及利用多种并行编程语言开发并行程序,常用的并行模型有MPI、PVM、OpenMP、TBB、Cilk++等。利用这些并行技术可以充分利用多核资源适应目前快速发展的社会需求。并行技术不仅要提高并行效率,也要在一定程度上减轻软件开发人员负担,如近年来的TBB、Cilk++并行模型就在一定程度上减少了开发难度,提高了开发效率,使得并行软件开发人员把更多精力专注于如何提高算法本身效率,而非把时间和精力放在如何去并行一个算法。

华南理工大学分布式计算期末考试卷题整理

华南理工大学分布式计算期末考试卷题整理 第一章:分布式 1)并行计算与分布式计算区别? (1)所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能 解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。 与并行计算不同的是,并行计算是使用多个处理器并行执行单个计算。 2)分布式计算的核心技术是? 进程间通信IPC!!! 3)解决进程间通信死锁的两种方法? 超时和多线程 4)分布式系统的CAP理论是什么? 一致性,可用性,分区容忍性 第二章:范型 1)网络应用中使用的最多的分布式计算范型是? 客户-服务器范型(简称CS范型) 2)消息传递范型与消息中间件范型异同? ●消息传递:一个进程发送代表请求的消息,该消息被传送到接受者;接受者处理该请求, 并发送一条应答消息。随后,该应答可能触发下一个请求,并导致下一个应答消息。如此不断反复传递消息,实现两个进程间的数据交换. 基于该范型的开发工具有Socket应用程序接口(Socket API)和信息传递接口(Message Passing Interface,MPI)等 ◆消息系统模型可以进一步划分为两种子类型:点对点消息模型 (Point-to-point message model)和发布订阅消息模型 (Public/Subscribe message model)。 ◆在这种模型中,消息系统将来自发送者的一条消息转发到接收者的消息队 列中。与基本的消息传递模型不同的是,这种中间件模型提供了消息暂存 的功能,从而可以将消息的发送和接受分离。与基本的消息传递模型相比,点对点消息模型为实现异步消息操作提供了额外的一层抽象。如果要在基 本的消息传递模型中达到同样的结果,就必须借助于线程或者子进程技术。 3)一个分布式应用能否使用多个分布式计算范型? 可以,部分。 4)抽象层次最低的分布式计算范型是?

并行计算考试复习

1在并行机系统中,主流操作系统有UNIX/Linux,AIX(IBM),HPUX(HP),Solaris(SUN),IRIX(SGI)等。 2 常用的并行算法设计的基本技术有划分,分治,倍增,流水域,破对称,平衡 树等设计技术。 3 Matlab并行程序编写过程分为创建对象,创建工作,指定工作任务,提交工作,等待和返回计算任务结果六步。 1. 云计算是对( D )技术的发展与运用 A. 并行计算 B网格计算 C分布式计算 D三个选项都是 2. IBM在2007年11月退出了“改进游戏规则”的( A )计算平台,为客户带来即买即用的云计算平台。 A. 蓝云 B. 蓝天 C. ARUZE D. EC2 3. 微软于2008年10月推出云计算操作系统是( C ) A. Google App Engine B. 蓝云 C. Azure D. EC2 4. 2008年,( A )先后在无锡和北京建立了两个云计算中心 A. IBM B. Google C. Amazon D. 微软 5. 将平台作为服务的云计算服务类型是( B ) A. IaaS B.PaaS C.SaaS D.三个选项都不是 6. 将基础设施作为服务的云计算服务类型是( A ) A. IaaS B.PaaS C.SaaS D.三个选项都不是 7. IaaS计算实现机制中,系统管理模块的核心功能是( A ) A. 负载均衡 B 监视节点的运行状态 C应用API D. 节点环境配置 8. 云计算体系结构的( C )负责资源管理、任务管理用户管理和安全管理等工作 A.物理资源层 B. 资源池层 C. 管理中间件层 D. SOA构建层 9. 下列不属于Google云计算平台技术架构的是( D ) A. 并行数据处理MapReduce B.分布式锁Chubby C. 结构化数据表BigTable D.弹性云计算EC2 10. 在目前GFS集群中,每个集群包含( B )个存储节点 A.几百个 B. 几千个 C.几十个 D.几十万个 11. 下列选项中,哪条不是GFS选择在用户态下实现的原因( D ) A.调试简单 B.不影响数据块服务器的稳定性 C. 降低实现难度,提高通用性 D. 容易扩展 12. GFS中主服务器节点存储的元数据包含这些信息( BCD ) A.文件副本的位置信息 B.命名空间 C. Chunk与文件名的映射 D. Chunk副本的位置信息 13. 单一主服务器(Master)解决性能瓶颈的方法是( ABCD ) A.减少其在数据存储中的参与程度 B. 不适用Master读取数据 C.客户端缓存元数据 D. 采用大尺寸的数据块 14. ( B )是Google提出的用于处理海量数据的并行编程模式和大规模数据集的并行运算的软件 架构。 A. GFS B.MapReduce C.Chubby D.BitTable 15. Mapreduce适用于( D ) A. 任意应用程序 B. 任意可在windows servet2008上运行的程序 C.可以串行处理的应用程序 D. 可以并行处理的应用程序

网络与分布式计算复习提纲

1.2什么是分布式计算系统?它的实质是什么? 分布式计算系统是由多个相互连接的计算机组成的一个整体,这些计算机在一组系统软件(分布式操作系统或中间件)环境下,合作执行一个共同的或不同的任务,最少依赖于集中的控制过程、数据和硬件。 实质:分布计算系统=分布式硬件+分布式控制+分布式数据。 1.10多处理机与多计算机的区别是什么?同构多计算机和异构多计算机各有什么特点? 区别:多计算机是将多个计算机联合起来处理问题, 多处理机是在一个系统内集成多个处理器. 广义上说,使用多台计算机协同工作来完成所要求的任务的计算机系统都是多处理机系统。即多计算机系统。 狭义上说:多处理机系统的作用是利用系统内的多个CPU来并行执行用户的几个程序,以提高系统的吞吐量或用来进行冗余操作以提高系统的可靠性。 同构计算机的特点: 1.每个节点是一台计算机,包含CPU和存储器。 2.节点间的通信量较少。 3.同构计算机系统的互连有两种结构:基于总线的多计算机系统和基于交换的多计算机系统。 异构计算机的特点: 1.节点差异很大,节点可能是多处理机系统、集群或并行高性能计算机。 2.节点间通过互联网络如Internet连接起来的。 3.有两种实现方法:采用分布式操作系统和中间件软件层。 1.16什么是中间件,它的功能是什么?它在分布式系统中的地位是什么? 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯,是连接两个独立应用程序或独立系统的软件 功能:命名服务作业调度高级通信服务资源管理数据持久化分布式事务分布式文档系统安全服务 地位:中间件的一个重要目标是对应用程序隐藏底层平台的异构型,因此中间件系统都提供一组完整度不同的服务集。这些服务是通过中间件系统提供的接口来调用的。一般禁止跳过中间件层直接调用底层操作系统的服务。

华南理工大学分布式计算期末考试卷题整理

华南理工大学分布式计算期末考试卷题整 理 第一章:分布式 1)并行计算与分布式计算区别? (1)所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能 解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些 计算结果综合起来得到最终的结果。 与并行计算不同的是,并行计算是使用多个处理器并行执行单个计算。 2)分布式计算的核心技术是? 进程间通信IPC!!! 3)解决进程间通信死锁的两种方法? 超时和多线程 4)分布式系统的CAP理论是什么? 一致性,可用性,分区容忍性 第二章:范型 1)网络应用中使用的最多的分布式计算范型是? 客户-服务器范型(简称CS范型) 2)消息传递范型与消息中间件范型异同? 消息传递:一个进程发送代表请求的消息,该消息被传送到接受者;接受者处理该请求,并发送一条应答消息。随后,该应答可能触发下一个请求,并导致下一个应答消息。如 此不断反复传递消息,实现两个进程间的数据交换. 基于该范型的开发工具有Socket应用程序接口(Socket API)和信息传递接口(Message Passing Interface,MPI)等 消息系统模型可以进一步划分为两种子类型:点对点消息模型(Point- to-point message model)和发布订阅消息模型(Public/Subscribe message model)。 在这种模型中,消息系统将来自发送者的一条消息转发到接收者的消息 队列中。与基本的消息传递模型不同的是,这种中间件模型提供了消息 暂存的功能,从而可以将消息的发送和接受分离。与基本的消息传递模 型相比,点对点消息模型为实现异步消息操作提供了额外的一层抽象。 如果要在基本的消息传递模型中达到同样的结果,就必须借助于线程或 者子进程技术。 3)一个分布式应用能否使用多个分布式计算范型? 可以,部分。

并行和分布计算技术现状及发展策略

计算1112 潘森林 2011810045 并行和分布计算技术现状及发展策略 摘要:随着网络的发展,网速已经不再成为技术上的制约,由原来的每秒几kb至今的几百兆。随之而来的云计算技术也逐渐趋于成熟。那么什么是云计算呢?本文将为你介绍云计算与分布式计算和并行计算的关系 关键字:云计算并行计算分布式计算 并行计算机从70年代的开始,到80年代蓬勃发展和百家争鸣,再到90年代体系结构框架趋于统一,近年来其快速发展,并行机技术日趋成熟。首先是市场的需求,一直是推动并行计算机发展的主要动力,大量实际应用部门,如天气预报、核武器、石油勘探、地震数据处理、飞行器数值模拟以及其他大型事务处理等,都需要每秒执行数十万亿次乃至数百万亿此浮点运算的计算机,基于这些应用问题本身的限制,并行计算是满足它们的唯一可行途径。而分布式计算技术随着云计算的兴起,也逐渐趋于成熟,分布式计算技术是把网络上分散于各处的资源汇聚起来,利用空闲的计算容量完成各种大规模、复杂的计算和数据处理任务。

?并行算法的基本原理 并行算法就是用多台处理机联合求解问题的方法和步骤,其执行过程是指将给定的问题首先分解成若干个尽量相互独立的子问题,然后使用多台计算机同时求解它,从而最终求得原问题的解。并行算法是并行计算中一个非常重要的问题。并行算法的研究应该确立一个“理论-设计-实现-应用”的系统方法,形成一个完善的“架构—算法—编程” 方法论,这样才能保证并行算法不断发展并变得更加实用。简单的说,算法就是求解问题的方法和步骤。并行算法,就是在并行机上用很多个处理器联合求解问题的方法和步骤。 ?并行计算(Parallel Computing)是指同时使用多种计算资源解决计算 问题的过程。并行计算的主要目的是快速解决大型且复杂的计算问题。此外还包括:利用非本地资源,节约成本―使用多个"廉价"计算资源取代大型计算机,同时克服单个计算机上存在的存储器限制。传统地,串行计算是指在单个计算机(具有单个中央处理单元)上执行软件写操作。CPU 逐个使用一系列指令解决问题,但其中只有一种指令可提供随时并及时的使用。并行计算是在串行计算的基础上演变而来,它努力仿真自然世界中的事务状态:一个序列中众多同时发生的,复杂且相关的事件。 ?并行计算的特点:将工作分离成离散部分,有助于同时解决;随时 并及时地执行多个程序指令;多计算资源下解决问题的耗时要少于

分布式与并行计算报告

分布式与并行计算报告

————————————————————————————————作者:————————————————————————————————日期: ?

并行计算技术及其应用简介 XX (XXX,XX,XXX) 摘要:并行计算是实现高性能计算的主要技术手段。在本文中从并行计算的发展历程开始介绍,总结了并行计算在发展过程中所面临的问题以及其发展历程中出现的重要技术。通过分析在当前比较常用的实现并行计算的框架和技术,来对并行计算的现状进行阐述。常用的并行架构分为SMP(多处理系统)、NUMA(非统一内存存储)、MPP(巨型并行处理)以及集群。涉及并行计算的编程模型有MPI、PVM、Ope nMP、TBB及Cilk++等。并结合当前研究比较多的云计算和大数据来探讨并行计算的应用。最后通过MPI编程模型,进行了并行编程的简单实验。 关键词:并行计算;框架;编写模型;应用;实验 A Succinct SurveyaboutParallelComputing Technology and It’sApplication Abstract:Parallel computing is the main technology to implement high performance computing. Thispaper starts fromthe historyofthe development of Parallel Computing. It summarizes the problems faced in the development of parallel computingand the i mportant technologies in the course of itsdevelopment. Through theanalysis of framework andtechnologycommonly used inparallel computing currently,to explain the current situationofparallelcomputing.Framework commonlyused in parallel areSMP(multi processing system),NUMA(non uniform memory storage),MPP(massivel yparallel processing)and cluster.The programming models of parallelcomputing areMPI, PVM,OpenMP, TBB and Cilk++,etc.Explored the application ofparallel computing combinedwithcloudcomputingand big data whichare very popular incu rrentresearch.Finally ,through the MPI programming model,asimple experiment ofparallel programming iscarried out. Keywords:parallel computing; framework;programming model;application; experiment 1引言 近年来多核处理器的快速发展,使得当前软件技术面临巨大的挑战。单纯的提高单机性能,已经不能满足软件发展的需求,特别是在处理一些大的计算问题上,单机性能越发显得不足。在最近AlphaGo与李世石的围棋大战中,AlphaGo就使用了分布式并行计算技术,才能获得强大的搜索计算能力。并行计算正是在这种背景下,应运而生。并行计算或称平行计算时相对于串行计算来说的。它是一种一次可执行多个指令的算法,目的是提高计算速度,及通过扩大问题求解规模,解决大型而复杂的计算问题。可分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。其中空间上的并行,也是本文主要的关注点。 并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的,含有多个处理器的超级计算机,也可以是以某种方式互联的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。 目前常用的并行计算技术中,有调用系统函数启动多线程以及利用多种并行编程语言开发并行程序,常用

分布与并行计算思考题答案整理.docx

分布式系统 笫一章分布式系统概述 1?一个有256个CPU的多计算机系统被组织成16X16的网格。在最坏的情况尺-?条消息的传输延迟为多少?(以跳为单位) 假定路由是最优的.那么最长的优化(理想)路径是从网格的一?角到相对的?角,即沿着对角线的路径。这个路径的长度是3()跳。如果在单行或单列上的终端处理器是互联起來的,那么路径长度变成15^ 2?考虑一256个CPU的超立方休.在最坏的情况下,一个消息延迟是多少?(以跳为单位) 对于256个CPU的超立方体,每个节点有一个二进制地址.范围从OOOOOO(M)到11111111?从一个机器到另一个的一?跳,耍改变二进制地址中的一位,因此地址从00000000变到00000001就是一跳,从00000001到0(X)00011又是另外一跳。因此总共需耍八跳。 3?一个冬计算机系统有4096个50-MIPS的CPU,通过omega网络连接到内存。为了使一个内存请求能在-?条指令的时间内到达内存并返回结果.转换的速度需要有影快? 5O-MIPS=5纳秒.需耍【(4096的对数)=12】层开关.就有这么卷延迟?因为有来回.所以乘以2.转换速度就是5/24=0.208纳秒。 4 ?一台试验文件服务器由于错误的原因.3/4的时间正常工作,1/4的时间由于故障停止工作。为了达到99%的可用性,这一文件服务誥需耍复制多少次? 设k是服务器的数则由题意知(l/4)k<0.01?这是最坏的情况.即所有的服务器都出故障的时间至名为1%的时间的情况。这k = 4。 5 ?假设有一个包含m个待编详文件的大源程序。这个编译工作将在一个拥有!1个处理器的系统上进行.其中:n?m。希望这种方法的速度嚴好达到单处理器的m倍。哪些因素导致实际的速度达不到该值? 答:可能由于总线容量限制从而引起总线过载,或者交换开关延时。 6?举例说明名核并行计算机的结构和性能计算方法。(网上找的答案.参考) 多核并行计算机的结构 多核即在一?个单芯片上而集成两个捷至更多个处理器内核.其中每个内核都有自己的逻辑单元.控制单元.中断处理器、运算单元, -级cache.二级cache共享或独有.其部件的完整性和单核处理器内核相比完全一?致。片上多核处理器(CMP)是将多个计算内核集成在一个片处埋器芯片中.从而提高计算能力。每个微处理器核心实质上都是?个相对简单的单?线程微处理誥或者比较简单的冬线程微处理器. 这样多个效处理器核心就可以并行地执行程序代码.因而具有了较高的线程级并行性。由于CMP采川了相对简单的微处理蛊作为处理器核心?使得CMP具有高主煉设计和验证周期短.控制逻辑简单、扩展性好.易于实现.功耗低.通信延迟低等优点。此外.CHP还能充分利用不同应用的指令级并行和线程级并行,具有校高线程级并行性的应用町以很好地利用这种结构來提高性能。按照内核的对等与否,CMP 可分为同构多核和异构多核。计算内核相同,地位对等的称为''同构参核役同构CHP人务数山通用的处理器组成.零个处理器执行和同或者类似的任务。计算内核不同,地位不对等的称为“异构多核”,异构多核多采用“主处理核+协处理核”的设计。 C5IP处理器山多个CPU核心组成.每个核心执行%自的程序代码.但是CMP处理器的冬CPU核心执行的程序之间耍进行数据共享和同步.所以硬件结构必须支持核间通信。高效的通信机制是CHP处理器高性能的敢要保障?比较主流的片上高效通信机制有两种,一种是基于总线共享的cache结构,一种是基于片上的互连结构。总线共cache结构是扌旨每个CPU内核拥有共享的二级或三级cache,用于保存比较常用的数据.并通过连接核心的总线进行通信。这种系统的优点是结构简单,通信速度I淙缺点是基于总线的结构可扩展性较差。基于片上互连的结构是指每个CPU核心具有独立的处理单元和cache,各个CPU核心通过交叉开关或片上网络等方式连接在-?起。各个CPU 核心间通过消息通信。这种结构的优点是可扩展性好,数据带宽有保证,缺点是硕件结构复杂?且软件改动较大。 性能计算方法 以下6种性能爲求是用户经常提到的:执行时间.运行速隊吞吐率.利用率.成本有效性以及性能/成本比。 1) 运行?:运行速度是衡虽计算机性能的-项币雯指标。通常所说的计算机运算速度(平均运算速度).是指毎秒钟所能执行的描令条数.-般用 “百万条指令/秒"(mips, Million Instruction Per Second)来描述。同一台计算机.执行不同的运算所需时间可能不同?【大M对运算速度的描述常采用不同的方法。常用的有CPU时钟频率(丄频入每秒T?均执行折令数(ips)等。 2) 执行时间:等于从并行程序开始执行到所有进程执行完毕,瞄上时钟走过的时间,也称为谱上时间((wall clock time wall clock time).对客个 进程,增上时间可进??步分解为计算进涉分解为计算CPU时间.通偃CPU.同步开销时间.同步解的进程空闲时间。 3) 吞吐率:吞吐率定义为在单位时间内所处理的作业数。如果每次只执行一个作业,那么吞吐率就是执行时何的(御数。当有多个作业彼同 时执行时.常使用吞吐率来农示系统的性能。 4) 利川率:可茨示为计算机可达到速度与峰值速度之比。 5) 成本有效性:农示成本有效性的合适指标是利用率因子(或简称利川率),其可用利用率农达式,即农示为一个给定计算机可达到速度与峰值 速度之比。 6) 性能/成木比:所获得的性能与所消耗费用之比。性能可以川所获得的计并机达到放大速度表示。 第二章分布式系统中的通信机制 1?如果一个客户/服务器系统的通信原语是非阻塞的,在消息实际彼发送之前发送.对send的调川已完成。为了减少开销? 一些系统不拷贝数据到内核,而是直接从川户空间发送。对于这样的系统,诸设计两种方案.发送者能知道传输己经完成?可以遥新使用缓冲区。 第-?种方法是内核将消息拷贝到内部缓冲区,其后允许进程继续执行。第二种方法是当消息被发送后?中断发送者并通知它缓冲区可用.这里不需耍备分,节省了时间。 2?在许多通信系统中,调用send 个计数器,以保证当服务器削溃时客户机不会永久彼挂起。假设一容错系统,所有的客八机和 服务器都用多处理机方式实现.那么客户机或服务器谢溃的概率儿乎等于寥。你认为在这样的系统中能安全地避免超时吗? 不安全。因为在客户机和眼务器的通信过程中,并不仅仅由于客户机或服务器崩溃,从而引起信息的丢失,系统的瘫痪。在信息传输网络中也可能引起信息的丢失。而超时机制能够無决这个问题。 3. 解释RPC的工作原理和参数传递方法。僻释何为异步RPC。 客户机器上的进程调用远程过程时,通过客户存根将参数传递到服务器,然后阻塞"C直到收到响应。服务器上的服务器存根使用这些参数调用本地的过程,得出结果后再传递冋客户机器客户存根捉取结果后以通常的方式返冋。从客户的角度看,该过程和木地调用具有相同的形式,是透明的。 参数传递方法有传递值参数和传递引川参数。 在异步RPC中,服务器接收到客户发送的RPC请求后立即向客户送回应冷Z后再调川客户请求的过程.客户收到确认消息麻继续向下执行,只是在服务器将结果传递回来时发生一个中断。

相关文档