gpt4 book ai didi

java - MPJ Express 发送和接收 - ClassCastException

转载 作者:行者123 更新时间:2023-12-01 13:47:19 25 4
gpt4 key购买 nike

我已经看过这个,但它并没有真正帮助,因为我正在处理基元,而不是对象。这只是一个项目的额外部分的一部分。虽然这样很好,但我想让它正常工作。

它编译得很好,但是当我运行它时,我在第 20 行得到了 ClassCastException。

/* Java Version (mine) */    
public class PingPongJava {

public static void main(String args[]) throws Exception {
int me;
int size;
int recv_buf = 0;
int buf = 0;
int send_buf = 101;
double tic = 0, toc = 0;

MPI.Init(args);
me = MPI.COMM_WORLD.Rank();
size = MPI.COMM_WORLD.Size();

tic = MPI.Wtime();
for (int i = 0; i < 50; i++){
if (me == 0){
MPI.COMM_WORLD.Send(send_buf, 0,1,MPI.INT, 17, 100);
MPI.COMM_WORLD.Recv(recv_buf, 0,1, MPI.INT, 23, 100);

}
else{
MPI.COMM_WORLD.Recv(buf, 0, 1, MPI.INT, 17, 100);
MPI.COMM_WORLD.Send(buf, 0,1,MPI.INT, 23, 100);
}
}
toc = MPI.Wtime();
if (me == 0){
System.out.println("Time taken is " + (toc-tic)/100);
}

MPI.Finalize();
}
}

我正在从此 C 版本进行转换

/* Point-to-point communication.
*/
#include <mpi.h>
#include <stdio.h>

int main(int argc, char **argv){
int rank, size, i, recv_buf, send_buf=101, buf;
MPI_Status status;
double tic, toc;

MPI_Init(&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Comm_size (MPI_COMM_WORLD, &size);

tic = MPI_Wtime();
for(i=0;i<50;i++){
if(rank==0){
MPI_Send(&send_buf, 1, MPI_INT, 1, 17 , MPI_COMM_WORLD);
MPI_Recv(&recv_buf, 1, MPI_INT, 1, 23, MPI_COMM_WORLD, &status);
}else{
MPI_Recv(&buf, 1, MPI_INT, 0, 17, MPI_COMM_WORLD, &status);
MPI_Send(&buf, 1, MPI_INT, 0, 23, MPI_COMM_WORLD);
}
}
toc = MPI_Wtime();

if(rank==0)
printf("Average time for a single message: %lf seconds \n", (toc-tic)/100.0);

MPI_Finalize();
return 0;
}

最佳答案

首先,变量recv_buf、buf、send_buf必须使用数组类型。其次,您在 Send、Recv 签名中的最后两个参数是错误的。它们必须是:发送中的“..destination, tag)”和接收中的“..source, tag)”。我在下面的代码中纠正了您的错误。

public class PingPongJava {

public static void main(String args[]) throws Exception {
int me;
int size;
int[] recv_buf = { 0 };
int[] buf = {0};
int[] send_buf = { 101 };
double tic = 0, toc = 0;

MPI.Init(args);

me = MPI.COMM_WORLD.Rank();
size = MPI.COMM_WORLD.Size();

tic = MPI.Wtime();

for (int i = 0; i < 50; i++) {
if (me == 0) {
MPI.COMM_WORLD.Send(send_buf, 0, 1, MPI.INT, 1, 17);
MPI.COMM_WORLD.Recv(recv_buf, 0, 1, MPI.INT, 1, 23);
} else {
MPI.COMM_WORLD.Recv(buf, 0, 1, MPI.INT, 0, 17);
MPI.COMM_WORLD.Send(buf, 0, 1, MPI.INT, 0, 23);
}
}
toc = MPI.Wtime();

if (me == 0) {
System.out.println("Time taken is " + (toc - tic) / 100);
}

MPI.Finalize();
}
}

关于java - MPJ Express 发送和接收 - ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264118/

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