2017-02-27 2 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() ; 
       } 

} 

Ich konnte dieses Programm nicht ausführen.
Ich erhalte einen Fehler, wenn ich nicht ein int vor den Variablen in der for-Schleife schreibe: for(int i = 0; i < N; i++).MPI Java Matrix Multiplikationsfehler

Ist das Problem damit verbunden?
Haben Sie eine Idee haben, gibt es kein Problem in dem Code

+0

Welchen Fehler bekommen Sie? –

+0

java.lang.reflect.InvocationTargetException \t bei sun.reflect.NativeMethodAccessorImpl.invoke0 (Mutter Methode) \t bei sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) \t bei sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) \t bei java.lang.reflect.Method.invoke (Unknown Source) \t bei runtime.starter.MulticoreStarter $ 1.run (MulticoreStarter.java:281) \t bei java.lang.Thread.run (Unknown Source) verursacht von: java.lang.NullPointerException \t bei msj.HelloWorld2.fillToken (HelloWorld2.java:272) \t bei msj.HelloWorld2.main (HelloWorld2.java:40) \t ... 6 mehr – drorhun

Antwort

0

Sie erhalten "java.lang.ArrayIndexOutOfBoundsException: 10", wenn "Rang == 1" wahr wird. Dies liegt daran, in verschachtelter for-Schleife Sie

schrieben "für (int j = 0; j < N; i ++)" anstelle von "für (int j = 0; j < N; j ++)".

Sie erhöhen zweimal. Diese Ausnahme stoppt Ihre Methode.

Herr Kopieren und Herr Paste senden Grüße. ; o)

+0

Okey jetzt verstanden ich danke, Der gleiche Code wurde zuvor geteilt, aber die Lösung hat nicht erreicht, also fragte ich wieder – drorhun

+0

Kein Problem. Gern geschehen. – DiabolicWords