2014-10-30 27 views
0

我試圖使用MPI的java實現,名爲MPJ-Express,並遇到了一個錯誤,我無法讀取從中運行我的節點上的控制檯輸入應用。爲了演示這個問題,我做了以下簡單的程序。無法使用MPJ Express(MPI)獲取控制檯輸入

public class TestConsole { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); 
     String aLine = ""; 

     if (MPI.COMM_WORLD.Rank() == 0) 
     { 
      while(!aLine.equals("exit")) 
      { 
       System.out.println("please enter data: "); 
       try { 
        aLine = bufferRead.readLine(); 
     System.out.println(aLine); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 

} 

如果我運行mpjrun該應用程序,我帶有提示「請輸入數據:」不管我是什麼類型,我無法得到任何內容echod回來。當我使用普通的舊java -jar blah運行應用程序時,應用程序工作正常(當然剝離了mpi的東西之後)。

我使用的是3臺運行Ubuntu的虛擬機。從我讀過的內容來看,MPJ應該接受0級節點上的控制檯輸入,所以我不確定我做錯了什麼。

回答

0

就在昨天有非常類似的問題:https://stackoverflow.com/a/26640877/491687

你不應該依賴於MPI程序中使用stdin。轉發輸入所需的機制有點不可靠,非常棘手。在MPI程序中獲取輸入的常用方法是從文件中讀取它。這更可靠,因爲文件可以很容易地在所有流程中使用。