ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Σχετικά έγγραφα
ΣΥΣΤΗΜΑΤΑ ΠΑΡΑΛΛΗΛΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ 9o εξάμηνο ΗΜΜΥ, ακαδημαϊκό έτος

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ. Άσκηση 5: Παράλληλος προγραμματισμός σε επεξεργαστές γραφικών

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Παρουσίαση 2 ης Άσκησης:

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Παρουσίαση 1 ης Άσκησης:

All Pairs Shortest Path

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

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

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

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

Εισαγωγή στην πληροφορική

Πρόβλημα 37 / σελίδα 207

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015

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

Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) 2008

3 η ΑΣΚΗΣΗ. Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών

Παράλληλη Επεξεργασία

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ ÊÁËÁÌÁÔÁ

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Παρουσίαση 2 ης Άσκησης:

Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού Πολυπλοκότητα

ΑΕΠΠ Ερωτήσεις θεωρίας

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

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Συντομότερες Διαδρομές

Παράλληλη Επεξεργασία Εργαστηριακή Ασκηση Εαρινού Εξαµήνου 2008

Επαναληπτική δοκιμασία στην Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Απρίλης 2015

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Παρουςίαςθ 2 θσ Άςκθςθσ:

1. Ουρά α. Απώθηση 2. Στοίβα β. Εξαγωγή γ. Ώθηση δ. Εισαγωγή

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

Για τις λύσεις των προβλημάτων υπάρχει τρόπος εκτίμησης της επίδοσης (performance) και της αποδοτικότητας (efficiency). Ερωτήματα για την επίδοση

Δυναµικός Προγραµµατισµός (ΔΠ)

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Α. Ερωτήσεις Ανάπτυξης

1. Ουρά α. Απώθηση 2. Στοίβα β. Εξαγωγή γ. Ώθηση δ. Εισαγωγή

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Διάρκεια 3 ώρες. Όνομα... Επώνυμο... Βαθμός...

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 7 ο Εργαστήριο. Διανύσματα-Πίνακες 2 ο Μέρος

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

1. Ουρά α. Απώθηση 2. Στοίβα β. Εξαγωγή γ. Ώθηση δ. Εισαγωγή

Συντομότερες ιαδρομές

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

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Η πολυνηματική γλώσσα προγραμματισμού Cilk

Συντομότερες Διαδρομές

ΠΕΡΙΕΧΟΜΕΝΑ. Μονοδιάστατοι πίνακες Πότε πρέπει να χρησιμοποιούνται πίνακες Πολυδιάστατοι πίνακες Τυπικές επεξεργασίες πινάκων

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

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

ΠΕΡΙΕΧΟΜΕΝΑ Υλικό και Λογισμικό Αρχιτεκτονική Υπολογιστών Δομή, Οργάνωση και Λειτουργία Υπολογιστών 6

Προγραμματισμός ΙI (Θ)

Μελέτη και Υλοποίηση Αλγορίθμων για Βιολογικές Εφαρμογές σε MapReduce Περιβάλλον

Θέματα Μεταγλωττιστών

Προγραμματισμός Ι (HY120)

Παράλληλος Προγραμματισμός με OpenCL

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

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

Εγχειρίδιο του Accerciser, έκδοση 0.2.0

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

ΘΕΜΑ Α. Λύση: 1. Σωστό, 2. Λάθος, 3. Σωστό, 4. Λάθος, 5. Λάθος. Ποια η διαφορά μεταξύ διερμηνευτή και μεταγλωττιστή; Απάντηση:

Μεθόδων Επίλυσης Προβλημάτων

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βήματα προς τη δημιουργία εκτελέσιμου κώδικα

Θέματα ΑΕΠΠ Πανελλήνιες Εξετάσεις 2008

Επιµέλεια Θοδωρής Πιερράτος

1. Δεν μπορεί να γίνει κλήση μίας διαδικασίας μέσα από μία συνάρτηση.

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

ΘΕΜΑ 1 ο. Στήλη Β Προτάσεις. β. Ο βρόχος επανάληψης τερµατίζεται, όταν η συνθήκη είναι αληθής. όταν η συνθήκη είναι ψευδής.

Graph Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι Αλγόριθμοι» Καούρη Γεωργία Μήτσου Βάλια

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Συντομότερες ιαδρομές

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

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

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ 2002

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

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗΝ Α.Ε.Π.Π. Γ ΤΕΧΝΟΛΟΓΙΚΗΣ. Όνομα:.. Βαθμός: /100

Εισαγωγή στην πληροφορική

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ (ΝΕΟ ΣΥΣΤΗΜΑ) 27 ΜΑΪΟΥ 2016 ΕΚΦΩΝΗΣΕΙΣ

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ 2002

Transcript:

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ www.cslab.ece.ntua.gr Συστήματα Παράλληλης Επεξεργασίας 2013 2014 Άσκηση 3: Παράλληλος προγραμματισμός σε επεξεργαστές γραφικών Προθεσμίες παράδοσης Επίδειξη προγραμμάτων Ημ/νία εξέτασης Τελική αναφορά Πέρας εξεταστικής 1 Εύρεση ελαχίστων μονοπατιών σε γράφο Το πρόβλημα της εύρεσης των ελαχίστων μονοπατιών μεταξύ όλων των κόμβων ενός γράφου (All- Pairs Shortest Path APSP) εμφανίζεται σε σειρά εφαρμογών που κάνουν χρήση αναπαραστάσεων γράφων, όπως δίκτυα επικοινωνιών, μεταφορών κ.ά. Δεδομένου ενός σταθμισμένου κατευθυνόμενου γράφου G = (V, E) με συνάρτηση βάρους w : E R, το πρόβλημα APSP ορίζεται ως η ανεύρεση του μονοπατιού με το ελάχιστο βάρος για κάθε ζεύγος u, v V. Ως βάρος ενός μονοπατιού u v ορίζεται το άθροισμα των βαρών των ακμών που απαρτίζουν το μονοπάτι. Η λύση του προβλήματος απαιτείται συνήθως σε μορφή πίνακα V V, όπου η εγγραφή στην γραμμή u και στήλη v αποτελεί το βάρος του ελαχίστου μονοπατιού από τον κόμβο u στον v. 1.1 Ο αλγόριθμος Floyd-Warshall Ο αλγόριθμος Floyd-Warshall επιλύει το πρόβλημα APSP βασιζόμενος στην ιδέα του δυναμικού προγραμματισμού σε χρόνο Θ( V 3 ). Επιτρέπονται ακμές με αρνητικό βάρος, αρκεί να μην υπάρχουν κύκλοι με συνολικό αρνητικό βάρος. Η ιδέα του αλγορίθμου Floyd-Warshall βασίζεται στην παρατήρηση ότι εάν ένας κόμβος βρίσκεται στο ελάχιστο μονοπάτι p ij από τον κόμβο i στον κόμβο j, τότε και τα μονοπάτια p i και p j είναι ελάχιστα. Η απλή μορφή του Floyd-Warshall παρουσιάζεται στον Αλγόριθμο 1, όπου W είναι ο αρχικός πίνακας γειτνίασης του γράφου G, ο οποίος στο πέρας του αλγορίθμου περιέχει τις ελάχιστες αποστάσεις μεταξύ όλων των κόμβων. 1.2 Θέματα επίδοσης Η πολυπλοκότητα του αλγορίθμου Floyd-Warshall είναι σημαντική και η απλοϊκή του μορφή (Αλγόριθμος 1) δυσχεραίνει την εκτέλεσή του σε σύγχρονες αρχιτεκτονικές με κρυφή μνήμη, παρά την ύπαρξη χρονικής τοπικότητας (επαναλήξεις για κάθε ), καθώς το σχήμα πρόσβασης στον πίνακα W δεν ευνοεί την χωρική τοπικότητα. Για τον λόγο αυτό έχει προταθεί η υλοποίηση με χρήση ψηφίδων (tiles), η οποία επιτυγχάνει σημαντική βελτίωση στην επίδοση του αλγορίθμου σε σύγχρονες αρχιτεκτονικές υπολογιστών. Ο Αλγόριθμος 2 παρουσιάζει την «tiled» εκδοχή του αλγορίθμου Floyd- Warshall. 1/6

1: procedure FLOYDWARSHALL(W::inout, N::in) W: N N πίνακας γειτνίασης N: πλήθος κόμβων 2: for 1 to N do 3: for i 1 to N do 4: for j 1 to N do 5: w ij min(w ij, w i + w j ) 6: end for 7: end for 8: end for Αλγόριθμος 1: Ο αλγόριθμος Floyd-Warshall για την επίλυση του προβλήματος APSP. 1: procedure FWI(A::inout, B::in, C::in, N::in) A, B, C: N N υποπίνακες γειτνίασης N: πλήθος κόμβων 2: for 1 to N do 3: for i 1 to N do 4: for j 1 to N do 5: a ij min(a ij, b i + c j ) 6: end for 7: end for 8: end for 9: procedure FLOYDWARSHALLTILED(W::inout, N::in, B::in) W: N N πίνακας γειτνίασης N: πλήθος κόμβων B: μέγεθος «tile» 10: T εξαγωγή «tiles» 11: for 1 to N B do 12: FWI(T, T, T, B) 13: for i 1 to N B do 14: if i then 15: FWI(T i, T i, T, B) 16: FWI(T i, T, T i, B) 17: end for 18: for i 1 to N B do 19: if i = then 20: continue 21: for j 1 to N B do 22: if j then 23: FWI(T ij, T i, T j, B) 24: end for 25: end for 26: end for Αλγόριθμος 2: Η «tiled» έκδοση του αλγορίθμου Floyd-Warshall. Ο υπολογισμός χωρίζεται σε τρεις φάσεις, κάθε μία από τις οποίες μπορεί να εκτελεστεί παράλληλα. H συνάρτηση FWI υπολογίζει το APSP για τον πίνακα A βασιζόμενο στις τιμές των B και C. Προφανώς, FWI(W,W,W,N) = FLOYDWARSHALL(W,N). 2/6

(αʹ) Πρώτη φάση i i i (βʹ) Δεύτερη φάση j (γʹ) Τρίτη φάση Σχήμα 1: Οι τρεις φάσεις της «tiled» έκδοσης του αλγορίθμου Floyd-Warshall. H υλοποίηση του Floyd-Warshall με χρήση «tiles» χωρίζεται σε τρεις φάσεις, ο οποίες απεικονίζονται σχηματικά στο Σχήμα 1: 1. υπολογισμός του APSP για το «tile» T, 2. υπολογισμός του APSP για τα «tiles» Ti και T βάσει του T, 3. υπολογισμός του APSP για τα υπόλοιπα «tiles» Tij βάσει των Ti και Tj. Με εξαίρεση την πρώτη φάση, το μέγεθος του συνόλου εργασίας του αλγορίθμου Floyd-Warshall σε κάθε φάση είναι ίσο με το μέγεθος τριών «tiles». Εάν φροντίσουμε το μέγεθος των «tiles» έτσι, ώστε τρία από αυτά να χωρούν στην κρυφή μνήμη L1 του επεξεργαστή, θα έχουμε πετύχει σημαντική βελτίωση της χωρικής τοπικότητας του αλγορίθμου με αντίστοιχα ωφέλη και στην επίδοσή του. 1.3 Παραλληλοποίηση Η παραλληλοποίηση του απλού αλγορίθμου Floyd-Warshall είναι αρκετά ευθεία, καθώς οι δύο εσωτερικοί βρόχοι μπορούν να εκτελεστούν παράλληλα με τον υπολογισμό να συγχρονίζεται στο τέλος κάθε επανάληψης του εξωτερικού βρόχου. Η παραλληλοποίηση της «tiled» έκδοσης του αλγορίθμου είναι και αυτή αρκετά εύκολη, αρκεί να τηρηθεί η σειρά των φάσεων που περιγράψαμε προηγουμένως. Αυτο απαιτεί ένα καθολικό συγχρονισμό των νημάτων (barrier) μετά το πέρας κάθε φάσης. 2 Υλοποίηση Floyd-Warshall σε επεξεργαστές γραφικών (GPUs) Στην άσκηση αυτή θα πρέπει να υλοποιήσετε τον αλγόριθμο Floyd-Warshall για τους επεξεργαστές γραφικών του εργαστηρίου. Ξεκινώντας από μία απλοϊκή αρχική υλοποίηση, στο τέλος της άσκησης θα έχετε πετύχει μία αρκετά αποδοτική υλοποίηση του αλγορίθμου για τους επεξεργαστές γραφικών. 2.1 Βασική υλοποίηση Υλοποιήστε τον απλή έκδοση του αλγορίθμου Floyd-Warshall (Αλγόριθμος 1) για τους επεξεργαστές γραφικών χρησιμοποιώντας το προγραμματιστικό περιβάλλον CUDA. Πειραματιστείτε με μονοδιάστατα και δισδιάστατα μπλοκ και σχολιάστε την επίδοση. Εκτελέστε το πρόγραμμά σας για διάφορα μεγέθη γράφων εισόδου, με πλήθος ακμών από 1024 έως 8192. Πώς διακυμαίνεται η επίδοση; Πόσο καλύτερος είναι ο κώδικάς σας από την «tiled» υλοποίηση του Floyd-Warshall με OpenMP? Εάν κάποιος το επιθυμεί, μπορεί να υλοποιήσει την άσκηση και σε OpenCL. Ο λόγος που χρησιμοποιήσαμε CUDA οφείλεται στο γεγονός ότι έχει πιο απλό και εύκολο στη χρήση API. 3/6

2.2 Tiled υλοποίηση Υλοποιήστε την «tiled» εκδοχή του αλγορίθμου Floyd-Warshall (Αλγόριθμος 2) για τους επεξεργαστές γραφικών κάνοντας χρήση μόνο της κύριας μνήμης. Πόσοι διαφορετικοί πυρήνες απαιτούνται τουλάχιστον για την υλοποίηση; Εκτελέστε το πρόγραμμά σας για διάφορα μεγέθη γράφων εισόδου, με πλήθος ακμών από 1024 έως 8192. Πώς διακυμαίνεται η επίδοση; Πόσο καλύτερος είναι τώρα ο κώδικάς σας από την «tiled» υλοποίηση του Floyd-Warshall με OpenMP? 2.3 Χρήση της μοιραζόμενης on-chip μνήμης Υλοποιήστε την «tiled» εκδοχή του αλγορίθμου Floyd-Warshall (Αλγόριθμος 2) για τους επεξεργαστές γραφικών κάνοντας χρήση της μοιραζόμενης on-chip μνήμης ανά SM, ώστε να μειώσετε τις προσβάσεις στην κύρια μνήμη. Ποια δεδομένα απαιτούνται σε κάθε φάση για τον υπολογισμό του APSP? Ποιο είναι το ιδανικό μέγεθος «tile»; Τι περιορισμοί προκύπτουν; Εκτελέστε το πρόγραμμά σας για διάφορα μεγέθη γράφων εισόδου, με πλήθος ακμών από 1024 έως 8192. Πώς διακυμαίνεται η επίδοση; Πόσο καλύτερος είναι τώρα ο κώδικάς σας από την «tiled» υλοποίηση του Floyd-Warshall με OpenMP? 3 Υποδείξεις και διευκρινίσεις 3.1 Δομή κώδικα Για την διευκόλυνσή σας, αλλά και για να υπάρχει ένας κοινός τρόπος μέτρησης του χρόνου εκτέλεσης, σας δίνετε πλήρης και λειτουργικός σκελετός του κώδικα της άσκησης, καθώς και οι ρουτίνες των διαφορετικών εκδόσεων Floyd-Warshall με χρήση OpenMP. Ο κώδικας που σας παρέχετε αποτελείται από τέσσερα (4) μέρη: Κυρίως πρόγραμμα: Πρόκειται για το αρχείο apsp_main.c, το οποίο περιέχει την συνάρτηση main() του προγράμματος, η οποία είναι υπεύθυνη (αʹ) για την ανάγνωση των ορισμάτων της γραμμής εντολών και των μεταβλητών περιβάλλοντος, (βʹ) για την δημιουργία του γράφου εισόδου, (γʹ) για την εκτέλεση και χρονομέτρηση του εκάστοτε πυρήνα (CPU ή GPU), (δʹ) για τον έλεγχο της εγκυρότητας των αποτελεσμάτων. Υλοποίηση του γράφου: Πρόκειται για τα αρχεία graph.h και graph.c. Περιέχουν όλες τις λειτουργίες σχετικά με την δομή του γράφου (κατασκευή, αντιγραφή, καταστροφή κ.λπ.), καθώς επίσης και τις υλοποιήσεις (απλή και «tiled») του Floyd-Warshall για τις CPUs. Πυρήνες για CPU: Πρόκειται για το αρχείο cpu_ernels.c, το οποίο υλοποιεί απλά την κοινή διεπαφή κλήσης πυρήνων (βλ. apsp_ernel_fn_t στο αρχείο graph.h). Εσωτερικά, καλεί τις κατάλληλες ρουτίνες που ορίζονται στο graph.c. Πυρήνες για GPU: Πρόκειται για το αρχείο gpu_ernels.cu, το οποίο περιέχει τις υλοποιήσεις των πυρήνων για GPUs σε συνδυασμό με ό,τι απαραίτητο χρειάζεται για την κλήση τους (καταχώρηση μνήμης στην GPU, αντιγραφή από/προς την GPU, ρύθμιση παραμέτρων πυρήνα, κ.λπ.). Βοηθητικές συναρτήσεις: Πρόκειται για τα αρχεία alloc.c, error.c, timer.c και gpu_util.cu, τα οποία περιέχουν βοηθητικές συναρτήσεις για δυναμική παραχώρηση μνήμης δισδιάστατου πίνακα, χειρισμού λαθών, χρονομέτρησης και χειρισμού των GPUs, αντίστοιχα. 4/6

Σας παρέχετε επιπλέον και το κατάλληλο Maefile για την μεταγλώττιση και την σύνδεση του κώδικά σας. Πληκτρολογείστε mae help, ώστε να δείτε τις διάφορες επιλογές που σας δίνονται κατά την μεταγλώττιση. Τα σημεία του κώδικα, στα οποία θα πρέπει να επέμβετε είναι σημειωμένα με την επιγραφή FILLME: μαζί με μία σύντομη περιγραφή. Οι ζητούμενες προσθήκες θα γίνουν επί της ουσίας μόνο στο αρχείο gpu_ernels.cu. Τέλος, για να δείτε τον τρόπο χρήσης του τελικού εκτέλεσιμου, εκτελέστε./apsp_main από την γραμμή εντολών και θα παρουσιαστεί ένα σύντομο μήνυμα βοήθειας για την σωστή χρήση του. 3.2 Περιβάλλον και διαδικασία ανάπτυξης Στo εργαστήριο Στο εργαστήριο η διαδικασία ανάπτυξης της άσκησης χωρίζεται σε δύο φάσεις: 1. Στην φάση ανάπτυξης και αποσφαλμάτωσης (debugging) και 2. στην φάση δοκιμών και πειραμάτων στους επεξεργαστές γραφικών. Κατά την διάρκεια της πρώτης φάσης μπορείτε να δουλεύετε στα clones (όπως στις προηγούμενες ασκήσεις), όπου υπάρχει εγκατεστημένο το περιβάλλον ανάπτυξης CUDA 2.3. Ωστόσο, τα clones δεν έχουν κάρτα γραφικών, οπότε θα πρέπει να μεταγλωττίζετε και να εκτελείτε κατάλληλα τον κώδικά σας για λειτουργία εξομοίωσης (emulation mode). Αυτό μπορείτε να το πετύχετε εύκολα σε κάποιο clone, εκτελώντας απλά mae EMU=1. Ο λόγος ύπαρξης αυτής της φάσης είναι καθαρά για έλεγχο λαθών στις υλοποιήσεις σας οι επιδόσεις των πυρήνων για GPU σε λειτουργία εξομοίωσης δεν έχουν καμία σχέση με την πραγματικότητα, οπότε μην προσπαθήσετε να ερμηνεύσετε τα αποτελέσματα. Κατά την δεύτερη φάση της υλοποίησης θα τρέξετε τον κώδικά σας σε μηχάνημα του εργαστηρίου με εγκατεστημένη κάρτα γραφικών γενιάς 2.0 (NVIDIA Tesla M2050, αρχιτεκτονική Fermi). Για περισσότερες πληροφορίες σχετικά με τα λεπτομερή τεχνικά χαρακτηριστικά της GPU, πληκτρολογείστε mae query όντας σε ένα μηχάνημα termi. Στο σπίτι Μπορείτε να δουλεύετε και στο δικό σας σύστημα είτε με χρήση της λειτουργίας εξομοίωσης, όπως στα clones, είτε εάν έχετε CUDA-enabled κάρτα γραφικών απευθείας στην κάρτα γραφικών σας. Εάν πρόκειται να χρησιμοποιήσετε την λειτουργίας εξομοίωσης, ωστόσο, σας προτείνουμε να χρησιμοποιήσετε το περιβάλλον ανάπτυξης CUDA 2.3, καθότι στις επόμενες εκδόσεις η υποστήριξη της συγκεκριμένης λειτουγίας έχει εγκαταλειφθεί. Εναλλακτικά, θα πρέπει να δοκιμάσετε άλλου είδους προσομοιωτές επεξεργαστών γραφικών, π.χ., Ocelot. Τέλος, εάν διαλέξετε κάποια δική σας πλατφόρμα για την ανάπτυξη του κώδικά σας, το πιθανότερο είναι να πρέπει να αλλάξετε κάποιες μεταβλητές του Maefile που σας δίνετε. Για περισσότερες πληροφορίες, μπορείτε να επικοινωνήσετε με τους βοηθούς του εργαστηρίου. 4 Πειράματα και μετρήσεις επιδόσεων 4.1 Διαδικασία μετρήσεων Σκοπός των μετρήσεων της άσκησης αυτής είναι η σύγκριση της επίδοσης των τριών εκδόσεων του APSP για GPUs με την έκδοση «tiled» για CPUs. Η κατάλληλη επιλογή του μεγέθους των «tiles» για τις εκδόσεις των GPUs, καθώς και τα μεγέθη και σχήματα των μπλοκ νημάτων αφήνονται ελεύθερα για δικό σας πειραματισμό. Επιλέξατε αυτά που σας δίνουν την καλύτερη επίδοση και προσπαθήστε να εξηγήσετε τους λόγους πίσω από τυχόν διαφορές επίδοσης που παρατηρήσατε. Το μηχάνημα στο οποίο θα εκτελέσετε τα πειράματά σας αποτελείται από δύο επεξεργαστές Intel Xeon X5650 (6 πυρήνες + Η/Τ, συνολικά 12 πυρήνες + Η/Τ) και μία κάρτα γραφικών NVIDIA Tesla M2050 αρχιτεκτονικής Fermi. 5/6

4.2 Μεταγλώττιση Στο Mae le που σας δίνετε, η προεπιλεγμένη ρύθμιση για την μεταγλώττιση είναι σε λειτουργία debug (όλες οι βελτιστοποιήσεις του μεταγλωττιστή απενεργοποιημένες). Για να μετρήσετε τις επιδόσεις των πυρήνων θα πρέπει να απενεργοποιήσετε αυτή την λειτουργία και να μεταγλωττίσετε εξαρχής (mae clean) τον κώδικά σας με mae DEBUG=0. Προσοχή: Όταν απενεργοποιείτε την λειτουργία debug, απενεργοποιείται και ο έλεγχος του αποτελέσματος του πυρήνα για λόγους συντομίας. Επομένως, προτού τρέξετε την τελική έκδοση, θα πρέπει να έχετε σιγουρευτεί ότι ο πυρήνας σας έχει το σωστό αποτέλεσμα. 4.3 Χρήση υπολογιστών εργαστηρίου Η χρήση των υπολογιστών του εργαστηρίου (ουρά clones) για την εκτέλεση της άσκησης θα γίνεται μέσω του συστήματος υποβολής εργασιών Torque, όπως και στις προηγούμενες ασκήσεις. Για την εκτέλεση των μετρήσεων σε πραγματική GPU, θα πρέπει να δεσμεύσετε το κατάλληλο μηχάνημα από το σύστημα Torque ως εξής: $ qsub -q parlab -l nodes=1:ppn=24:cuda myjob.sh 6/6