• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        運用.net Remtoing進行并行計算

        運用.net Remtoing進行并行計算

        更新時間:2019-09-02 文章作者:未知 信息來源:網絡 閱讀次數:

        使用.net Remtoing并行計算
        摘要,本文分析了一個使用.net romoting進行并行計算PI值的程序,

        并給出結果及性能分析。



        在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機群進行并行計算,所以采用了最簡單的主從式并行模型,即由一個主進程負責任務的分發,結果的歸約,將子任務平均分配到每個節點上計算。

        但實際上本文中使用的并不是平均分配任務,而是更好的任務池工作方式。即每個節點計算完一個子任務后,會向主進程申請新的任務,一直到任務全部計算完為止,這樣的好處是計算能力越強的節點計算的任務也越多。比起平均分配來說可以提高總體的計算和減少同步時間。






        四. 程序結構

        此程序主要由以下幾個包組成,


        l 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>





        l 4.2) Plouffe_bellard

        這就是.NET Remoting中的實際被調用的遠程對象,它被置于每個節點上。它是繼承自System.MarshalByRefObject,這樣的派生對象從來都不會離開它的應用域,客戶就可以通過代理對象調用遠程對象的方法。

        它是用來計算圓周率PI的小數點位數的程序,Plouffe_Bellard算法具有很好的并行性,它可以指定要計算的小數點的位置,如第二節所述。

        其函數形式為:



        public class Plouffe_Bellard : System.MarshalByRefObject

        {

        public String CalculatePiDigits(int n)

        { … }

        }



        l 4.3)DigitsOfPi

        此子基礎上為整個項目核心部分,可作為客戶端程序運行。它主要實現主界面UI處理、節點配置,多線程創建與同步,計算任務分配與匯總的功能,只需要在任何一臺節點上運行即可。包括以下幾個對象:

        MainForm,SolutionArray,SolutionItem,RemotingObject,CalculationThread。

        n mainForm:即處理UI對象

        n SolutionArray是并行線程分配與管理程序,如:任務池創建、任務分配、線程創建、同步線程, 匯聚結果等。

        n SolutionItem即任務的數據結構。包括要計算的小數點位, 計算的結果, 計算的在機器。

        n RemotingObject是RemotePiCalculator,用于獲取遠程對象。

        n CalculationThread:計算模塊,在線程中運算(由SolutionArray產生和調用),并不斷從任務池中取得任務進行計算。



        以下為這幾個對象的序列圖:








        當遠程對象的CalculatePiDigits被客戶端程序調用時,此要求即被發送到遠程機器的ServerLoader對象。然后服務器上的對象就會計算結果。最后將計算的結果返回給客戶端程序,顯示在文本框中。



        五. 結果分析

        機器配置說明

        MOORE 700MHz AMD Duron 192M SDR

        LOZIT 1.8GHz Batumn 256M DDR

        時間比較




        由于算法的特性,計算到高位時可以看到計算速度逐漸變慢。在我們的機器上,算到第3000位附近速度已經是非常之慢,忍受不住終于中斷,一共計算了3330位,共耗時719545 ms,即12分鐘。在實驗中還發現,節點只能與同一子網中其它節點相連才有效,要與子網外的節點相連,可能要涉及.net 中的更高級話題,就不太清楚了。



        六. 后記:

        本文中的并行算法相對簡單,沒有涉及并行計算的高級算法及其它內容,如子任務間并沒有傳遞數據。使用.net remoting是否適合作并行計算呢?當在科學計算領域中已經有現成的MPI,MVP等并行通訊庫可用時?如果可以出現MPI for C#,那真是一大福音。(好像俄羅斯的專家們已經實現了這個項目,叫做T-System[2])。如果有時間,希望會在以后我文章中繼承研究用.net remoting進行并行計算。國外的一些研究組好像已經有不少開始這方面的研究,希望有興趣的朋友和本人聯系,一同探討。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 一级毛片a女人刺激视频免费| 精品无码无人网站免费视频| 黄色免费在线观看网址| a级片免费观看视频| 黄在线观看www免费看| 亚洲 另类 无码 在线| 亚洲国产女人aaa毛片在线| 亚洲爆乳AAA无码专区| 日本在线看片免费人成视频1000| 成年丰满熟妇午夜免费视频| 久久精品国产亚洲AV麻豆王友容| 亚洲AV日韩AV无码污污网站| 5g影院5g天天爽永久免费影院| 久久精品国产精品亚洲| 国产婷婷综合丁香亚洲欧洲| 国产一区二区三区免费观看在线 | 亚洲精品少妇30p| 亚洲熟女乱色一区二区三区| 大地资源网高清在线观看免费| 亚洲精品成人片在线播放| 久久大香伊焦在人线免费| 亚洲精品一级无码中文字幕| 亚洲精品色播一区二区| 四虎影永久在线高清免费| 亚洲视频无码高清在线| 中文字幕亚洲免费无线观看日本| 久久亚洲中文字幕精品有坂深雪 | 免费看又黄又无码的网站| 亚洲区视频在线观看| 无码AV片在线观看免费| 亚洲中文字幕无码中文字在线| 色噜噜狠狠色综合免费视频| 国产亚洲AV手机在线观看| 99re6在线精品视频免费播放| 亚洲人成7777影视在线观看| www.亚洲精品| 成人免费观看一区二区| 日产久久强奸免费的看| 亚洲国产成人久久笫一页| 国产亚洲福利一区二区免费看| 嫩草视频在线免费观看|