從去年年中,開始學習Java,主要是維護公司用Java編寫的伺服器軟體。目前,該伺服器軟體遇到一個問題,在下載大檔案時,如果同時下載的使用者很多,伺服器軟體工作會出現異常,有的使用者無法下載。伺服器硬體基本上都是多核處理器,所以,如果能在Java語言中使用並行編程技術,使用OpenMP,可能會提高伺服器軟體的效能。
今天,測試了一下,Java語言中也可以使用OpenMP。以下是詳細測試過程:
1. 下載jomp1.0b.jar
http://www2.epcc.ed.ac.uk/computing/research_activities/jomp/index_1.html
2. 將jomp1.0b.jar部署到JDK的lib下,然後追加到CLASSPATH。我用的JDK版本為1.6.0_19(最新JDK為1.6.0_20)。
也可以不追加到系統變數,而是直接解壓後當作應用類使用。
3. 編寫測試代碼TestJavaOpenMP.jomp。副檔名必須為jomp。
import java.util.*;
public class TestJavaOpenMP
{
public static void main(String[] agrs)
{
int i;
//omp parallel for
for(i = 0; i < 20; i++)
{
System.out.println("i = " + i);
}
}
}
4. 由jomp 產生java檔案:
java jomp.compiler.Jomp TestJavaOpenMP。(這裡不帶jomp副檔名)
產生TestJavaOpenMP.java檔案。
5. 編譯TestJavaOpenMP.java:
java TestJavaOpenMP.java. 產生TestJavaOpenMP.class檔案
6. 運行:
java -Djomp.threads=2 TestJavaOpenMP
一個運行結果:
i = 0
i = 10
i = 1
i = 2
i = 11
i = 12
i = 3
i = 13
i = 14
i = 4
i = 15
i = 5
i = 16
i = 6
i = 17
i = 7
i = 18
i = 8
i = 9
i = 19
java -Djomp.threads=4 TestJavaOpenMP
一個運行結果:
i = 15
i = 0
i = 10
i = 5
i = 11
i = 1
i = 16
i = 2
i = 12
i = 6
i = 13
i = 14
i = 3
i = 17
i = 18
i = 19
i = 4
i = 7
i = 8
i = 9
可以看到,該運行結果類似C/C++語言中的結果。是否真的在多核上運行,需要對比一下已耗用時間才能知道。
參考網頁:
http://www.hipecc.wichita.edu/jomp.html
http://www2.epcc.ed.ac.uk/computing/research_activities/jomp/index_1.html