1 / 32

MPI Jacobi iterations

MPI Jacobi iterations. Αντώνης Σιδηρόπουλος Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης. Jacobi Method . Μέθοδος για την επίλυση συστήματος γραμμικών εξισώσεων. 5 x+3y+8z=5 7x+2y-2z=10 x+y-4z=0 ( x,y,z )=(?,?,?). Jacobi Method . Jacobi Method . Jacobi Method . ….

anevay
Download Presentation

MPI Jacobi iterations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MPI Jacobi iterations Αντώνης Σιδηρόπουλος Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης

  2. Jacobi Method • Μέθοδος για την επίλυση συστήματος γραμμικών εξισώσεων. 5x+3y+8z=5 7x+2y-2z=10 x+y-4z=0 (x,y,z)=(?,?,?) Α.Σιδηρόπουλος

  3. Jacobi Method Α.Σιδηρόπουλος

  4. Jacobi Method Α.Σιδηρόπουλος

  5. Jacobi Method … Α.Σιδηρόπουλος

  6. Έστω μια εξίσωση με 9χ9 =81 αγνώστους xi,j • Με i=1..9 και j=1..9 • Η εξίσωση: xi,j=(xi-1,j+ xi+1,j+ xi,j-1 + xi,j+1)/4 Α.Σιδηρόπουλος

  7. Iteration του αλγορίθμου(4 γείτονες) • Για κάθε κόμβο i,j υπολόγισε: A[i][j] = (A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1] + A[i][j])/4 j=2 j=1 j=4 j=6 j=9 j=3 j=5 j=8 j=7 i=1 Οι περιμετρικοί κόμβοι δεν θα υπολογίζονται i=2 i=3 i−1,j i=4 i,j−1 i,j i,j+1 i=5 i+1,j i=6 i=7 i=8 i=9 Α.Σιδηρόπουλος

  8. Αρχικοποίηση SIZE=7 for(i=0;i<=SIZE+1;i++) { for(j=0;j<=SIZE+1;j++) { Xold[i][j]=1; X[i][j]=1; } X[i][0]=-1; X[i][SIZE+1]=-1; Xold[i][0]=-1; Xold[i][SIZE+1]=-1; } Α.Σιδηρόπουλος

  9. Iteration iterations++; for(i=1;i<=SIZE;i++) { for(j=1;j<=SIZE;j++) { up=Xold[i-1][j]; down=Xold[i+1][j]; left=Xold[i][j-1]; right=Xold[i][j+1]; X[i][j]=(up+down+left+right)/4.0; } } Α.Σιδηρόπουλος

  10. Έλεγχος diff=0; for(i=0;i<=SIZE+1;i++) { for(j=0;j<=SIZE+1;j++) { diff+=(X[i][j]-Xold[i][j])*(X[i][j]-Xold[i][j]); } } if(sqrt(diff)<0.00000001 || iterations>1000) { ok=1; } memcpy(Xold,X,(sizeof(double)*(SIZE+2)*(SIZE+2))); Α.Σιδηρόπουλος

  11. Κατανομή γραμμών σε p=3 διεργασίες Διεργασία 0 Διεργασία 1 Διεργασία 2 Α.Σιδηρόπουλος

  12. Επικοινωνία μεταξύ διεργασιών Διεργασία 0 Διεργασία 1 Διεργασία 2 Α.Σιδηρόπουλος

  13. Επικοινωνία μεταξύ διεργασιών Διεργασία 0 Διεργασία 1 Διεργασία 2 Α.Σιδηρόπουλος

  14. (Σενάριο 1) Αν χρησιμοποιήσουμε blocking Send, τότε τα μηνύματα θα πάνε (σχεδόν) σειριακά /// inform next process for my last line if(rank<size-1) { MPI_Send(Xold[last_line], SIZE+2, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD); } /// be informed from prev process for my pre-first line if(rank>0) { MPI_Recv(Xold[first_line-1], SIZE+2, MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD,&status); } /// inform previous process for my first line if(rank>0) { MPI_Send(Xold[first_line], SIZE+2, MPI_DOUBLE, rank-1, 2, MPI_COMM_WORLD); } /// Be informed from next process for my after-last line. if(rank<size-1) { MPI_Recv(Xold[last_line+1], SIZE+2, MPI_DOUBLE, rank+1, 2, ΜPI_COMM_WORLD,&status); } Α.Σιδηρόπουλος

  15. (Σενάριο 1) Α.Σιδηρόπουλος

  16. (Σενάριο 1) Time Α.Σιδηρόπουλος

  17. Αν είχαμε 5 διεργασίες (Σενάριο 1) Α.Σιδηρόπουλος

  18. Αν είχαμε 5 διεργασίες (Σενάριο 1) Time Α.Σιδηρόπουλος

  19. Σενάριο 2 Αν Αλλάξουμε την σειρά από τα 2 τελευταία Send-Recv /// inform next process for my last line if(rank<size-1) { MPI_Send(Xold[last_line], SIZE+2, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD); } /// be informed from prev process for my pre-first line if(rank>0) { MPI_Recv(Xold[first_line-1], SIZE+2, MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD,&status); } • /// inform previous process for my first line • if(rank>0) { • MPI_Send(Xold[first_line], SIZE+2, MPI_DOUBLE, rank-1, 2, MPI_COMM_WORLD); • } /// Be informed from next process for my after-last line. if(rank<size-1) { MPI_Recv(Xold[last_line+1], SIZE+2, MPI_DOUBLE, rank+1, 2, ΜPI_COMM_WORLD,&status); } Α.Σιδηρόπουλος

  20. Αν είχαμε 5 διεργασίες (Σενάριο 2) Α.Σιδηρόπουλος

  21. Αν είχαμε 5 διεργασίες (Σενάριο 2) Time Α.Σιδηρόπουλος

  22. (Σενάριο 3) Αν Αλλάξουμε την σειρά ώστε όλες οι διεργασίες να κάνουν πρώτα τα Send και μετά τα receive: • /// be informed from prev process for my pre-first line • if(rank>0) { • MPI_Recv(Xold[first_line-1], SIZE+2, MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD,&status); • } /// inform next process for my last line if(rank<size-1) { MPI_Send(Xold[last_line], SIZE+2, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD); } • /// inform previous process for my first line • if(rank>0) { • MPI_Send(Xold[first_line], SIZE+2, MPI_DOUBLE, rank-1, 2, MPI_COMM_WORLD); • } /// Be informed from next process for my after-last line. if(rank<size-1) { MPI_Recv(Xold[last_line+1], SIZE+2, MPI_DOUBLE, rank+1, 2, ΜPI_COMM_WORLD,&status); } Α.Σιδηρόπουλος

  23. Αν είχαμε 5 διεργασίες ((Σενάριο 3) Α.Σιδηρόπουλος

  24. Αν είχαμε 5 διεργασίες (Σενάριο 3) Deadlock Μη αποδεκτή λύση Time Α.Σιδηρόπουλος

  25. Για καλύτερη επιτάχυνση θα πρέπει να χρησιμοποιηθεί non-blocking Send & Receive Α.Σιδηρόπουλος

  26. Αν είχαμε 5 διεργασίεςμε non-blocking (Σενάριο 4) Time Barrier Barrier Α.Σιδηρόπουλος

  27. Μέθοδοι επικοινωνίας • Άλλες λύσεις ? Α.Σιδηρόπουλος

  28. Αν είχαμε 5 διεργασίεςμε blocking (Σενάριο 5) Time Barrier Barrier Αντί όλες οι διεργασίες να κάνουν με την ίδια σειρά Send-Receive να το κάνουν εναλλάξ. Α.Σιδηρόπουλος

  29. Αν είχαμε 5 διεργασίεςμε blocking (Σενάριο 5) Time Διαφορετική σειρά Send-Receive στις μονές-ζυγές διεργασίες. Οι μονές διεργασίες Receive-Send, οι ζυγές Send-Receive. Α.Σιδηρόπουλος

  30. Επικοινωνία μεταξύ διεργασιών MPI_Reduce Global_Diff_sum Διεργασία 0 Diff_sum Διεργασία 1 Diff_sum Διεργασία 2 Diff_sum Με βάση το Global_Diff_sum η διεργασία 0 θα αποφασίσει αν τελειώσαμε. Θα θέσει την μεταβλητή ΟΚ και θα την κάνει Bcastσε όλες. Α.Σιδηρόπουλος

  31. Συλλογή αποτελεσμάτων Διεργασία 0 Διεργασία 1 Διεργασία 2 Α.Σιδηρόπουλος

  32. Iteration του αλγορίθμου(8 γείτονες) A[i][j] = f( A[i−1][j−1], A[i−1][j], A[i−1][j+1], A[i][j−1], A[i][j], A[i][j+1], A[i+1][j−1], A[i+1][j], A[i+1][j+1] ) j=2 j=1 j=4 j=6 j=9 j=3 j=5 j=8 j=7 i=1 i=2 i−1,j−1 i−1,j+1 i−1,j i=3 i=4 i,j−1 i,j i,j+1 i=5 i+1,j−1 i+1,j i+1,j+1 i=6 i=7 i=8 i=9 Α.Σιδηρόπουλος

More Related