我正在使用MPJ Express进行项目。我在这里读到:http://www.researchgate.net/profile/Bryan_Carpenter/publication/221302919_Multicore-enabling_the_MPJ_express_messaging_library/links/02bfe510be4ddbd5d0000000
对于这样的代码段:
import mpi.MPI;
public class NumberOfProcesses {
static int sharedVar = 0;
public static void main(String[] args) throws Exception{
MPI.Init(args);
int rank = MPI.COMM_WORLD.Rank();
sharedVar++;
System.out.println("Proc <"+rank+">: sharedVar = <"+sharedVar+">");
MPI.Finalize();
}
}
If we execute the code in the cluster configuration, we observe
the following output:
Proc <0>: sharedVar = <1>
Proc <1>: sharedVar = <1>
This is the correct and desired output. Here the HelloBug class
is executed by two MPJ processes in a SPMD fashion. Both of these
processes execute in a separate JVM and thus do not share the static
variable sharedVar—for this reason both processes increment the
variable first and print 1. This execution model is also depicted in
the Figure 10a.
On the other hand, when the code is executed in the multicore
configuration, the following output is observed:
Proc <0>: sharedVar = <1>
Proc <1>: sharedVar = <2>
我找不到任何在多核配置中运行程序的方法。虽然它似乎是在多核配置中运行的,但它总是在输出时给我这样的结果:
MPJ Express (0.43) is started in the multicore configuration
Proc <2>: sharedVar = <1>
Proc <1>: sharedVar = <1>
Proc <3>: sharedVar = <1>
Proc <0>: sharedVar = <1>
如何使这段代码在输出 sth 上给出如下:MPJ Express (0.43( 在多核配置中启动
Proc <2>: sharedVar = <1>
Proc <1>: sharedVar = <2>
Proc <3>: sharedVar = <3>
Proc <0>: sharedVar = <4>
?
您在两种情况下(即集群模式和多核模式(提供的输出都是正确的。MPJ Express 遵循 mpiJava 标准,即使通信进程在同一台物理机器上,该标准也使用消息传递来强制通信。因此,在 MPJ Express 多核配置中,进程将使用共享内存机制进行消息传递,并且进程之间不能共享任何内容。假设 x 个 (np=x( 的 java 进程在同一节点上启动,并且这些进程不能共享彼此的变量(静态或非静态(。如果你想在这些java进程中共享一些变量或数据,那么唯一的选择是使用消息传递进行通信。
多核配置和共享内存是彼此的同义词,现实是,在多核配置中,进程之间的通信是通过共享内存完成的,而不是为了更好的带宽而使用网络接口卡(NIC(。