知识大全 使用.net Remtoing并行计算
Posted 知
篇首语:人行千里路,胜读十年书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用.net Remtoing并行计算相关的知识,希望对你有一定的参考价值。
使用.net Remtoing并行计算 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在MSDN上发现一篇文章是介绍如何使 Remoting进行并行计算的 刚好本人对并行计算很有兴趣 于是仔细地分析了一下此程序的代码 原文及程序可以在此处获得 由于觉得原文只是作了一个大致的讲解 有很多细节只是掩藏在源代码中 所以在花了很多时间分析完源程序后 才对原文有了很深的理解 疏理出一些内容出来和大家分享 一.概述 NET Remtoing用于在远程服务器和客户机之间互相调用对象 这些对象是存在于同一AppDomain中的 它使用Soap或二进制的方式传递消息(即要调用的对象) 传送协议为HTTP或TCP 二.Remoting如何实现并行计算? NET Remoting与并行计算好像是两个不同的概念 前者更类似于分布式计算和Web Service 而后者实际上是计算粒度更小的任务 但它将一个计算任务分配给多个节点计算 然后汇总成一个结果返回 根据以上思想 实现上将分布的对象的粒度设计小一点即可实现并行计算 并行计算的一个关键因素是进程(或子任务)间通讯 而我们 remoting中的对象间通讯作为进程间通讯即可 本例并行计算Pi的小数点 精确到N位 使 remoting可以如下实现 在每个节点上运行相同的程序 但每个节点计算不同位置的小数位 如NodeA计算小数点后 位 NodeB计算 位 NodeC计算 位 这样最终汇总的结果就可以有 位 由于是并行计算 比起单机计算 时间要快上很多倍 其加速比与每台节点的速度及整个通信网络的速度有关 计算模型如下图所示 > 三.并行算法 要进行并行计算 首先要设计好并行算法和通讯模式 由于我们只是在PC机群进行并行计算 所以采用了最简单的主从式并行模型 即由一个主进程负责任务的分发 结果的归约 将子任务平均分配到每个节点上计算 但实际上本文中使用的并不是平均分配任务 而是更好的任务池工作方式 即每个节点计算完一个子任务后 会向主进程申请新的任务 一直到任务全部计算完为止 这样的好处是计算能力越强的节点计算的任务也越多 比起平均分配来说可以提高总体的计算和减少同步时间 > 四.程序结构 此程序主要由以下几个包组成 > ● . ) ServerLoader 用于加载提供可远程调用的服务器对象 指定调用使用的网络协议和端口 以便于在局域网中被调用 然后侦听来自客户端的请求 在服务器上处理此请求并返回结果 简单来说即每个节点都必须运行ServerLoader程序 以向外界声明可被调用的对象(即Plouffe_bellard dll中的对象) 以下代码为调用配置文件 String ConfigFilePath = Path GetDirectoryName(Application ExecutablePath) + ServerLoader nfig ; RemotingConfiguration Configure(ConfigFilePath); 配置文件为 nfig <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= /> </channels> </application> </system runtime remoting> </configuration> ● . ) Plouffe_bellard 这就是 NET Remoting中的实际被调用的远程对象 它被置于每个节点上 它是继承自System MarshalByRefObject 这样的派生对象从来都不会离开它的应用域 客户就可以通过代理对象调用远程对象的方法 它是用来计算圆周率PI的小数点位数的程序 Plouffe_Bellard算法具有很好的并行性 它可以指定要计算的小数点的位置 如第二节所述 其函数形式为 public class Plouffe_Bellard : System MarshalByRefObject public String CalculatePiDigits(int n) … ● . )DigitsOfPi 此子基础上为整个项目核心部分 可作为客户端程序运行 它主要实现主界面UI处理 节点配置 多线程创建与同步 计算任务分配与汇总的功能 只需要在任何一台节点上运行即可 包括以下几个对象 MainForm SolutionArray SolutionItem RemotingObject CalculationThread ■ mainForm 即处理UI对象 ■ SolutionArray是并行线程分配与管理程序 如:任务池创建 任务分配 线程创建 同步线程 汇聚结果等 ■ SolutionItem即任务的数据结构 包括要计算的小数点位 计算的结果 计算的在机器 ■ RemotingObject是RemotePiCalculator 用于获取远程对象 ■ CalculationThread 计算模块 在线程中运算(由SolutionArray产生和调用) 并不断从任务池中取得任务进行计算 以下为这几个对象的序列图 > 当远程对象的CalculatePiDigits被客户端程序调用时 此要求即被发送到远程机器的ServerLoader对象 然后服务器上的对象就会计算结果 最后将计算的结果返回给客户端程序 显示在文本框中 五.结果分析 机器配置说明 MOORE MHz AMD Duron M SDR LOZIT GHz Batumn M DDR 时间比较 > 由于算法的特性 计算到高位时可以看到计算速度逐渐变慢 在我们的机器上 算到第 位附近速度已经是非常之慢 忍受不住终于中断 一共计算了 位 共耗时 ms 即 分钟 在实验中还发现 节点只能与同一子网中其它节点相连才有效 要与子网外的节点相连 可能要涉 中的更高级话题 就不太清楚了 六.后记 本文中的并行算法相对简单 没有涉及并行计算的高级算法及其它内容 如子任务间并没有传递数据 使 remoting是否适合作并行计算呢?当在科学计算领域中已经有现成的MPI MVP等并行通讯库可用时?如果可以出现MPI for C# 那真是一大福音 (好像俄罗斯的专家们已经实现了这个项目 叫做T System[ ]) 如果有时间 希望会在以后我文章中继承研究 remoting进行并行计算 国外的一些研究组好像已经有不少开始这方面的研究 希望有兴趣的朋友和本人联系 一同探讨 cha138/Article/program/Java/hx/201311/26526相关参考
ADO.NET的并行控制与数据存取冲突侦测 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 
.NET4并行编程之共享数据问题和解决概述 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在开始
知识大全 .NET Framework 4更重大的并行化进步
.NETFramework4更重大的并行化进步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
VS2010中Parallel类实现并行计算 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在N
.NET4特性聚焦:并行编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用语言运行时(Com
ASP.NET计算廿四节气 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSystem
并行心律依其发生激动部位的不同,可分为窦性、房性、房室交界性及室性。前者极罕见,后者最为常见。 (1)房性并行心律及并行心动过速心电图表现: ①具有房性期前收缩的P`波特征。 ②主节律点一般是窦
并行心律依其发生激动部位的不同,可分为窦性、房性、房室交界性及室性。前者极罕见,后者最为常见。 (1)房性并行心律及并行心动过速心电图表现: ①具有房性期前收缩的P`波特征。 ②主节律点一般是窦
VB.NET中得到计算机硬件信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文汇集了中得到
知识大全 用ASP.NET实现一个简单的计算器(适合入门者)
用ASP.NET实现一个简单的计算器(适合入门者) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!