2017-02-27 120 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