簡體   English   中英

Java運行並行程序

[英]Java running parallel programs

我有一個要求,我不確定是否可以通過使用線程來實現。 我有兩個預定義的100 * 100矩陣,我想執行它們的乘法運算。 我想要的是,不是簡單的乘法,但我想把它分成三個獨立的程序,第一個程序將執行前33行的乘法,第二個程序將執行從33到64的乘法,第三個將乘以64到100的乘法現在我想並行運行這些程序並收集它們的結果(即行的乘法),然后將這三個不同的結果連接成一個矩陣。 現在,我已經開發了三個這樣的程序或類,但我無法找到任何方法來並行運行它們。 在線程中,我讀到我們無法確定哪個線程將首先執行,哪個線程將在稍后執行。

任何人都可以告訴我任何技術,我可以用於我的問題?

我會非常感謝你們。

Java內置了這種東西。 該文檔是http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html

創建每個對象,將其拋出到線程池,然后運行它們。

ExecutorService service = Executors.newFixedThreadPool(3);
service.submit(matrixMult1);
service.submit(matrixMult2); // the objects that do the work
service.submit(matrixMult3);

service.shutdown();
service.awaitTermination(1, TimeUnit.HOURS);

這是基本概要。

對於這種情況,我會使用已經存在的庫,例如EJML( http://code.google.com/p/efficient-java-matrix-library/ )或la4j( http://la4j.org )。 在所有可能的情況下,圖書館將更快地產生結果。 你也可以轉向更適合數學的不同語言,但我認為這不屬於這個問題的范圍。 如果你堅持使用線程,因為它們都是並行運行的,那么首先完成的任何事情都沒有任何意義,你只需要確保它們全部完成然后重新組裝。

希望有所幫助

是我在大學里用於大多數並行java項目的並行java庫

它由我的並行編程教授艾倫·卡明斯基Alan Kaminsky )撰寫,他很棒(一些學生也為此做出了貢獻)。

在下載頁面上需要注意的重要事項:用法部分,文檔部分和系統要求(特別是關於java 5如何比java 6或7更好地執行的部分)。

一個好的起點可能是edu.rit.pj.test.Test13 ,它執行矩陣運算。

對此實現非常重要的一個類是edu.rit.pj.Comm ,它負責線程之間的大多數數據傳遞。 請務必閱讀本課程的文檔,特別注意broadcast()gather() ,這應該是您首次將矩陣分發到節點的方式,然后最終收集並合並結果。

我知道,要吸收很多東西。 我稍后會嘗試寫一個例子。

我不相信100乘100是非常大的並且當並行完成時你不會看到大幅加速,這將是預優化的典型例子,特別是如果你的操作系統很忙。

那你為什么要重新發明輪子呢?
jblas http://mikiobraun.github.io/jblas/被認為是java最快的BLAS庫。
如果您不發布代碼,我們怎么能告訴您代碼有什么問題?

但無論如何,我會向您推薦一個完成任務的答案,這些任務依賴於使用java並發 api的其他任務的輸出: 在Java中並行執行依賴任務
請檢查出來。
這將為您提供另一個以您描述的方式解決此問題的示例,但我認為該方法比使用jblas慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM