<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              【并行開發】mpjdaemon批處理命令中的問題分析

              來源:CSDN 時間:2023-01-12 10:23:21

              在前面的兩個PART中,我們分別搭建了并行開發環境,并小試牛刀實踐了簡單的并行開發。

              當然在這個過程中,出現這樣或那樣的問題是在所難免的,這一部分我們就來討論一下其中可能會遇到的問題。

              問題1:當我們搭建好開發環境后,我們需要試用一下mpjdaemon批處理命令,此時可能遇到的一個問題是: Port is not available,如下圖所示。


              (資料圖片僅供參考)

              問題在于端口不可用。我們根據提示找到配置文件mpjexpress.conf所在的文件夾,然后用記事本把它打開,如下所示??梢?,默認情況下port.1=10000,port.2=10001。

              此時,我們只需對端口進行調整,例如修改為下面這種結果(當然,應該保證8888和8889并沒有被占用)

              修改完成后保存文件,問題即得到解決。

              問題2:注意到我們把解壓后的MPJ Express文件存于路徑“D:\mpj-v0_43”下,并相應的將環境變量MPJ_HOME賦值為D:\mpj-v0_43。如果我們將文件存于路徑“D:\Program Files\mpj-v0_43”下,并相應的修改環境變量賦值,將會有什么變化?

              這似乎是一個看起來完全不是問題的問題,但是一旦我們這樣做了,當再使用mpjdaemon批處理命令時,就會遇到下面這種情況。

              結果顯示報錯了!

              Error: Unable to access jarfile D:\Program

              系統沒有辦法訪問相應的jar文件。但是為什么?這是因為Program Files這個文件夾的名字不合法。這種文件夾的名字在Windows中當然沒有任何問題,對于我們日常的大多數應用開發而言這也不會成為一個問題。但是在MPJ Express中,文件夾的名字中間是不能包含有“空格”的。我們都知道,在控制臺中輸入一條指令時,空格通常是用來間隔操作符與操作數的,或者可以認為空格也是有意義的,因此MPJ Express中的批處理命令在解析一個帶有空格的路徑名的時候就會產生混亂。這就是問題所在。所以只要我們把MPJ Express文件的存放路徑稍作調整即可消除此類問題。

              此外,在命令行中查看當前環境變量設置情況的一個簡單方法是使用echo指令,例如

              問題3:上一個問題除了會發生在控制臺操作界面上以外,在Eclipse中也會出現?;叵朐赑ART2中,我們設置VM arguments參數時是這樣寫的

              -jar D:/mpj-v0_43/lib/starter.jar

              -np 4

              可見我們使用了一個絕對路徑!而更多的時候我們都習慣于寫相對路徑,此時用戶需要在菜單欄中選擇"Window",然后在下拉菜單中選擇"Preferences",如下所示。

              然后在從左側的列表中選擇“String Substitution”,并新建一個“變量替換”,如下所示。

              完成上述步驟后,我們就可以使用形如下面這種情況的相對路徑了。

              -jar ${MPJ_HOME}/lib/starter.jar

              這里我們需要注意,MPJ_HOME的值仍然不能等于一個有空格的路徑,否則就會出現下面這個錯誤,原理與問題2相同,這里不再贅述。

              問題4:最后我們討論一下在命令下編譯運行并行程序的方法。

              首先編輯下列代碼并將其存入一個名為HelloWorld.java的文件中。

              import mpi.*;

              public class HelloWorld{

              public static void main(String[] args)  throws Exception

              {

              MPI.Init(args);

              int me = MPI.COMM_WORLD.Rank();

              int size = MPI.COMM_WORLD.Size();

              System.out.println            ("Hi from " + me + " of " + size + "\n");

              MPI.Finalize();

              }

              }

              編譯指令示例: javac -cp .;%MPJ_HOME%/lib/mpj.jar HelloWorld.java

              執行指令示例: mpjrun.bat -np 4 HelloWorld  a //其中a是一個任意指定的參數

              執行結果,如下所示。

              上面這種情況是執行并行計算的第一種場景,即在多核配置下執行MPJ Express 程序。

              我們通過mpjrun.bat -np 后面的數字來指定核的數量。

              另外一種場景是在集群(Cluster)配置下執行MPJ Express 程序。

              集群配置: 如果開發人員期望在分布式內存平臺(包括集群和計算機網絡)上執行并行JAVA程序,那么他們就會采樣這種配置場景。

              對于這種集群配置,一共有四種選項,如下:

              1) niodev - 使用 Java NIO Sockets

              2) mxdev - 使用 Myrinet eXpress (MX) library for Myrinet networks

              3) hybdev - 針對多核處理的集群

              4) native - 使用一個 native MPI library (curretly only tested under MS-MPI for Windows)

              具體使用時寫一個名為"machines"的文件,并在其中指定用于并發執行的所有主機名或IP地址。

              執行方法

              對于 niodev, hybdev and mxdev

              1) 開啟守護: mpjdaemon.bat -boot

              - 你將需要在每一個開啟守護的機器上手動地執行該命令。

              2) 執行指令示例: mpjrun.bat -np 4 -dev niodev HelloWorld

              -- 其中 -dev 里面的 device可以是 niodev, hybdev 或 mxdev

              3) 終止守護指令: mpjdaemon.bat -halt

              對于 native

              1) 編譯 JNI wrapper library(具體編譯方法請參見MPJ Express的相關幫助文檔)

              2) 執行指令示例: mpjrun.bat -np 4 -dev native HelloWorld

              全文完。

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩