我们说我有3个等级。
等级0从等级1收到1 MPI_INT
,从等级2收到10 MPI_INT
:
MPI_Recv(buf1, 1, MPI_INT,
1, 0, MPI_COMM_WORLD, &status);
MPI_Recv(buf2, 10, MPI_INT,
2, 0, MPI_COMM_WORLD, &status);
等级1和等级2分别将1和10 MPI_INT
发送到等级0。 MPI_Recv是阻塞调用。让我们说来自等级2的10 MPI_INIT
在等级1的1 MPI_INT
之前到达。此时,排名0阻止等待来自等级1的数据。
在这种情况下,第一个MPI_Recv
可以返回吗?排名2的数据首先到达,但数据不适合buf1,可能包含一个整数。
然后来自等级1的消息到来。 MPI是否能够选择此消息并让第一个MPI_Recv
返回?
答案 0 :(得分:0)
由于您在调用Timer timer = new Timer(300, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String line;
for (int i = 0; i < process.length; i++) {
BufferedReader buffer=new BufferedReader(new InputStreamReader(process[i].getInputStream()));
try {
if ((line = buffer.readLine()) != null) {
logTextArea[i].append(line + "\n");
} else {
((Timer) e.getSource()).stop();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
try {
for ( int count = 0 ; count < destList.getModel().getSize(); count++){
String projectPath = findDir(new File(codebasePath), destList.getModel().getElementAt(count).toString());
process[count] = Runtime.getRuntime().exec(System.getenv("M2_HOME")+"//bin//mvn.bat clean install -DskipTests -f "+projectPath + "\\pom.xml");
logTextArea[count] = new JTextArea(25, 60);
logFrame[count] = new JFrame("Show Log");
logFrame[count].add(new JScrollPane(logTextArea[count]), BorderLayout.CENTER);
logFrame[count].setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
logFrame[count].pack();
logFrame[count].setLocationByPlatform(true);
logFrame[count].setVisible(true);
timer.start();
process[count].waitFor()
}
} catch (IOException e) {
e.printStackTrace();
}
时指定了一个源,因此您没有时间担心消息的顺序。当从排名MPI_Recv()
收到1 MPI_Recv()
时,第一个MPI_INT
将返回,而当从排名{{1}收到10 1
时,第二个MPI_Recv()
将返回}}
如果你有MPI_INT
,那将是另一回事。
如果您仍然需要说服自己,请随意编写一个带有2
的简单程序。