MPI Java 矩阵乘法错误
MPI Java Matrix multiplication error
package msj;
import mpi.*;
public class HelloWorld2 {
public static final int N = 10;
public static void main(String[] args) {
MPI.Init(args);
long startTime = System.currentTimeMillis();
int rank = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();
int tag = 10, peer = (rank==0) ? 1:0;
if(rank == 0) {
double [][] a = new double [N][N];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
a[i][j] = 10.0;
Object[] sendObjectArray = new Object[1];
sendObjectArray[0] = (Object) a;
MPI.COMM_WORLD.Send(sendObjectArray, 0, 1, MPI.OBJECT, peer, tag);
} else if(rank == 1){
double [][] b = new double [N][N];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; i++)
b[i][j] = 0;
Object[] recvObjectArray = new Object[1];
MPI.COMM_WORLD.Recv(recvObjectArray, 0, 1, MPI.OBJECT, peer, tag);
b = (double[][]) recvObjectArray[0];
for(int i = 0; i < 4; i++){
for(int j = 0; j < N; i++)
//long endTime = System.currentTimeMillis();
//long endTime = System.currentTimeMillis();
System.out.print(b[i][j]+"\t");
System.out.println("\n");
//System.out.println("Calculated in " +
// (endTime - startTime) + " milliseconds");
}
}
MPI.Finalize() ;
}
}
我不能运行这个程序。
当我没有在 for 循环中的变量之前写一个 int 时,我得到一个错误:for( int i = 0; i < N; i++)
.
问题与此有关吗?
你有什么想法,代码没有问题
如果 "rank ==1" 成立,您将获得 "java.lang.ArrayIndexOutOfBoundsException: 10"。这是因为在你的嵌套 for 循环中你写了
"for(int j = 0; j < N; i++)" 而不是
"for(int j = 0; j < N; j++)"。
你将 i 递增两次。此异常会停止您的方法。
先生
复制和粘贴先生发送问候。 ;o)
package msj;
import mpi.*;
public class HelloWorld2 {
public static final int N = 10;
public static void main(String[] args) {
MPI.Init(args);
long startTime = System.currentTimeMillis();
int rank = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();
int tag = 10, peer = (rank==0) ? 1:0;
if(rank == 0) {
double [][] a = new double [N][N];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
a[i][j] = 10.0;
Object[] sendObjectArray = new Object[1];
sendObjectArray[0] = (Object) a;
MPI.COMM_WORLD.Send(sendObjectArray, 0, 1, MPI.OBJECT, peer, tag);
} else if(rank == 1){
double [][] b = new double [N][N];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; i++)
b[i][j] = 0;
Object[] recvObjectArray = new Object[1];
MPI.COMM_WORLD.Recv(recvObjectArray, 0, 1, MPI.OBJECT, peer, tag);
b = (double[][]) recvObjectArray[0];
for(int i = 0; i < 4; i++){
for(int j = 0; j < N; i++)
//long endTime = System.currentTimeMillis();
//long endTime = System.currentTimeMillis();
System.out.print(b[i][j]+"\t");
System.out.println("\n");
//System.out.println("Calculated in " +
// (endTime - startTime) + " milliseconds");
}
}
MPI.Finalize() ;
}
}
我不能运行这个程序。
当我没有在 for 循环中的变量之前写一个 int 时,我得到一个错误:for( int i = 0; i < N; i++)
.
问题与此有关吗?
你有什么想法,代码没有问题
如果 "rank ==1" 成立,您将获得 "java.lang.ArrayIndexOutOfBoundsException: 10"。这是因为在你的嵌套 for 循环中你写了
"for(int j = 0; j < N; i++)" 而不是 "for(int j = 0; j < N; j++)"。
你将 i 递增两次。此异常会停止您的方法。
先生 复制和粘贴先生发送问候。 ;o)