2017-02-27 93 views
-1
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++)MPI Java矩阵乘法错误

问题与此有关吗?
你有什么想法,代码没有问题

+0

你会得到什么错误? –

+0

java.lang.reflect.InvocationTargetException \t在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) \t在sun.reflect.NativeMethodAccessorImpl.invoke(来源不明) \t在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明) \t在java.lang.reflect.Method.invoke(来源不明) \t在runtime.starter.MulticoreStarter $ 1.run(MulticoreStarter.java:281) \t在java.lang.Thread.run(来源不明) 引起通过:java.lang.NullPointerException \t at msj.HelloWorld2.fillToken(HelloWorld2.java:272) \t at msj.HelloWorld2.main(HelloWorld2.java:40) \t ... 6更多 – drorhun

回答

0

如果“rank == 1”变为true,那么会得到“java.lang.ArrayIndexOutOfBoundsException:10”。这是因为在你的嵌套的循环,你写

“为(INT J = 0;Ĵ< N;我++)”,而不是 “为(INT J = 0;Ĵ< N; J ++)”。

你增加两次。这个例外会停止你的方法。

先生 副本和Mr Paste发送问候。 ; o)

+0

Okey现在我明白了谢谢,相同的代码以前共享但解决方案还没有达到,所以我再次问到 – drorhun

+0

没问题。我的荣幸。 – DiabolicWords