Παράλληλη Επεξεργασία Κεφάλαιο 9 ο Επιµερισµός εδοµένων



Σχετικά έγγραφα
Παράλληλη Επεξεργασία Κεφάλαιο 6 ο Σύγχρονος Παραλληλισμός

Παράλληλη Επεξεργασία Κεφάλαιο 8 ο Προγράμματα Περάσματος Μηνυμάτων

Παράλληλη Επεξεργασία Κεφάλαιο 10 ο Αντίγραφα Εργαζομένων

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων

Παράλληλη Επεξεργασία Κεφάλαιο 7 ο Αρχιτεκτονική Συστημάτων Κατανεμημένης Μνήμης

Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών

Παράλληλη Επεξεργασία Κεφάλαιο 5 Μοίρασμα Δεδομένων

ιαφάνειες παρουσίασης #6

ΑΠΑΝΤΗΣΕΙΣ. α- Σωστό β- Σωστό γ- Λάθος δ- Λάθος ε- Σωστό στ- Σωστό

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α A1. 2-Λάθος 3-Λάθος 4-Σωστό 5-Λάθος A2. integer. real. Boolean. char. string A3.

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Μεταγλωττιστές Βελτιστοποίηση

Εισαγωγή στο Προγραμματισμό για Μηχανολόγους Οδηγός Προετοιμασίας για τη Τελική Εξέταση

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

ιαφάνειες παρουσίασης #7

ιαφάνειες παρουσίασης #7

Αποτελέσματα προόδου

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος

ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙ ΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Προγραμματισμός PASCAL

ΛΥΣΕΙΣ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2007

ιαφάνειες παρουσίασης #5

Απαντήσεις στο μάθημα Δομημένος Προγραμματισμός ΕΠΑΛ

Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ. Β. Χαρακτήρας(Αλφαριθμητικά)

ΜΕΡΟΣ Α - Αποτελείται από δέκα (10) ερωτήσεις. Κάθε ερώτηση βαθμολογείται με έξι μονάδες.

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

ιαφάνειες παρουσίασης #4

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2014

Μεταγλωττιστές Βελτιστοποίηση

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

Σύνθετοι τύποι και λειτουργίες. (Peter Ashenden, The Students Guide to VHDL)

Δομές Δεδομένων & Αλγόριθμοι

ιαφάνειες παρουσίασης #3

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI Org. GREEK COMPUTER SOCIETY MEMBER OF IFIP, IOI Org.

ιαφάνειες παρουσίασης #4

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Πίνακες. FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Μεταγλωττιστές 2019 Θέμα εργασίας

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. β. Οι πληροφορίες είναι δεδομένα τα οποία δεν έχουν υποστεί επεξεργασία.

Κων/νου Στυλιάδη Χρήστου Ιωάννου. Εφαρµογή Αποθήκης σε Pascal

ιαφάνειες παρουσίασης #11

Γ ΤΑΞΗ ΗΜΕΡΗΣΙΟΥ ΕΠΑ.Λ ΜΑΘΗΜΑ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΚΦΩΝΗΣΕΙΣ

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Παράλληλη Επεξεργασία Κεφάλαιο 1 Γιατί Παράλληλος Προγραμματισμός;

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Μορφοποίηση της εξόδου

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ:

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

ΜΑΗΣ ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ ΔΟΚΙΜΙΟΥ. Ενότητα Α - ΛΥΣΕΙΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008

Λειτουργικά Συστήματα

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Παράδειγμα #5 EΠΙΛΥΣΗ ΜΗ ΓΡΑΜΜΙΚΩΝ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΜΕΘΟΔΟ NEWTON ΕΠΙΜΕΛΕΙΑ: Ν. Βασιλειάδης. ( k ) ( k)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Δομές ελέγχου. ομαδοποίηση εντολών εκτέλεση εντολών υπό συνθήκη επανάληψη εντολών

Προτεινόμενες λύσεις

Εισαγωγή στον Προγραμματισμό Η/Υ (Fortran 90/95/2003)

Μοντελοποίηση Επιπέδου Πύλης. (Peter Ashenden, The Students Guide to VHDL)

Κεφάλαιο 7: Υπορουτίνες

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

Προγραμματισμός PASCAL

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 7: ΑΝΑΔΡΟΜΗ

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Τύποι Δεδομένων και Τελεστές

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

Μαζέρας Αχιλλέας. Οι εντολές επανάληψης στην Pascal (While) Φυσικός Αυτοματιστής M.Sc. Νοέµβριος 2009

Κατανεμημένα Συστήματα. Javascript LCR example

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

Library, package και subprograms

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Ακολουθιακός Κώδικας

Μονάδες 12 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Βασικές Έννοιες Αλγορίθμων Τι είναι αλγόριθμος

Εισαγωγή στη γλώσσα περιγραφής υλικού VHDL. Βασικές εντολές και η περιγραφή συνδυαστικών κυκλωµάτων. Ψηφιακή Σχεδίαση µε CAD ΙΙ - ιάλεξη 2 -

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Προχωρημένα Θέματα Σχεδιασμού με VHDL

Επιμερισμός δεδομένων

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009

ΠΡΟΤΕΙΝΟΜΕΝΕΣ ΛΥΣΕΙΣ

Pascal. 15 Νοεμβρίου 2011

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2013

Transcript:

Παράλληλη Επεξεργασία Κεφάλαιο 9 ο Επιµερισµός εδοµένων Κωνσταντίνος Μαργαρίτης Καθηγητής Τµήµα Εφαρµοσµένης Πληροφορικής Πανεπιστήµιο Μακεδονίας kmarg@uom.gr http://eos.uom.gr/~kmarg Αρετή Καπτάν Υποψήφια ιδάκτορας Τµήµα Εφαρµοσµένης Πληροφορικής Πανεπιστήµιο Μακεδονίας areti@uom.gr http://eos.uom.gr/~areti

ΠρόβληµαΝ σωµάτων στην Αστροφυσική 2

Υπολογισµός υνάµεων Βαρύτητας 3

ΠρόβληµαΝ σωµάτων σε Παράλληλο Σύστηµα ιαµοιραζόµενης Μνήµης PROGRAM Nbody; CONST n=100; (*Αριθµός των σωµάτων*) G=...; (*Σταθερά βαρύτητας*) TYPE bodytype=record mass, x, y: REAL; (*Μάζα και θέση*) forcetype=record x, y: REAL; (* ύναµη στις κατευθύνσεις x και y*) VAR body: ARRAY [1..n] OF bodytype; (*Αρχικός πίνακας δεδοµένων*) force: ARRAY [1..n] OF forcetype; (*προκύπτουσες δυνάµεις*) i: INTEGER;... (*Αρχικοποίηση του πρωταρχικού πίνακα body *) FORALL i:= 1 TO n DO (* ηµιουργία των διεργασιών*) FindForce(i); END. PROCEDURE FindForce(me: INTEGER); VAR j: INTEGER; xdist, ydist, dist, distsq, pull: REAL; force[me].x:= 0; force[me].y:= 0; FOR j:= 1 TO n DO (*Εξέταση κάθε άλλου σώµατος*) IF j <> me DO xdist:= body[j].x - body[me].x; ydisst:= doby[j].y - body[me].y; distsq:= xdist*xdist + ydist*ydist; dist:= Sqrt(distsq); (*Απόσταση µεταξύ των σωµάτων*) pull:= G*body[me].mass * body[j].mass/distsq; force[me].x:= force[me].x + pull*xdist/dist; (*Η δύναµη x*) force[me].y:= force[me].y + pull*ydist/dist; (*Η δύναµη y*) 4

ΠρόβληµαΝ σωµάτων σε Παράλληλο Σύστηµα Κατανεµηµένης Μνήµης For each body i in my permanenet partition do For each body j in the circulating partition do Compute force exerted by body j on body i; Send circulating partition to the right-neighbor process; Receive new circulating partition from left-neighbor process; 5

ΠρόβληµαΝ Σωµάτων σε ακτύλιο 25 επεξεργαστών PROGRAM Nbody; ARCHITECTURE RING(25); CONST n=100; (*Αριθµός των σωµάτων*) numproc=25; (*Αριθµός των διεργασιών*) partsize=4; (*Μέγεθος κάθε τµήµατος*) G=...; (*Σταθερά βαρύτητας*) TYPE bodytype= RECORD m, x, y: REAL; (*Μάζα και θέση*) VAR forcetype= RECORD; x, y:real; (* ύναµη στις κατευθύνσεις x και y*) parttype= ARRAY [1..partsize] OF bodytype; resulttype=array [1..partsize] OF forcetype; bodies: ARRAY [1..numproc] OF parttype; (*Αρχικός πίνακας δεδοµένων*) finalforce: ARRAY [1..numproc] OF resulttype; (*Προκύπτουσες δυνάµεις*) i, j: INTEGER; inchan: ARRAY [1..numproc] OF CHANNEL OF parttype; PROCEDURE FindForce(me: INTEGER; body: parttype; (*Το µόνιµο τµήµα*) VAR result: resulttype); (*Για να σταλούν πίσω τα αποτελέσµατα*) VAR i, j, k: INTEGER; circ: parttype; (*Περιστρεφόµενο τµήµα*) force: resulttype; (*Για την συσσωρευµένη δύναµη στα σώµατα*) xdist, ydist, dist, sqdist, pull: REAL; ( Συνέχεια ) (*Επικοινωνία*) 6

ΠρόβληµαΝ Σωµάτων σε ακτύλιο 25 επεξεργαστών circ:= body; (*Αντιγραφή του µόνιµου τµήµατος στο περιστρεφόµενο*) FOR i:= 1 TO partsize DO force[i].x:= 0; force[i].y:= 0; FOR k:= 1 TO numproc DO FOR i:= 1 TO partsize DO FOR j:= 1 TO partsize DO (*Υπολογισµός της δύναµης που ασκείται από το σώµα j στο σώµα i*) xdist:= circ[j].x - body[i].x; ydist:= circ[j].x - body[i].y; distsq:= xdist*xdist + ydist*ydist; dist:= Sqrt(distsq); IF dist <> 0 THEN pull:= G * body[i].m * circ[j].m / distsq; force[i].x:= force[i].x + pull*xdist/dist; force[i].y:= force[i].y + pull*ydist/dist; inchan[me MOD numproc + 1]:= circ; (*Αποστολή στα δεξιά*) circ:= inchan[me]; (*Λήψη από τον αριστερό γείτονα*) result:= force; (*Τελική απάντηση στην πρωταρχική διεργασία*) (* Κυρίως πρόγραµµα*)... (*Αρχικοποίηση του πρωταρχικού πίνακα bodies*) FORALL i:= 1 TO numproc DO (* ηµιουργία των διεργασιών*) (@i-1 PORT inchan[i]) FindForce(i, bodies[i], finalforce[i]); END. 7

Aκολουθία δραστηριοτήτων κατά τη διάρκεια κάθε επανάληψης Υπολογισµός της δύναµης που ασκείται από όλα τα σώµατα του περιστρεφόµενου τµήµατος σε όλα τα σώµατα του µόνιµου τµήµατος. Αποστολή του τρέχοντος περιστρεφόµενου τµήµατος στο δεξιό γείτονα. Λήψη του νέου περιστρεφόµενου τµήµατος από τον αριστερό γείτονα. 8

Επικάλυψη χρόνου επικοινωνίας/υπολογισµού PROCEDURE FindForce(me: INTEGER;body: parttype; (*Το µόνιµο τµήµα*) VAR VAR result: resulttype); (*Για την αποστολή των αποτελεσµάτων πίσω*) i, j, k: INTEGER; circ: parttype; (*Περιστρεφόµενο τµήµα*) force: resulttype; (*Για τη συσσώρευση της δύναµης στα σώµατα*) xdist, ydist, dist, distsq, pull: REAL; circ:= body; (*Αντιγραφή του µόνιµου τµήµατος στο περιστρεφόµενο*) FOR i:= 1 TO partsize DO force[i].x:= 0; force[i].y:= 0; FOR k:= 1 TO numproc DO inchan[me MOD numproc+1]:= circ; (*Αποστολή στα δεξιά**) FOR i:= 1 TO partsize DO (*Φάση Υπολογισµού*) FOR j:= 1 TO partsize DO (*Υπολογισµός της δύναµης που ασκείται από το σώµα j στο σώµα i*) xdist:= circ[j].x - doby[i].x; ydist:= circ[j].y - body[i].y; distsq:= xdist*xdist + ydist*ydist; dist:= Sqrt(distsq); IF dist <> 0 THEN pull:= G * body[i].m * circ[j].m/distsq; force[i].x:= force[i].x + pull*xdist/dist; force[i].y:= force[i].y + pull*ydist/dist; circ:= inchan[me]; (*Λήψη από τον αριστερό γείτονα*) result:= force; (*Τελική απάντηση πίσω στην πρωταρχική διεργασία*) 9

Πλεονεκτήµατα Τοπολογικής Απεικόνισης Ιδεατή έναντι φυσικής τοπολογίας Μεγάλη συνδεσιµότητα Μικρότερη διάµετρος Μείωση των χρόνων για: ηµιουργία, αρχικοποίηση και τερµατισµό των διεργασιών Τοπολογίες µε χαµηλή συνδεσιµότητα µπορούν να απεικονιστούν σε τοπολογίες µε υψηλή συνδεσιµότητα 10

Τοπολογίες κατά αύξουσα συνδεσιµότητα Γραµµή ακτύλιος Πλέγµα δύο διαστάσεων Τόρος Πλέγµα τριών διαστάσεων Υπερκύβος Πλήρως Συνδεδεµένη 11

Ακολουθία κώδικα Gray 3-bits. Gray[1]=0 (δυαδικό 000) Gray[2]=1 (δυαδικό 001) Gray[3]=3 (δυαδικό 011) Gray[4]=2 (δυαδικό 010) Gray[5]=6 (δυαδικό 110) Gray[6]=7 (δυαδικό 111) Gray[7]=5 (δυαδικό 101) Gray[8]=4 (δυαδικό 100) 12

Απεικόνιση ιδεατής τοπολογίας σε φυσική τοπολογία Τοπολογία δακτυλίου FORALL i:= 1 TO numproc DO (* ηµιουργία των διεργασιών*) (@i-1 PORT inchan[i]) Findforce(i, bodies[i], finalforce[i]); Τοπολογία υπερκύβου FORALL i:= 1 TO numproc DO (* ηµιουργία των διεργασιών*) (@Gray[i] PORT inchan[i]) FindForce(i, bodies[i], finalforce[i]); 13

Επιµερισµός για τον Πολλαπλασιασµό Μητρών 14

Πολλαπλασιασµός Μητρών σε Τοπολογία Τόρου VAR mya, myb, myc: REAL i: INTEGER; myc:= 0; FOR i:= 1 TO 3 DO myc:= myc + mya*myb; send mya to neighbor processor in leftward rotation; send myb to neighbor processor in upward rotation; receive new mya; receive new myb; write myc to master product array; 15

Απλοποιηµένος Πολλαπλασιασµός Μητρών PROGRAM Matrixmult; ARCHITECTURE TORUS(3); CONST n=3; VAR A, B, C: ARRAY [0..n-1, 0..n-1] OF REAL; (*Αρχικοί πίνακες δεδοµένων*) Achan, Bchan: ARRAY [0..n-1, 0..n-1] OF CHANNEL OF REAL; i, j: INTEGER; PROCEDURE Multiply(row, col: INTEGER; mya, myb: REAL; VAR mainc: REAL); VAR iter, above, left: INTEGER; myc: REAL; IF row > 0 THEN above:= row-1 ELSE above:= n-1; (*Πάνω γείτονας*) IF col > 0 THEN left:= ol-1 ELSE left:=n-1; (*Αριστερός γείτονας*) myc:= 0; FOR iter:= 1 TO n DO Achan[row, left]:= mya; (*Αποστολή του mya στην αριστερή περιστροφή*) Bchan[above, col]:= myb; (*Αποστολή του myb στην ανιούσα περιστροφή*) myc:= myc + mya*myb; mya:= Achan[row, col]; (*Λήψη του νέου mya*) myb:= Bchan[row, col]; (*Λήψη του νέου myb*) mainc:= myc; (*Αποστολή της τελικής τιµής στην κύρια διεργασία*)... (*Αρχικοποίηση των τιµών των µητρών A και B*) FOR i:= 0 TO n-1 DO FOR j:= 0 TO n-1 DO FORK(@i*n+j PORT Achan[i,j]; Bchan[i,j]) Multiply(i, j, A[i, (j+i) MOD n], B[(i+j) MOD n, j], C[i,j]); END. 16

Πολλαπλασιασµός Μητρών σε Τόρο (Μ.Ι) PROGRAM Matrixmult; ARCHITECTURE TORUS(7); CONST m= 7; (*Ο Τόρος έχει mxm επεξεργαστές*) p= 5; (*Το µέγεθος του τµήµατος είναι pxp*) TYPE partition= ARRAY [1..p, 1..p] OF REAL; chantype= CHANNEL OF partition; VAR A, B, C: ARRAY [0..m-1, 0..m-1] OF partition; (*Αρχικοί πίνακες δεδοµένων*) Achan, Bchan: ARRAY [0..m-1, 0..m-1] OF chantype; (*Επικοινωνία*) i, j: INTEGER; PROCEDURE Multiply(row,col:INTEGER; mya,myb: partition; VAR mainc: partition); VAR i, j, k, iter, above, left: INTEGER; myc: partition; IF row > 0 THEN above:= row-1 ELSE above:= m-1; IF col > 0 THEN left:= col-1 ELSE left:= m-1; FOR i:= 1 TO p DO FOR j:= 1 TO p DO myc[i,j]:= 0; FOR iter:= 1 TO m DO Achan[row,left]:= mya; (*Αποστολή του mya στην αριστερή περιστροφή*) Bchan[above,col]:= myb; (*Αποστολή του myb στην ανιούσα περιστροφή*) FOR i:= 1 TO p DO (*Πολλαπλασιασµός των Α και Β τµηµάτων*) FOR j:= 1 TO p DO FOR k:= 1 TO p DO myc[i,j]:= myc[i,j]+mya[i,k]*myb[k,j]; mya:= Achan[row,col] (*Λήψη του νέου mya*) myb:= Bchan[row,col] (*Λήψη του νέου myb*) 17

Πολλαπλασιασµός Μητρών σε Τόρο (Μ.ΙΙ) mainc:= myc; (*Εγγραφή του αποτελέσµατος πίσω στην αρχική C*)... (*Αρχικοποίηση των τιµών για τις µήτρες A και B*) FOR i:= 0 TO m-1 DO FOR j:= 0 TO m-1 DO FORK(@i*m+j PORT Achan[i,j];Bchan[i,j]) Multiply(i, j, A[i, (j+i) MOD m], B[(i+j) MOD m, j], C[i,j]); END. 18

Υπολογισµός της τιµής κάθε σηµείου Αλγόριθµος Jacobi 19

Ακολουθιακός αλγόριθµος του Jacobi PROGRAM Jacobi; CONST n=32; tolerance= 0.1; VAR A, B: ARRAY [0..n+1,0..n+1] OF REAL; i,j : INTEGER; change,maxchange: REAL;... (*Ανάγνωση των αρχικών τιµών για τον πίνακα Α*) B:= A; REPEAT (*Υπολογισµός των νέων τιµών µέχρι να επιτευχθεί η επιθυµητή ανοχή*) maxchange:= 0; FOR i:= 1 TO n DO FOR j:=1 TO n DO (*Υπολογισµός της νέας τιµής και της αλλαγής της σε σχέση µε την παλιά τιµή*) B[i,j]:= (A[i-1,j]+A[i+1,j]+A[i,j-1]+A[i,j+1])/4; change:= ABS(B[i,j]-A[i,j]); If change > maxchange THEN maxchange:= change; A:= B; UNTIL maxchange < tolerance; END. 20

Παράλληλος αλγόριθµος του Jacobi VAR myrow,downrow,uprow,newrow: ARRAY [0..n+1] OF REAL; j: INTEGER; done: BOOLEAN; maxchange: REAL; REPEAT FOR j:= 1 TO n DO (*Μέσος όρος των τεσσάρων γειτονικών σηµείων*) newrow[j]:= (myrow[j-1]+myrow[j+1]+downrow[j]+uprow[j])/4; myrow:= newrow; Send myrow to neighbors above and below; Receive new copies of downrow and uprow from neighbors; Compute maxchange in my row; done:= Aggregate(maxchange<tolerance); (*Έλεγχος τερµατισµού*) UNTIL done; 21

Jacobi Relaxation (M.I) PROGRAM Jacobi; ARCHITECTURE HYPERCUBE(5); CONST n=32; (*Αριθµός των επεξεργαστών*) d=5; (* ιάσταση του Υπερκύβου*) numiter=2*d; (*Πλήθος των επαναλήψεων πριν τον έλεγχο τερµατισµού*) tolerance=.1; TYPE rowtype= ARRAY [0..n+1] OF REAL; VAR A: ARRAY [0..n+1] OF rowtype; i: INTEGER; upchan,downchan: ARRAY [1..n] OF CHANNEL OF rowtype; (*Θύρες επικοινωνίας*) GrayCode: ARRAY [1..n] OF INTEGER; inchan: ARRAY [0..n-1,1..d] OF CHANNEL OF BOOLEAN; (*Για την Συλλογή*) FUNCTION Aggregate(mydone: BOOLEAN): BOOLEAN;...(*Συνάρτηση Πολλαπλής Συλλογής από το σχήµα 8.11*) PROCEDURE Updaterow(me: INTEGER; myrow: rowtype; VAR out: rowtype); VAR j,k: INTEGER; maxchange,change: REAL; newrow,uprow,downrow: rowtype; done: BOOLEAN; newrow[0]:= myrow[0]; newrow[n+1]:= myrow[n+1]; IF me= 1 THEN downrow:= downchan[me]; IF me= n THEN uprow:= upchan[me]; 22

Jacobi Relaxation (M.II) REPEAT FOR k:= 1 TO numiter DO (*Αρκετές επαναλήψεις πριν τον έλεγχο τερµατισµού*) IF me > 1 THEN upchan[me-1]:= myrow; (*Αποστολή στον γείτονα me-1*) IF me < n THEN downchan[me+1]:= myrow; (*Αποστολή στον γείτονα me+1*) uprow:= upchan[me]; (*Λήψης της νέας uprow*) IF me > 1 THEN downrow:= downchan[me]; (*Λήψη της νέας downrow*) maxchange:= 0; FOR j:= 1 TO n DO (*Υπολογισµός του µέσου όρου των γειτονικών σηµείων*) newrow[j]:= (myrow[j-1]+myrow[j+1]+downrow[j]+uprow[j])/4; change:= ABS(newrow[j]-myrow[j]); IF change > maxchange THEN maxchange:= change; myrow:=newrow; done:= Aggregate(maxchange < tolerance); (*Έλεγχος τερµατισµού*) UNTIL done; out:= myrow; (*Εγγραφή των τελικών αποτελεσµάτων στο F*)... (*Αρχικοποίηση των τιµών για τον πίνακα Α*) (*Αρχικοποίηση του πίνακα GrayCode για τον Υπερκύβο*) downchan[1]:= A[0]; upchan[n]:= A[n+1]; (*Καθορισµένες οριακές τιµές FORALL i:= 1 TO n DO (@GrayCode[i] PORT upchan[i]; downchan[i]; inchan[graycode[i]]) END. Updaterow(i, A[i], A[i]); 23

Συνάρτηση Πολλαπλής Συλλογής Aggregate FUNCTION Aggregate(mydone: BOOLEAN): BOOLEAN; VAR mynum, partner, bitvalue, stage: INTEGER; hisdone: BOOLEAN; mynum:=%self; (*Λήψη του αριθµού επεξεργαστή*) bitvalue:= 1; FOR stage:= 1 TO d DO IF mynum DIV bitvalue MOD 2 = 0 (*Υπολογισµός του ζεύγους*) THEN partner:= mynum+bitvalue ELSE partner:= mynum-bitvalue; inchan[partner, stage]:= mydone; (*Αποστολή του mydone στο ταίρι*) hisdone:= inchan[mynum, stage]; (*Λήψη του hisdone από το ταίρι*) mydone:= mydone AND hisdone; bitvalue:= 2*bitvalue (*Μετατόπιση προς την επόµενη θέση bit*) Aggregate:= mydone; 24