麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

構建自己的基于Java的超級計算機

2019-11-18 14:50:01
字體:
來源:轉載
供稿:網友

  假如您曾想過構建自己的超級計算機,但卻對用 C 語言進行并行編程望而生畏,那么偽遠程線程可以幫您解決這一問題。這種獲獎的 java 編程模型極大地簡化了集群上的并行編程,并使超級計算走出實驗室,使每一位 Java 程序員都能使用它。

  在過去的三年里,并行集群已在改變著超級計算的面貌。一旦價值數百萬美元的單體機占了主導,并行集群很快就會成為超級計算機的選擇??梢韵胂竦玫?,開放源碼圈內的高漲熱情已導致產生了數百 -- 假如不是數千的話 -- 并行集群項目。第一個同時也是最聞名的開放源碼集群系統是 Beowulf。在 NASA 贊助下,由 Thomas Sterling 和 Donald Becker 在 1994 年發布的 Beowulf,開始是作為一個 16 節點演示集群推出的。今天,Beowulf 已有數百種實現,從 Oak Ridge 國家實驗室的 Stone SouperComputer 到 aspen 系統公司的定制構建的商業性集群(請參閱參考資源)。

  對 Java 程序員不利的是,多數集群系統都是圍繞基于 C 語言的軟件消息傳遞 API — 如消息傳遞接口(MPI)或并行虛擬機(PVM)— 來實現的。用 C 語言進行并行編程不是件輕易的事,因此我設計了一個替代方案。本文將說明如何綜合運用 Java 線程和 Java 遠程方法調用(RMI)來創建自己的基于 Java 的超級計算機。

  請注重,本文假定您有 Java 線程和 RMI 的應用知識。

  超級計算機內有什么?

  超級計算機的定義是:由八個或更多的節點組成、作為單個高性能機器工作的集群?;?Java 的超級計算機包含一個作業調度器和任意數量的運行服務器(也稱為主機)。作業調度器生成多個線程,每個線程包含執行不同子任務的代碼。各個線程將其代碼遷移到不同的運行服務器上。然后,每個運行服務器執行遷移給它的代碼并將結果返回給作業調度器。最后,作業調度器將各個線程的結果組合起來。

  這種并行集群系統之所以被稱為偽遠程線程,是因為線程是在作業調度器上調度的,但線程內的代碼卻是在遠程計算機上執行的。

  該系統有哪些組件?

  組件一詞是指組成“偽遠程線程”并行集群系統的邏輯模塊。該系統包含以下組件:

  Job dispatcher(作業調度器) 是執行控制的機器。它生成不同的線程,每個線程都包含此集群要處理的主任務的一個子任務。每個線程內的代碼都被發送到一臺遠程計算機去執行。線程在作業調度器上調度,所以理論上講,該機器不應該用于執行任何子任務。

  SuBTask 是一個用戶定義類,該類定義主任務的一個數據或功能獨立的部分。您可以為主任務的不同部分定義不同的類。類名 SubTask 是一個示例。您可以為一個 SubTask 類取任何名字,不過這個名字應該能描述分配給它的子任務。在定義 SubTask 類時,您必須實現 JobCodeInt 接口以及 jobCode() 方法,下面對其進行說明。

  JobCodeInt 是一個 Java 接口。您必須在定義子任務的類中實現該接口和 jobCode() 方法。jobCode() 方法描述了將在遠程執行的代碼。假如您打算在遠程使用某個本地資源,您必須在 jobCode() 方法外部初始化這個資源。比方說,您要將一組圖像發送到遠程處理,就必須在 jobCode() 方法外部初始化 Image 對象。您可以在該方法中調用標準 Java 庫中的類,因為遠程計算機上存在這些庫。

  RunServer 是一個 Java 對象,該對象答應遠程過程調用其方法。它的一個方法以實現了 JobCodeInt 接口的對象作為參數。 RunServer 就在運行該對象的計算機(運行服務器)上執行該對象內的代碼,并將計算結果作為 Object 類的一個實例返回。Object 是 Java 類層次結構中最高一級的類。

  PseudoRemThr 是一個 Java 類,該類封裝了一個線程并接受給定 SubTask 類的一個實例。它選擇一臺遠程主機,并將 SubTask 實例發送到這臺主機上執行。假如您要利用某臺主機上可用的特定資源(諸如數據庫或是打印機),則可以指定主機。

  HostSelector 是一個模塊。假如您沒有指定遠程主機,PseudoRemThr 類就會調用 HostSelector 模塊來選擇特定的主機。假如沒有空閑的主機,HostSelector 會返回負載最小的遠程計算機。假如某個遠程計算機是一個多處理器系統,HostSelector 可能會不止一次地返回該主機名。目前,HostSelector 無法根據給定任務的復雜程度來選擇主機。

  偽遠程線程的工作方式

  要使用偽遠程線程,您必須實現作業調度器和運行服務器。本節將說明如何實現各個部分。

  實現作業調度器

  首先,將主任務分解為數據或功能獨立的子任務。針對每個子任務,定義一個實現 JobCodeInt 接口(從而實現 jobCode() 方法)的類。在 jobCode() 方法中,定義各給定子任務要執行的代碼。

  請注重,您不能調用作業調度器上用戶定義的的本地資源。請在該方法外部初始化所有這類資源。例如,您可以在 SubTask 類的構造函數中初始化這類資源。

  創建類 PseudoRemThr 的若干實例,并將 SubTask 的實例傳遞給 PseudoRemThr 的各個實例。假如您要明確指定一臺遠程主機,您可以通過調用 PseudoRemThr 對象的另一個構造函數來完成。

  等待這些線程完成。調用 getResult() 方法來獲取 PseudoRemThr 的各個實例的執行結果。假如計算沒有完成,結果返回一個值為 false 的 Boolean 對象;否則,將返回 Object 類的一個實例,其中包含了計算結果。您必須將此實例轉換為您所希望的類類型。將所有的子任務結果組合為最終結果。

  實現運行服務器

  實現運行服務器是一項簡單的工作:

  啟動 RMI 注冊程序。

  啟動 RunServer。

  運行服務器在啟動時接通作業調度器,并通知作業調度器它已預備就緒,可以接受要執行的任務了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蜜桃网站免费 | 国产1区2| 成人午夜视频免费看 | 在线看毛片的网站 | 在线播放中文 | 久草在线公开视频 | 国产一区免费观看 | 久久国产精品91 | av色哟哟 | 亚洲国产超高清a毛毛片 | 精品国产高清一区二区三区 | 九九色在线观看 | 一级黄色片武则天 | 黄色大片网站在线观看 | 久久新网址 | 视频在线色 | 毛片在线播放视频 | 久久av免费 | 在线成人免费观看www | 国产一区二区三区四区五区加勒比 | 国产成人精品午夜视频' | 全黄性色大片 | 91在线观看| 香蕉在线看 | 成人羞羞在线观看网站 | 性欧美极品xxxx欧美一区二区 | 日本在线播放一区二区三区 | 国产精品午夜未成人免费观看 | 99国产精品自拍 | 欧美日韩在线视频一区 | 国产精品视频一区二区三区四 | 国内精品一级毛片免费看 | 色悠悠久久久久 | 中文在线观看www | 中文字幕一二三区芒果 | 成人精品aaaa网站 | 深夜福利久久久 | 亚洲日韩中文字幕一区 | 国产免费视频在线 | 国产91小视频在线观看 | 91真视频 |