分享
 
 
 

使用.net Remtoing并行计算

王朝c#·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在MSDN上发现一篇文章是介绍如何使用.net Remoting进行并行计算的,刚好本人对并行计算很有爱好,于是仔细地分析了一下此程序的代码。原文及程序可以在此处获得。由于觉得原文只是作了一个大致的讲解,有很多细节只是掩藏在源代码中,所以在花了很多时间分析完源程序后,才对原文有了很深的理解,疏理出一些内容出来和大家分享。

一.概述

.NET Remtoing用于在远程服务器和客户机之间互相调用对象,这些对象是存在于同一AppDomain中的。它使用Soap或二进制的方式传递消息(即要调用的对象),传送协议为HTTP或TCP。

二.Remoting如何实现并行计算?

.NET Remoting与并行计算似乎是两个不同的概念,前者更类似于分布式计算和Web Service,而后者实际上是计算粒度更小的任务,但它将一个计算任务分配给多个节点计算,然后汇总成一个结果返回。

根据以上思想,实现上将分布的对象的粒度设计小一点即可实现并行计算。并行计算的一个要害因素是进程(或子任务)间通讯,而我们把.net remoting中的对象间通讯作为进程间通讯即可。

本例并行计算Pi的小数点,精确到N位。使用.net remoting可以如下实现。在每个节点上运行相同的程序,但每个节点计算不同位置的小数位,如NodeA计算小数点后1-9位,NodeB计算10-18位,NodeC计算19-27位,这样最终汇总的结果就可以有1-27位。由于是并行计算,比起单机计算,时间要快上很多倍,其加速比与每台节点的速度及整个通信网络的速度有关。计算模型如下图所示:

三.并行算法

要进行并行计算,首先要设计好并行算法和通讯模式。由于我们只是在PC机群进行并行计算,所以采用了最简单的主从式并行模型,即由一个主进程负责任务的分发,结果的归约,将子任务平均分配到每个节点上计算。

但实际上本文中使用的并不是平均分配任务,而是更好的任务池工作方式。即每个节点计算完一个子任务后,会向主进程申请新的任务,一直到任务全部计算完为止,这样的好处是计算能力越强的节点计算的任务也越多。比起平均分配来说可以提高总体的计算和减少同步时间。

四.程序结构

此程序主要由以下几个包组成,

● 4.1)ServerLoader

用于加载提供可远程调用的服务器对象,指定调用使用的网络协议和端口,以便于在局域网中被调用,然后侦听来自客户端的请求,在服务器上处理此请求并返回结果。

简单来说即每个节点都必须运行ServerLoader程序,以向外界声明可被调用的对象(即Plouffe_bellard.dll中的对象)。

以下代码为调用配置文件:

String ConfigFilePath = Path.GetDirectoryName(application.ExecutablePath) +ServerLoader. exe.config";

RemotingConfiguration.Configure(ConfigFilePath);

配置文件为:ServerLoader.exe.config

<configuration

<system.runtime.remoting

<application name = "ServerLoader"

<service

<wellknown

mode="SingleCall"

type="PB.Plouffe_Bellard,Plouffe_Bellard"

objectUri="Plouffe_Bellard"/

</service

<channels

<channel ref="tcp server" port="9000"/

</channels

</application

</system.runtime.remoting

</configuration

● 4.2)Plouffe_bellard

这就是.NET Remoting中的实际被调用的远程对象,它被置于每个节点上。它是继续自System.MarshalByRefObject,这样的派生对象从来都不会离开它的应用域,客户就可以通过代理对象调用远程对象的方法。

它是用来计算圆周率PI的小数点位数的程序,Plouffe_Bellard算法具有很好的并行性,它可以指定要计算的小数点的位置,如第二节所述。

其函数形式为:

public class Plouffe_Bellard : System.MarshalByRefObject

{

public String CalculatePiDigits(int n)

{ … }

}

● 4.3)DigitsOfPi

此子基础上为整个项目核心部分,可作为客户端程序运行。它主要实现主界面UI处理、节点配置,多线程创建与同步,计算任务分配与汇总的功能,只需要在任何一台节点上运行即可。包括以下几个对象:

MainForm,SolutionArray,SolutionItem,RemotingObject,CalculationThread。

■ mainForm:即处理UI对象

■ SolutionArray是并行线程分配与治理程序,如:任务池创建、任务分配、线程创建、同步线程, 汇聚结果等。

■ SolutionItem即任务的数据结构。包括要计算的小数点位, 计算的结果, 计算的在机器。

■ RemotingObject是RemotePiCalculator,用于获取远程对象。

■ CalculationThread:计算模块,在线程中运算(由SolutionArray产生和调用),并不断从任务池中取得任务进行计算。

以下为这几个对象的序列图:

当远程对象的CalculatePiDigits被客户端程序调用时,此要求即被发送到远程机器的ServerLoader对象。然后服务器上的对象就会计算结果。最后将计算的结果返回给客户端程序,显示在文本框中。

五.结果分析

机器配置说明

MOORE700MHz AMD Duron192M SDR

LOZIT1.8GHz Batumn 256M DDR

时间比较

由于算法的特性,计算到高位时可以看到计算速度逐渐变慢。在我们的机器上,算到第3000位四周速度已经是非常之慢,忍受不住终于中断,一共计算了3330位,共耗时719545 ms,即12分钟。在实验中还发现,节点只能与同一子网中其它节点相连才有效,要与子网外的节点相连,可能要涉及.net 中的更高级话题,就不太清楚了。

六.后记:

本文中的并行算法相对简单,没有涉及并行计算的高级算法及其它内容,如子任务间并没有传递数据。使用.net remoting是否适合作并行计算呢?当在科学计算领域中已经有现成的MPI,MVP等并行通讯库可用时?假如可以出现MPI for C#,那真是一大福音。(似乎俄罗斯的专家们已经实现了这个项目,叫做T-System[2])。假如有时间,希望会在以后我文章中继续研究用.net remoting进行并行计算。国外的一些研究组似乎已经有不少开始这方面的研究,希望有爱好的朋友和本人联系,一同探讨。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有