动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.MIDlet的生命周期的深入理解及游.
.Jive中的设计模式.
.使用FileFilter搜索文件.
.Java程序把Word文档直接转换成HT.
.用Java开发3D游戏之创建场景.
.探索J2ME:用GCF通信.
.Apache目录服务器中存储Java对象.
.AWT 将Graphics对象转换为Image对.
.CreateTextFile 方法.
.struts构建文件上传(2).
.ANT十五大最佳实践.
.[JAVA100例]068、使用DOM解析XML.
.浅谈Java中利用JCOM实现仿Excel编.
.Tomcat设置类似IIS的访问密码.
.motorola铃声算法,是Java的!.
.name 属性.
.怎样学好JAVA的一些总结.
.[webservices开发]配置XFire.
.将 TOC 从 XML 带到 DHTML地带.
.junit使用简明手册.

使用.net Remtoing并行计算

发表日期:2008-1-5 |



  在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位。由于是并行计算,比起单机计算,时间要快上很多倍,其加速比与每台节点的速度及整个通信网络的速度有关。计算模型如下图所示:
  
 使用.net Remtoing并行计算(图一)

  三.并行算法
  要进行并行计算,首先要设计好并行算法和通讯模式。由于我们只是在PC机群进行并行计算,所以采用了最简单的主从式并行模型,即由一个主进程负责任务的分发,结果的归约,将子任务平均分配到每个节点上计算。
  
  但实际上本文中使用的并不是平均分配任务,而是更好的任务池工作方式。即每个节点计算完一个子任务后,会向主进程申请新的任务,一直到任务全部计算完为止,这样的好处是计算能力越强的节点计算的任务也越多。比起平均分配来说可以提高总体的计算和减少同步时间。
  
 使用.net Remtoing并行计算(图二)

  四.程序结构
  此程序主要由以下几个包组成,
  
 使用.net Remtoing并行计算(图三)

  ● 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产生和调用),并不断从任务池中取得任务进行计算。
  
  以下为这几个对象的序列图:
  
 使用.net Remtoing并行计算(图四)

  当远程对象的CalculatePiDigits被客户端程序调用时,此要求即被发送到远程机器的ServerLoader对象。然后服务器上的对象就会计算结果。最后将计算的结果返回给客户端程序,显示在文本框中。
  
  五.结果分析
  机器配置说明
  
  MOORE    700MHz    AMD Duron 192M SDR
  
  LOZIT     1.8GHz    Batumn    256M DDR
  
  时间比较
  
使用.net Remtoing并行计算(图五)

  由于算法的特性,计算到高位时可以看到计算速度逐渐变慢。在我们的机器上,算到第3000位四周速度已经是非常之慢,忍受不住终于中断,一共计算了3330位,共耗时719545 ms,即12分钟。在实验中还发现,节点只能与同一子网中其它节点相连才有效,要与子网外的节点相连,可能要涉及.net 中的更高级话题,就不太清楚了。
  
  六.后记:
  本文中的并行算法相对简单,没有涉及并行计算的高级算法及其它内容,如子任务间并没有传递数据。使用.net remoting是否适合作并行计算呢?当在科学计算领域中已经有现成的MPI,MVP等并行通讯库可用时?假如可以出现MPI for C#,那真是一大福音。(似乎俄罗斯的专家们已经实现了这个项目,叫做T-System[2])。假如有时间,希望会在以后我文章中继续研究用.net remoting进行并行计算。国外的一些研究组似乎已经有不少开始这方面的研究,希望有爱好的朋友和本人联系,一同探讨。
上一篇:多态与面向对象(一) 人气:563
下一篇:也谈面向对象 人气:418
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 HDWiki v4.0.1 bulid 081007 UTF
2008-10-7 迅易评选投票管理系统 v10.0
2008-10-7 HDWiki v4.0.1 bulid 081007 GBK
2008-10-7 Bitrac单用户博客 v1.14 bulid 0
2008-10-7 OpenX(广告管理系统) v2.6.2 多国
2008-10-7 乐铺网店系统免费普及版 v3.41
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成