从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件。目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载。服务器硬件基本上都是多核处理器,所以,如果能在Java语言中使用并行编程技术,使用OpenMP,可能 会提高服务器软件的性能。
今天,测试了一下,Java语言中也可以使用OpenMP。以下是详细测试过程:
1. 下载jomp1.0b.jar
https://www2.epcc.ed.ac.uk/computing/research_activities/jomp/download/jomp1.0b.jar
2. 将jomp1.0b.jar部署到JDK的lib下,然后追加到CLASSPATH。。
也可以不追加到系统变量,而是直接解压后当作应用类使用。
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:
javac 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++语言中的结果。是否真的在多核上运行,需要对比一下运行时间才能知道。
参考网页:
https://www2.epcc.ed.ac.uk/computing/research_activities/jomp/download.html