並行集群正重塑超級計算版圖,但主流方案基於 C/C++ 的 MPI/PVM,並行編程門檻極高。本文介紹一種基於 Java 線程與 RMI 的偽遠程線程模型,讓每位 Java 程序員都能構建自己的超級計算機。
超級計算機定義:由 8+ 節點組成、作為單一高性能機器工作的集群。
核心組件:
JobCodeInt 接口及 jobCode() 方法,封裝遠程執行邏輯。本地資源需在構造函數中初始化。JobCodeInt 實例並在本地執行,返回 Object 結果。waitForResult() 等待完成。getResult() 獲取結果(未完成返回 Boolean.FALSE),聚合最終結果。運行服務器啟動時註冊 RMI,通知調度器就緒。
任務:計算 1 到 109 所有整數平方根之和。分解為兩個子任務(1~3×108 和 3×108+1~109),分別在 333MHz Pentium II (Win98) 和 500MHz Pentium III (Win2K) 上並行執行。
public class Sqrt implements JobCodeInt {
double dblStart, dblEnd, dblPartialSum;
public Sqrt(double start, double end) { dblStart=start; dblEnd=end; }
public Object jobCode() {
dblPartialSum = 0;
for(double i=dblStart; i<=dblEnd; i++) dblPartialSum += Math.sqrt(i);
return new Double(dblPartialSum);
}
}
調度器創建兩個 PseudoRemThr,指定遠程主機 IP:端口,聚合結果。
任務量越大,並行優勢越明顯(通信開銷佔比下降)。結論:偽遠程線程適合計算密集型大任務。