2017-02-27 15 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 sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)sun.reflect.NativeMethodAccessorImpl.invokeで \t(不明なソース)で \t sun.reflect.DelegatingMethodAccessorImpl.invokeで \t(不明なソース)引き起こさjava.lang.Thread.run(不明なソース) でruntime.starter.MulticoreStarter $ 1.run(MulticoreStarter.java:281) \tで java.lang.reflect.Method.invoke(不明なソース)で\t \t by:java.lang.NullPointerException \t at msj.HelloWorld2.fillToken(HelloWorld2.java:272) \t at msj.HelloWorld2.main(HelloWorld2.java:40) \t ... 6 more – drorhun

答えて

0

"rank == 1"がtrueになると、 "java.lang.ArrayIndexOutOfBoundsException:10"が表示されます。代わりに の "(;; J < N I ++はint型J = 0)のために" "のために(int型J = 0; jの< N; J ++)" あなたのforループネストされた中で、あなたが

を書いたためです。

iを2回インクリメントします。この例外はメソッドを停止します。

Mr. コピーとミスターペーストはご挨拶を送信します。 ; o)

+0

私は以前、同じコードが共有されていましたが、解決策はまだ届いていませんでした。 – drorhun

+0

問題はありません。どういたしまして。 – DiabolicWords