Win7下搭建JAVA并行开发环境MPJExpress

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1Win7下搭建JAVA并行开发环境MPJExpress目录Win7下搭建JAVA并行开发环境MPJExpress(PART1)..........................................2Win7下搭建JAVA并行开发环境MPJExpress(PART2)........................................10Win7下搭建JAVA并行开发环境MPJExpress(PART3)........................................222Win7下搭建JAVA并行开发环境MPJExpress(PART1)在Winindows7中快速搭建JAVA并行开发环境MPJExpress及其中可能遇到的各种问题解析(PART1)MPJExpress是一个线程安全的Java版本的并行消息传递库,它提供了mpiJava1.2API规范的完整实现。MPJExpress实现了MPJ库中的两种通信设备,第一种叫niodev,基于JavaNIO包。第二种叫mxdev,基于MyrineteXpress库。基于这个消息库,用户即可使用JAVA作为编程语言来开发并行程序。特别是随着高性能平台的普及,面对大数据挖掘或处理任务,抑或是并行计算或编程任务,MPJExpress势必会有更加重要而广泛的应用。当然,由于MPJExpress目前仍然不是非常稳定,其最新版本为Version0.43(更新日期为July18.2014),因此使用中仍然会遇到这样或那样的问题,本文将带领大家一同搭建基于MPJExpress的并行开发环境,并针对其中可能出现的一些问题进行详细分析。系统基本要求:1)Windows7;2)JAVA(包含JRE和JDK);3)Eclipse首先,下载MPJExpress压缩包。网址点选上图中红色框中的部分进入下载页面,如下图所示。4同样,选择上图中红色框中的部分开始下载,下载结束后解压缩并待用,如下图。5接下来设置环境变量。在桌面上右键单击“我的电脑(或计算机)”,在右键菜单中选择“属性”,进入下图所示的界面,然后选择“高级系统设置”(红色方框中的部分)进入“系统属性”对话框,选择“高级”选项卡,再选择“环境变量”(红色方框中的部分)。6接下来的步骤非常重要,后续的很多问题都跟这一步有关。假设我们把解压后的文件存于路径“D:\mpj-v0_43”下,那么在环境变量对话框中新建系统变量MPJ_HOME,变量值为D:\mpj-v0_43。然后增加Path搜索路径,在系统变量中选择PATH,在单击“编辑”按钮,在变量值部分追加(如下图所示)%MPJ_HOME%\bin;7然后我们测试一下环境配置是否成功。在“开始”菜单中选择“运行”,然后在弹出的“运行”对话中中输入cmd,并单击“确定”,如下图所示。在控制台提示符后面输入mpjrun,如果一切正常则得到如下所示之结果。8继续测试,输入类似下面的指令,得到如下图所示之结果,则一切正常。9如果上图操作中有异常被抛出,可不用理会。但如果出现其他状况,则直接跳转到(本系列文章的)PART3部分,笔者在PART3部分整理了一些常见问题的处理方法。未完,待续...10Win7下搭建JAVA并行开发环境MPJExpress(PART2)在上一节中,我们已经成功在Windows中搭建了基于MPJExpress的并行开发环境,本部分我们将在Eclipse中编写一个简单的程序来试用一下刚刚搭建的环境。首先在Eclipse中创建一个Project,如下图所示。输入项目名称MyMPJExpress或者mpjExpress(可以任取),然后单击“Finish”按钮。11在已经创建好的项目中,新建一个Class,如下所示。12输入类的名称,例如Hellworld或者mpjHelloWorld(可以任取),然后单击“Finish”按钮。如下所示13接下来在编辑区,输入代码importjava.net.InetAddress;importmpi.*;publicclassmpjHelloWorld{publicstaticvoidmain(String[]args)throwsException{String[]tmps=MPI.Init(args);intme=MPI.COMM_WORLD.Rank();14intsize=MPI.COMM_WORLD.Size();InetAddressstrIP=InetAddress.getLocalHost();System.out.println(ThreadNo.:+me+,ip:+strIP);if(me==0){System.out.println(CountofArgs:+tmps.length);for(inti=0;itmps.length;i++)System.out.println(args[+i+]=+tmps[i]);}MPI.Finalize();}}输入上述代码后,读者会发现编译器提示一些错误,下面我们来解决这些问题。首先,要加入mpj.jar。mpj.jar位于MPJExpress的安装目录下的lib目录下。为此,首先右键单击正在编辑的项目“mpjExpress”,如下图所示,在右键菜单中选择“Properties”1516在弹出的属性对话框中,如下图所示,从左侧的列表中选择“JavaBuildPath”,然后在右侧的选项卡中选择“Libraries”。单击上图中右侧的“AddExternalJAR”按钮,然后选择mpj.jar文件所在的目录,即MPJExpress的安装目录下的lib子目录下,如下所示。注意,在我们的例子中,MPJExpress的安装目录为D:\mpj-v0_43\lib17可以看到成功引入mpj.jar后,原本的错误已经消失,如下所示。18但是配置还没有完全结束。此时,我们在菜单栏中选择“Run”,然后在下拉菜单中选择“RunConfigurations”,如下所示19如下图所示,首先从左侧的列表中选择我们正在编辑的项目(例如mpjHelloWorld),然后在VMarguments中加入如下一些参数(这些参数的意义我们后面还会有详细的解释)-jarD:/mpj-v0_43/lib/starter.jar-np4然后在Programargumesnts中随机输入几个用来做测试的参数,例如:Arg1Arg2Arg3。配置完成后,单击“Apply”按钮。20运行程序,则程序的输出如下:MPJExpress(0.43)isstartedinthemulticoreconfigurationThreadNo.:0,ip:L138IJHZPX9FLFM/192.168.1.103CountofArgs:3args[0]=Arg1args[1]=Arg2args[2]=Arg3ThreadNo.:1,ip:L138IJHZPX9FLFM/192.168.1.103ThreadNo.:3,ip:L138IJHZPX9FLFM/192.168.1.103ThreadNo.:2,ip:L138IJHZPX9FLFM/192.168.1.10321由于MPJExpress并不是十分稳定,因此在配置过程中很容易出现这样或那样的问题。在PART3中,我们将对一些可能出现的问题进行解析,并讨论上述参数的具体意义。未完,待续...22Win7下搭建JAVA并行开发环境MPJExpress(PART3)在前面的两个PART中,我们分别搭建了并行开发环境,并小试牛刀实践了简单的并行开发。当然在这个过程中,出现这样或那样的问题是在所难免的,这一部分我们就来讨论一下其中可能会遇到的问题。问题1:当我们搭建好开发环境后,我们需要试用一下mpjdaemon批处理命令,此时可能遇到的一个问题是:Portisnotavailable,如下图所示。23问题在于端口不可用。我们根据提示找到配置文件mpjexpress.conf所在的文件夹,然后用记事本把它打开,如下所示。可见,默认情况下port.1=10000,port.2=10001。此时,我们只需对端口进行调整,例如修改为下面这种结果(当然,应该保证8888和8889并没有被占用)24修改完成后保存文件,问题即得到解决。问题2:注意到我们把解压后的MPJExpress文件存于路径“D:\mpj-v0_43”下,并相应的将环境变量MPJ_HOME赋值为D:\mpj-v0_43。如果我们将文件存于路径“D:\ProgramFiles\mpj-v0_43”下,并相应的修改环境变量赋值,将会有什么变化?25这似乎是一个看起来完全不是问题的问题,但是一旦我们这样做了,当再使用mpjdaemon批处理命令时,就会遇到下面这种情况。结果显示报错了!26Error:UnabletoaccessjarfileD:\Program系统没有办法访问相应的jar文件。但是为什么?这是因为ProgramFiles这个文件夹的名字不合法。这种文件夹的名字在Windows中当然没有任何问题,对于我们日常的大多数应用开发而言这也不会成为一个问题。但是在MPJExpress中,文件夹的名字中间是不能包含有“空格”的。我们都知道,在控制台中输入一条指令时,空格通常是用来间隔操作符与操作数的,或者可以认为空格也是有意义的,因此MPJExpress中的批处理命令在解析一个带有空格的路径名的时候就会产生混乱。这就是问题所在。所以只要我们把MPJExpress文件的存放路径稍作调整即可消除此类问题。此外,在命令行中查看当前环境变量设置情况的一个简单方法是使用echo指令,例如问题3:上一个问题除了会发生在控制台操作界面上以外,在Eclipse中也会出现。回想在PART2中,我们设置VMarguments参数时是这样写的27-jarD:/mpj-v0_43/lib/starter.jar-np4可见我们使用了一个绝对路径!而更多的时候我们都习惯于写相对路径,此时用户需要在菜单栏中选择Window,然后在下拉菜单中选择Preferences,如下所示。然后在从左侧的列表中选择“StringSubstitution”,并新建一个“变量替换”,如下所示。28完成上述步骤后,我们就可以使用形如下面这种情况的相对路径了。-jar${MPJ_HOME}/lib/starter.jar29这里我们需要注意,MPJ_HOME的值仍然不能等于一个有空格的路径,否则就会出现下面这个错误,原理与问题2相同,这里不再赘述。30问题4:最后我们讨论一下在命令下编译运行并行程序的方法。首先编辑下列代码并将其存入一个名为HelloWorld.java的文件中。importmpi.*;publicclassHelloWorld{publicstaticvoidmain(String[]args)throwsException{MPI.Init(args);intme=MPI.COMM_WORLD.Rank();intsize=MPI.COMM_WORLD.Size();System.out.println(Hifrom+me+of+size+\n);MPI.Finalize();}}编译指令示例:javac-cp.;%MPJ_HOME%/lib/mpj.jarHelloWorld.java31执行指令示例:mpjrun.bat-np4HelloWorlda//其中a是一个任意指定的参数执行结果,如下所示。上面这种情况是执行并行计算的第一种场景,即在多核配置下执行MPJExpress程序。我们通过mpjrun.bat-np后面的数字来指定核的数量。另外一种场景是在集群(Cluster)配置下执行MPJExpress程序。集群配置:如果开发人员期望在分布式内存平台(包括集群和计算机网络)上执行并行JAVA程序,那么他们就会采样这种配置场景。对于这种集

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功