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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό

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

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

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

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

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

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

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

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

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

Θέματα Προγραμματισμού Η/Υ

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

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

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

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

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

Υπολογισμός - Εντολές Επανάληψης

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

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

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

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

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

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

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

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

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

Α3. Να γράψετε τους αριθμούς 1, 2, 3, 4, 5 από τη Στήλη Α και δίπλα το γράμμα α, β, γ, δ, ε, στ από τη Στήλη Β που δίνει τη σωστή αντιστοιχία.

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

Πληροφορική ΙΙ Θεματική Ενότητα 7

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 10

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

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

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

Μονάδες 4. β. x=20 και y=10

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

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΤΕΛΟΣ 1ΗΣ ΑΠΟ 6 ΣΕΛΙ ΕΣ

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΜΑΘΗΜΑ / ΤΑΞΗ : ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ / Γ'ΕΠΑΛ ΗΜΕΡΟΜΗΝΙΑ: ΕΠΙΜΕΛΕΙΑ ΔΙΑΓΩΝΙΣΜΑΤΟΣ: Ι.ΜΙΧΑΛΕΑΚΟΣ-Α.ΚΑΤΡΑΚΗ-Χ.ΠΑΠΠΑ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α

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

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

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

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

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά

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

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

A3. Μονάδες 5 Α4. Μονάδες 10 ΘΕΜΑ B. Β1. writeln Περιεχόμενα Εντολή Αποτελέσματα Παραμέτρων Μονάδες 20 ΘΕΜΑ Γ.

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

Κατανεμημένα Συστήματα Ι

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Αλγόριθμοι. Α. Υπολογιστικά Προβλήματα. Β. Εισαγωγή στους Αλγόριθμους. Γ. ομή Αλγόριθμων. Δ. ομές εδομένων

Ιδιοκτησία Αντικειµένου

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

Εισαγωγή στον Προγραμματισμό

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

Αλγόριθμοι Γραφημάτων

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

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

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

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

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

Κατανεμημένα Συστήματα Ι

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

ÏÌÉÊÑÏÍ ÖÑÏÍÔÉÓÔÇÑÉÏ ÊÏÑÄÅËÉÏ

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Αλγόριθµοι Οπισθοδρόµησης

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

α. Λογικό διάγραμμα είναι η μέθοδος που χρησιμοποιεί απλά σχήματα που υποστηρίζονται με απλές λέξεις για την αναπαράσταση συγκεκριμένων λειτουργιών.

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

Transcript:

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

Δυναμική Δημιουργία Εργασιών Αλγόριθμοι συνδυαστικής αναζήτησης (πρόβλημα του περιοδεύοντος πωλητή), αλγόριθμοι αναζήτησης γραφημάτων (πρόβλημα συντομότερου μονοπατιού) Δυναμική ανάθεση των εργασιών στους επεξεργαστές

Αντίγραφα Εργαζομένων σε Παράλληλο Σύστημα Διαμοιραζόμενης Μνήμης Διεργασίες-εργαζόμενοι Δυναμική ανάθεση υπολογιστικών εργασιών Δεξαμενή εργασίας (κανάλια)

Βασικά χαρακτηριστικά αλγορίθμων Αντιγράφων Εργαζομένων Δυναμική δημιουργία νέων υπολογιστικών εργασιών Έλεγχος για συμφόρηση των καναλιών της δεξαμενής περιορισμός του αριθμού των διεργασιών Εξισορρόπηση φορτίου απασχόληση των διεργασιών-εργαζομένων Τερματισμός της λειτουργίας των διεργασιών

Αντίγραφα Εργαζομένων

Λειτουργικότητα Δεξαμενής Εργασίας Άγνωστο πλήθος υπολογιστικών εργασιών Κάθε εργαζόμενος μπορεί να δημιουργήσει νέες υπολογιστικές εργασίες

Υλοποίηση των Αντιγράφων Εργαζομένων σε Π.Σ.Δ.Μ. Δημιουργία διεργασιών-εργαζόμενων με Forall Η διεργασία-εργαζόμενος: αποτελείται από ένα βρόχο που καλεί την GetWork πιθανότατα καλεί την PutWork έχει πρόσβαση σε διαμοιραζόμενες δομές δεδομένων Η περιγραφή εργασίας μπορεί να έχει τη μορφή: δομής εγγραφής, πίνακα, απλής τιμής δεδομένων Η δεξαμενή εργασίας: υλοποιείται με μεταβλητέςκανάλια

Θέματα που προκύπτουν κατά τον προγραμματισμό των Αντιγράφων Εργαζομένων Συμφόρηση Εξισορρόπηση φορτίου Μερική αποκέντρωση της δεξαμενής εργασίας Τερματισμός: Άδεια δεξαμενή εργασίας Αδρανείς διεργασίες-εργαζόμενοι

Προσανατολισμένο Γράφημα με Βάρη στις Ακμές Πίνακας Weight inf 4 8 inf inf inf inf 3 1 inf inf inf inf inf 5 inf inf 2 inf 10 inf inf inf inf inf Αρίθμηση Κόμβων: Α=1, Β=2, C=3, D=4, E=5

Ακολουθιακός Αλγόριθμος Συντομότερου Μονοπατιού Initialize mindist array to infinity; Initialize queue to contain source vertex 1; mindist[1]:= 0; While queue is not empty do Begin x:= head of queue; For w:= 1 to n do Begin newdist:= mindist[x]+weight[x,w]; If newdist < mindist[w] then Begin mindist[w]:= newdist; If w not in queue then append w to queue End; End; End;

Παράλληλος Αλγόριθμος Συντομότερου Μονοπατιού PROGRAM Shortpath; CONST TYPE VAR n= ; (*Αριθμός των κόμβων*) numworkers= ; (*Αριθμός των διεργασιών Εργαζομένων*) infinity=32000; worktype= INTEGER; (*Κάθε στοιχείο στη Δεξαμενή Εργασίας είναι ένας αριθμός κόμβου*) weight: ARRAY [1..n,1..n] OF INTEGER; i,j: INTEGER; mindist: ARRAY [1..n] OF INTEGER; (*Ελάχιστη απόσταση προς κάθε κόμβο*) L: ARRAY [1..n] OF SPINLOCK; inflag: ARRAY [1..n] OF BOOLEAN; (*Αληθής αν ο κόμβος βρίσκεται στην Δεξαμενή Εργασίας*) startvertex: worktype; PROCEDURE Getwork(me: INTEGER; VAR item: worktype); (*Δέχεται ενα περιγραφέα εργασίας στο item *) PROCEDURE Putwork(me: INTEGER; item: worktype); (*Πρόσθεση του item στη Δεξαμενή Εργασίας*) ( Συνεχίζεται)

Παράλληλος Αλγόριθμος Συντομότερου Μονοπατιού PROCEDURE Worker(me: INTEGER); ( Συνέχεια) VAR vertex: worktype; w,newdist: INTEGER; BEGIN Getwork(me, vertex); (*Λαμβάνω έναν νέο αριθμό κόμβου για εξέταση*) WHILE vertex <> -1 DO BEGIN inflag[vertex]:= FALSE; (*Ο κόμβος αφαιρείται από τη Δεξαμενή Εργασίας*) FOR w:= 1 TO n DO BEGIΝ (*Επεξεργασία όλων των εξερχόμενων ακμών του vertex *) IF weight[vertex, w] < infinity THEN BEGIN (*Ελέγχουμε αν αυτό είναι ένα συντομότερο μονοπάτι προς τον w*) newdist:= mindist[vertex]+weight[vertex,w]; Lock(L[w]); (*Αμοιβαίος αποκλεισμός στο mindist[w] *) IF newdist < mindist[w] THEN (*Κλείδωμα*) BEGIN mindist[w]:= newdist; (*Ενημέρωση της απόστασης σε w *) Unlock(L[w]); IF not inflag[w] THEN BEGIN (*Αν το w δεν υπάρχει στη Δεξαμενή Εργασίας*) inflag[w]:= TRUE; Putwork(me,w); (*Τοποθέτηση του w στη Δεξαμενή*) ( Συνεχίζεται)

Παράλληλος Αλγόριθμος Συντομότερου Μονοπατιού ( Συνέχεια) END ELSE Unlock(L[w]); (*Ξεκλείδωμα*) (*IF*) (*FOR*) Getwork(me,vertex); (*Παίρνω νέο αριθμό κόμβου*) (*WHILE*) BEGIN (*Κυρίως πρόγραμμα*) (*Ανάγνωση των τιμών για τον πίνακα weight*) FOR i:= 1 TO n DO BEGIN(*Αρχικοποίηση των mindist και inflag*) mindist[i]:= infinity; inflag[i]:= FALSE; mindist[startvertex]:= 0; inflag[startvertex]:= TRUE; FORALL i:= 1 TO numworkers DO (*Δημιουργία των Αντιγράφων Εργαζομένων*) Worker(i); (*Τελικές απαντήσεις που βρίσκονται στον πίνακα mindist *) END.

Συνθήκες Τερματισμού Προγράμματος Αντιγράφων Εργαζομένων (Replicated Workers) Η δεξαμενή εργασίας είναι άδεια Όλες οι διεργασίες-εργαζόμενοι είναι αδρανείς

Υλοποίηση των Getwork, Putwork PROGRAM Shortpath; CONST numworkers= ; TYPE worktype= INTEGER; VAR workpool: CHANNEL OF worktype; count: INTEGER; (*Μετρητής της Δεξαμενής Εργασίας*) M: SPINLOCK; startvertex: worktype; (..Συνεχίζεται)

Υλοποίηση των Getwork, Putwork (..Συνέχεια) PROCEDURE Getwork(me: INTEGER; VAR item: worktype); VAR workcount: INTEGER; BEGIN Lock(M); (*Πρώτη ανάγνωση και μείωση του μετρητή της Δεξαμενής Εργασίας*) workcount:= count-1; count:= workcount; Unlock(M); IF workcount=-numworkers THEN BEGIN (*Τερματισμός των Εργαζομένων*) END item:= -1; FOR i:= 1 TO numworkers-1 DO workpool:= item; ELSE item:= workpool; (*Ανάγνωση ενός αντικειμένου από την Δεξαμενή Εργασίας*) (..Συνεχίζεται)

Υλοποίηση των Getwork, Putwork (..Συνέχεια) PROCEDURE Putwork(me: INTEGER; item; worktype); VAR workcount: INTEGER; BEGIN Lock(M); count:= count+1; (*Αύξηση του μετρητή της Δεξαμενής Εργασίας*) Unlock(M); workpool:= item; (..Συνεχίζεται)

Υλοποίηση των Getwork, Putwork (..Συνέχεια) PROCEDURE Worker(me: INTEGER);... (*Διεργασία Worker-δες σχήμα 10.3*) BEGIN (*Κυρίως πρόγραμμα*) count:= 1; startvertex:= 1; workpool:= startvertex; (*Ο κόμβος αφετηρία 1 στη Δεξαμενή Εργασίας*) (*Άλλες αρχικοποιήσεις όπως και στο σχήμα 10.3*) FORALL i:= 1 TO numworkers DO END. Worker(i);

Δεξαμενή Εργασίας Πολλαπλών Καναλιών

Μετρητές Τερματισμού

Υλοποίηση Πολλαπλών Καναλιών των Δεξ. Εργασίας Getwork(me,item); Compute my channel number in the Work Pool; Decrement counter for the channel; If counter= -Worker_Group_Size then Begin (*Η δική μου Ομάδα Εργαζομένων είναι τώρα αδρανής*) Increment master counter; If master counter= number_of_worker_groups then (*Αποστολή ενός μηνύματος τερματισμού σε κάθε εργαζόμενο*) End; For i:= 1 to number_of_worker_groups do For j:= 1 to Worker_Group_Size do Read a task descriptor from my channel into item ; Put a termination flag into channel of Worker Group i; Putwork(me, item) Move my pointer to the next channel in Work Pool; Increment counter for the target channel; If counter= -Worker_Group_Size+1 then Decrement master counter; (*Η αδρανής Ομάδα Εργαζομένων είναι τώρα ενεργή*) Write item into the target channel;

Δεξαμενή εργασίας χωρίς συμφόρηση PROGRAM Shortpath; CONST num_worker_groups= 5; worker_group_size= 10; numworkers= num_worker_groups*worker_group_size; TYPE worktype= INTEGER; VAR workpool: ARRAY [1..num_worker_groups] OF CHANNEL OF worktype; count: ARRAY [1..num_worker_groups] OF INTEGER; CL: ARRAY [1..num_worker_groups] OF SPINLOCK; mastercount: INTEGER; M: SPINLOCK; nextchan: ARRAY [1..numworkers] OF INTEGER; i,j: INTEGER; startvertex: worktype; (Συνεχίζεται )

Δεξαμενή εργασίας χωρίς συμφόρηση PROCEDURE Getwork(me: INTEGER; VAR item: worktype); VAR worksount,emptycount,mychan: INTEGER; BEGIN mychan:= (me-1) DIV worker_group_size + 1; (*Ο αριθμός καναλιού*) Lock(CL[mychan]); workcount:= count[mychan] - 1; (*Μείωση του count*) count[mychan]:= workcount; Unlock(CL[mychan]); IF workcount=-worker_group_size THEN BEGIN (*Η Ομάδα Εργαζομένων είναι αδρανής*) Lock(M); emptycount:= mastercount+1; (*Αύξηση του mastercount*) mastercount:= emptycount; Unlock(M); IF emptycount=num_worker_groups THEN BEGIN (*Τερματισμός όλων των Εργαζομένων*) FOR i:= 1 TO num_worker_grours DO FOR j:= 1 TO worker_group_size DO workpool[i]:= -1; item:= workpool[mychan]; (Συνεχίζεται )

Δεξαμενή εργασίας χωρίς συμφόρηση PROCEDURE Putwork(me: INTEGER; item: worktype); VAR workcount,emptycoun,next: INTEGER; BEGIN next:= nextchan[me]; (*Λαμβάνω τον αριθμό του καναλιού προορισμού*) Lock(CL[next]); workcount:= count[next]+1; (*Αύξηση του count*) count[next]:= workcount; Unlock(CL[next]); IF workcount= -worker_group_size+1 THEN BEGIN Lock(M); emptycount:= mastercount-1; (*Μείωση του mastercount*) mastercount:= emptycount; Unlock(M); workpool[next]:= item; (*Εγγραφή αντικειμένου στη Δεξαμενή Εργασίας*) nextchan[me]:= next MOD num_worker_groups+1; (*Επόμενος προορισμός*) (Συνεχίζεται )

Δεξαμενή εργασίας χωρίς συμφόρηση PROCEDURE Worker(me: INTEGER); VAR BEGIN nextchan[me]:= (me-1) DIV worker_group_size+1; (*Η διεργασία Worker ίδια με αυτή του σχήματος 10.3*) BEGIN (*Κυρίως πρόγραμμα*) startvertex:= 1; workpool[1]:= startvertex; (*Ο κόμβος αφετηρία 1 μέσα στη Δεξαμενή Εργασίας*) (*Αρχικοποίηση όλων των αθροιστών*) count[1]:= 1; FOR i:= 2 To num_worker_groups DO count[i]:= 0; mastercount:= 0; (*Άλλες αρχικοποιήσεις όπως και στο σχήμα 10.3*) FORALL i:= 1 TO numworkers DO Worker(i); END.

Περιοχή Επίθεσης Της Βασίλισσας

Λύση για 7 βασίλισσες

Περιγραφή του προβλήματος των Ν βασιλισσών Worker process; Getwork(myboard); (*Παίρνω μια νιάδα από την Δεξαμενή Εργασίας*) While myboard <> Doneflag Do Begin If myboard.len= n then A Solution is Found Else Begin newrow:= len+1; For col:= 1 to n Do Begin Is position (newrow,col) attacked by any of the previous Queens on myboard? End; If answer is no then Begin create newboard by adding Queen in position End; Getwork(myboard); End; End; (newrow,col);

(Συνεχίζεται ) Πρόγραμμα Ν Βασιλισσών για Διαμοιραζόμενη Μνήμη PROGRAM Nqueens; CONST n= 8; (*Αριθμός των Βασιλισσών*) num_worker_groups= 5; worker_group_size= 6; numworkers= num_worker_groups*worker_group_size; TYPE board= ARRAY [1..n] OF INTEGER; worktype= RECORD len: INTEGER; (*Αριθμός των τρεχουσών βασιλισσών*) queens: board; (*θέσεις των βασιλισσών*) VAR workpool: ARRAY [1..num_worker_groups] OF CHANNEL OF worktype; i: INTEGER; startitem: worktype; solutions: CHANNEL OF board; (*Συλλέγει τις τελικές λύσεις*) (*Δηλώσεις αθροιστών της Δεξαμενής Εργασίας όπως και στο σχήμα 10.7*) PROCEDURE Getwork(me: INTEGER; VAR item: worktype); (*Ίδια όπως και στο σχήμα 10.7*) PROCEDURE Putwork(me: INTEGER; item: worktype); (*Ίδια όπως και στο σχήμα 10.7*)

Πρόγραμμα Ν Βασιλισσών για Διαμοιραζόμενη Μνήμη PROCEDURE Worker(me: INTEGER); VAR myboard: worktype; row,col,coldist,rowdist: INTEGER; samecol,samediag,ok: BOOLEAN; BEGIN Getwork(me,myboard); WHILE myboard.len <> -1 DO BEGIN WITH myboard DO IF len= n THEN solutions:= myboard.queens ELSE BEGIN (*Πρόσθεση νέας βασίλισσας στην σκακιέρα*) len:= len + 1; FOR col:= 1 TO n DO BEGIN (*Έλεγχος αν μπορούμε να τοποθετήσουμε την βασίλισσα σε αυτή την στήλη*) ok:= true; FOR row:= 1 TO len-1 DO BEGIN rowdist:= Abs(len-row); coldist:= Abs(col-queens[row]); samecol:= coldist= 0; samediag:= coldist= rowdist; IF samecol OR samediag THEN ok:= false; (Συνεχίζεται )

Πρόγραμμα Ν Βασιλισσών για Διαμοιραζόμενη Μνήμη IF ok THEN BEGIN queens[len]:= col; Putwork(me, myboard); (*Πρόσθεση νέου αντικειμένου στην Δεξαμενή Εργασίας*) Getwork(me, myboard); (*Νέο αντικείμενο για εξέταση*) (*Worker*) BEGIN (*Κυρίως πρόγραμμα*) startitem.len:= 0; workpool[1]:= statritem; (*Αρχικοποίηση της Δεξαμενής Εργασίας με την άδεια σκακιέρα*) (*Αρχικοποίηση των αθροιστών της Δεξαμενής Εργασίας όπως και στο σχήμα 10.7*) FORALL i:= 1 TO numworkers DO Worker(i); (*Δημιουργία των εργαζομένων*) (*Όλες οι απαντήσεις βρίσκονται στο κανάλι solutions *) END.