gpt4 book ai didi

java - 使用 MPJ express 寄送元素

转载 作者:行者123 更新时间:2023-11-29 08:01:26 26 4
gpt4 key购买 nike

我是并行编程的新手,我想用 Java 来实现。我想知道是否可以通过 MPI 发送和接收更复杂的对象。我正在使用 MPJ express 。但是,每当我想发送一个对象时,我都会收到 ClassCastException。

MPI.Init(args);
myrank = MPI.COMM_WORLD.Rank();
numprocs = MPI.COMM_WORLD.Size();
Vector<CustomClass> chr = new Vector<CustomClass>();
if (myrank == 0 ) { //am I the master?
for (int i = 1; i < numprocs; i++) {
MPI.COMM_WORLD.Send(chr, 0, chr.size(), MPI.OBJECT, i, 99); //Here's where the
exception occurs
}
}
else {
Vector<BasicRegion> chr_received = new Vector<BasicRegion>();
MPI.COMM_WORLD.Recv(chr_received, 0, 1, MPI.OBJECT, 0, 99 );
}

异常(exception):

mpi.MPIException: mpi.MPIException: java.lang.ClassCastException: java.util.Vector 无法转换为 [Ljava.lang.Object;

所以我的问题是:- 是否可以使用 MPJ Express 发送/接收更复杂的对象?- 如果是这样:我做错了什么?

最佳答案

我也是 MPJ express 的新手,但似乎封闭对象需要是原始类型——某种数组。 (就像您在 OpenMPI 中使用 C/C++ 实现一样)。

这种代码很适合我:

    Node t[] = new Node[4];
...
count[0] = t.length;
MPI.COMM_WORLD.Send(count, 0, 1, MPI.INT, 1, 98);
MPI.COMM_WORLD.Send(t, 0, t.length, MPI.OBJECT, 1, 99);
} else if( myRank == 1 ) {
int count[] = new int[1];
MPI.COMM_WORLD.Recv( count, 0, 1, MPI.INT, 0, 98);
Status mps = MPI.COMM_WORLD.Recv( t, 0, count[0], MPI.OBJECT, 0, 99 );
...

当然,您必须让自定义类实现 Serializable 接口(interface)。

关于java - 使用 MPJ express 寄送元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com