我正在尝试使用名为MPJ-Express的MPI的java实现,并遇到了一个错误,我无法在运行应用程序的节点上读取控制台输入。为了证明这个问题,我做了以下简单的程序。
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运行该应用程序,我会看到提示“请输入数据:”,无论我输入什么内容,我都无法获得任何内容。当我使用普通的旧java -jar blah运行应用程序时,应用程序工作正常(当然,在剥离mpi之后)。
我正在使用3个运行ubuntu的虚拟机。根据我的阅读,MPJ应该接受0级节点上的控制台输入,所以我不确定我做错了什么。
答案 0 :(得分:0)
昨天有一个非常相似的问题:https://stackoverflow.com/a/26640877/491687
您不应该依赖在MPI程序中使用stdin
。转发输入所需的机制有些不可靠且非常棘手。在MPI程序中获取输入的常用方法是从文件中读取它。这更加可靠,因为可以在所有流程中轻松提供文件。