2017-02-27 10 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 (알 수없는 소스) runtime.starter.MulticoreStarter $ 1.run (MulticoreStarter.java:281) java.lang.Thread.run에서 \t (알 수없는 소스) 에서 \t가 인한 java.lang.reflect.Method.invoke (알 수없는 소스)에서 \t 의해 : 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; INT의 J = 0 내가 ++)"대신 의 "에 대한 (INT의 J = 0; j를 < N, J ++)".

i를 두 번 증가시킵니다. 이 예외는 메소드를 중지합니다.

Mr. 복사 및 Mr Paste는 인사말을 보냅니다. ; o)

+0

Okey 이제 이전에 같은 코드를 공유했지만 솔루션에 도달하지 못해서 다시 질문했습니다. – drorhun

+0

괜찮습니다. 천만에요. – DiabolicWords