Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ: ΕΡΓΑΣΤΗΡΙΟ Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών Σαβιολάκης Ιωάννης του Εμμανουήλ Αριθμός Μητρώου: 7117 Θέμα «Αλγόριθμοι Ομαδοποίησης σε γενετικές δομές με OpenMP» Επιβλέπων Αναπληρωτής Καθηγητής κ. Ευάγγελος Δερματάς Αριθμός Διπλωματικής Εργασίας: Πάτρα, Φεβρουάριος

2 2

3 ΠΙΣΤΟΠΟΙΗΣΗ Πιστοποιείται ότι η Διπλωματική Εργασία με θέμα «Αλγόριθμοι Ομαδοποίησης σε γενετικές δομές με OpenMP» Του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Σαβιολάκης Ιωάννης του Εμμανουήλ Αριθμός Μητρώου: 7117 Παρουσιάστηκε δημόσια και εξετάστηκε στο Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών στις.../../ Ο Επιβλέπων Ο Διευθυντής του Τομέα.. 3

4 4

5 Life isn t about finding yourself. Life is about creating yourself. George Bernard Shaw 5

6 Αριθμός Διπλωματικής Εργασίας: Θέμα: «Αλγόριθμοι Ομαδοποίησης σε γενετικές δομές με OpenMP» Φοιτητής: Σαβιολάκης Ιωάννης Επιβλέπων: Δερματάς Ευάγγελος Περίληψη Η εργασία αυτή παρουσιάζει αλγόριθμους ομαδοποίησης σε γενετικές δομές με το πρότυπο παράλληλου προγραμματισμού OpenMP. Στο πρώτο κεφάλαιο, γίνεται μία αναφορά για τις μεγάλες σύγχρονες επιστημονικές προκλήσεις που μας ανάγκασαν να εισάγουμε στην ζωή μας τον παράλληλο προγραμματισμό, καθώς και μία μικρή εισαγωγή στο τι είναι ο παράλληλος προγραμματισμός. Στο δεύτερο κεφάλαιο, εισάγουμε την έννοια του OpenMP. Ακολουθεί μία μικρή ανάλυση πάνω σε αυτό, αναφέροντας το τι είναι, πώς εξελίχθηκε, ποια τα πλεονεκτήματά του και,τέλος, μία εισαγωγή στις εντολές που έχει. Στο τρίτο κεφάλαιο, αναφέρουμε πρώτη φορά την έννοια της ομαδοποίησης. Αναλύουμε τον ορισμό και αναφέρουμε στάδια, τρόπους και εφαρμογές ομαδοποίησης. Τέλος, αναφέρονται τα κριτήρια για την επιλογή του καταλληλότερου αλγορίθμου και την ορθότητα των αποτελεσμάτων. Στο κεφάλαιο 4, αναλύουμε τον αλγόριθμο BLAST πάνω στον οποίο δουλεύουμε. Τον εκτελούμε και παρατηρούμε τις αλλαγές στα αποτελέσματά του. Προσπαθούμε να τον παραλληλοποιήσουμε μέσω OpenMP και τέλος, συγκρίνουμε την επιτάχυνση του παράλληλου και του σειριακού αλγορίθμου. Στο πέμπτο κεφάλαιο, ακολουθούν τα συμπεράσματα καθώς και ιδέες για περαιτέρω έρευνα. 6

7 7

8 Ευχαριστίες Το κείμενο που κρατάτε στα χέρια σας δεν αποτελεί µόνο την τεκμηρίωση της διπλωματικής µου εργασίας, αλλά και το τελευταίο µου βήμα στην πορεία των σπουδών µου, γεγονός που µου δημιουργεί έντονη την ανάγκη να ευχαριστήσω ορισμένους ανθρώπους µε τους οποίους έχω συνδεθεί τα τελευταία 6 χρόνια. Θα ήθελα να ευχαριστήσω ειλικρινά τον επιβλέποντα µου, κ. Ευάγγελο Δερματά, για την ευκαιρία που µου έδωσε να ασχοληθώ µε ένα αντικείμενο του άμεσου ενδιαφέροντός µου. Δεν θα μπορούσα να µην ευχαριστήσω τους αγαπημένους µου φίλους, χωρίς τους οποίους τα τελευταία 6 χρόνια σίγουρα δεν θα ήταν τα ίδια. Η πορεία µας ήταν γεμάτη από γέλιο, λύπη, όμορφες και δύσκολες στιγμές όμως ήταν πάντα κοινή και αυτό έδινε και θα δίνει δύναμη σε όλους µας. Τέλος, δεν μπορώ να µην απευθύνω το μεγαλύτερο ευχαριστώ, από τα βάθη της καρδιάς µου, στην αγαπημένη µου οικογένεια, που όχι µόνο µε στήριξε σε όλη αυτήν την πορεία, αλλά κυρίως αποτέλεσε για µένα πρότυπο, βάση για κάθε µου ξεκίνημα και θερμό υποστηρικτή κάθε µου ιδέας και προσπάθειας. 8

9 ΠΙΝΑΚΑΣ ΕΙΚΟΝΩΝ Εικόνα 1: Σκιτσογραφία παραλληλίας 14 Εικόνα 2: Σειριακή και Παράλληλη επικοινωνία 17 Εικόνα 3: Παράλληλη επεξεργασία 19 Εικόνα 4: Ταξινόμηση κατά Flynn 21 Εικόνα 5: SIMD 21 Εικόνα 6: Κοινή μνήμη 23 Εικόνα 7: OpenMP 23 Εικόνα 8: Παράλληλα τμήματα 25 Εικόνα 9: Fork and Join 26 Εικόνα 10: OpenMP language extensions 41 Εικόνα 11: Ομαδοποίηση 42 Εικόνα 12: Κατηγορίες Clustering 46 Εικόνα 13: Αλγόριθμος k-means 50 Εικόνα 14: Αλγόριθμος BLAST 54 Εικόνα 15: Αλγόριθμος BLAST (2) 55 Εικόνα 16: Κατασκευή λίστας λέξεων 56 Εικόνα 17: MSP & HSP 57 Εικόνα 18: Εικόνες για βήματα BLAST 57 Εικόνα 19: Εικόνα BLAST (1) 63 Εικόνα 20: Εικόνα BLAST (2) 63 Εικόνα 21: Εικόνα BLAST (3) 64 Εικόνα 22: Εικόνα BLAST (4) 64 Εικόνα 23: Header H1N1 64 Εικόνα 24: Graphical overview H1N1 65 Εικόνα 25: Description H1N1 66 Εικόνα 26: Alignments H1N1 67 Εικόνα 27: Header H7N1 68 Εικόνα 28: Graphical overview H7N1 68 Εικόνα 29: Description H7N1 68 Εικόνα 30: Alignments H7N1 69 9

10 ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΛΗΨΗ 6 ΕΥΧΑΡΙΣΤΙΕΣ 8 ΠΙΝΑΚΑΣ ΕΙΚΟΝΩΝ 9 ΚΕΦΑΛΑΙΟ 1: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 1.1: Οι Μεγάλες Σύγχρονες Επιστημονικές Προκλήσεις : Παράλληλος Προγραμματισμός, Μία Νέα Πρόκληση : Σειριακή εναντίον Παράλληλης Επεξεργασίας : Ο Ορισμός Του Παράλληλου Προγραμματισμού 18 ΚΕΦΑΛΑΙΟ 2: ΕΙΣΑΓΩΓΗ ΣΤΟ OPENMP 2.1: Παράλληλα και κατανεμημένα συστήματα : Τί είναι OpenMP; : Μοντέλο προγραμματισμού OpenMP : Ιστορική εξέλιξη : Πλεονεκτήματα : Εντολές OpenMP σε C/C++ 28 ΚΕΦΑΛΑΙΟ 3: ΑΛΓΟΡΙΘΜΟΙ ΟΜΑΔΟΠΟΙΗΣΗΣ 3.1: Ομαδοποίηση : Εφαρμογές ομαδοποίησης : Στάδια ομαδοποίησης : Τρόποι ομαδοποίησης : Επιλογή κατάλληλου αλγορίθμου : Εγκυρότητα των αποτελεσμάτων ομαδοποίησης 52 ΚΕΦΑΛΑΙΟ 4: Ο ΑΛΓΟΡΙΘΜΟΣ BLAST 4.1: Εισαγωγή στον BLAST : Σχηματική απεικόνιση και ανάλυση του αλγορίθμου BLAST : Το πρόγραμμα BLAST : Εισαγωγή : Εκτέλεση του προγράμματος BLAST : Αποτελέσματα του προγράμματος BLAST : Παραλληλοποίηση του κώδικα BLAST : Ο νόμος του Amdahl και η επιτάχυνση του αλγορίθμου 72 ΚΕΦΑΛΑΙΟ 5: ΣΥΜΠΕΡΑΣΜΑΤΑ ΚΑΙ ΠΡΟΤΑΣΕΙΣ 5.1: Ανακεφαλαίωση : Μελλοντική έρευνα 73 10

11 5.3: Επίλογος 73 ΒΙΒΛΙΟΓΡΑΦΙΑ 75 ΠΑΡΑΡΤΗΜΑ 76 11

12 ΚΕΦΑΛΑΙΟ 1: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 1.1 Οι Μεγάλες Σύγχρονες Επιστημονικές Προκλήσεις Πέραν της παρατήρησης, της θεωρίας και του πειράματος, η σύγχρονη επιστήμη χαρακτηρίζεται και από την αριθμητική προσομοίωση, η οποία αποτελεί το σημαντικότερο εργαλείο της. Όπου η παρατήρηση και το πείραμα κρίνονται ως ανέφικτα ή ανεπαρκή προς επιβεβαίωση ή απόρριψη μιας θεωρητικής υπόθεσης η οποία αφορά ένα πολύπλοκο επιστημονικό πρόβλημα, η καταφυγή σε μεθόδους αριθμητικής προσομοίωσης αποτελεί σήμερα κοινή επιστημονική πρακτική. Τα σύγχρονα πολύπλοκα επιστημονικά προβλήματα συνήθως ονομάζονται μεγάλες προκλήσεις (grand challenges). Η κατηγοριοποίησή τους, κατά τον Levin, είναι η ακόλουθη: 1) Κβαντοχημεία, στατιστική μηχανική και σχετικιστική φυσική. 2) Κοσμολογία και αστροφυσική. 3) Υπολογιστική δυναμική των ρευστών και τυρβώδης ροή. 4) Σχεδιασμός υλικών και υπεραγωγιμότητα. 5) Βιολογία, φαρμακολογία, γενετική μηχανική, αναδίπλωση πρωτεΐνης, δραστηριότητα ενζύμου και προτυποποίηση κυττάρου. 6) Ιατρική και προτυποποίηση ανθρωπίνων οργάνων και οστών. 7) Καιρός της υδρογείου και περιβαλλοντική προτυποποίηση. Η χρήση πολλών επεξεργαστών, οι οποίοι συνυπάρχουν στο ίδιο υπολογιστικό σύστημα, εισάγει σ αυτό επιπλέον χαρακτηριστικά και πολυπλοκότητα συγκριτικά προς ένα σύστημα με έναν επεξεργαστή (ακολουθιακός υπολογιστής). Αυτό είναι αναμενόμενο εφόσον, προκειμένου οι επεξεργαστές να είναι σε θέση να συνεργασθούν για την επίλυση του ίδιου υπολογιστικού προβλήματος, θα πρέπει να μπορούν να επικοινωνούν μεταξύ τους και να έχουν πρόσβαση ή, με άλλα λόγια, να μοιράζονται τα ίδια δεδομένα. Από πλευράς αρχιτεκτονικής του παράλληλου υπολογιστικού συστήματος, υπάρχουν δύο προσεγγίσεις ικανοποίησης της προηγούμενης απαίτησης: 1. Η χρήση κοινής ή διαμοιραζόμενης μνήμης (shared memory). 2. Η επικοινωνία των επεξεργαστών μέσω περάσματος μηνύματος (message passing). Οι παράλληλοι υπολογιστές, των οποίων οι αρχιτεκτονικές χαρακτηρίζονται από τη χρήση κοινής μνήμης, καλούνται συνήθως πολυεπεξεργαστές (multiprocessors). Οι 12

13 πολυεπεξεργαστές αποτελούνται από έναν αριθμό πλήρως προγραμματιζόμενων (fully programmable) επεξεργαστών, κάθε ένας από τους οποίους μπορεί να εκτελεί το δικό του πρόγραμμα. Όλοι οι επεξεργαστές έχουν πρόσβαση στην ίδια κοινή μνήμη, που επιτρέπει την κοινή χρήση διαφόρων τιμών. Η κοινή μνήμη μπορεί να είναι ενιαία και η πρόσβαση σ αυτήν να γίνεται μέσω ενός κοινού διαδρόμου (common bus) ή να είναι χωρισμένη σε πολλές διαφορετικές ενότητες ή μονάδες μνήμης (memory modules). Στη δεύτερη περίπτωση, οι επεξεργαστές έχουν πρόσβαση στις μονάδες κοινής μνήμης μέσω ενός δικτύου διασύνδεσης επεξεργαστών. Η αριθμητική προσομοίωση των μεγάλων προκλήσεων απαιτεί τεράστια υπολογιστική ισχύ, την οποία οι ακολουθιακοί υπολογιστές δεν διαθέτουν. Προς συνειδητοποίηση του γεγονότος αυτού, ας αναφερθούν τα ακόλουθα παραδείγματα: Ερευνητές στο Oak Ridge National Laboratory των Η.Π.Α. χρησιμοποίησαν νόμους της κβαντομηχανικής για να αναπτύξουν ένα πρόγραμμα υπολογιστή, το οποίο έχει τη δυνατότητα πρόβλεψης των δομικών, ταλαντωτικών και ηλεκτρονικών ιδιοτήτων νέων υλικών. Η ολοκλήρωση ενός μόνον σχετικού υπολογιστικού πειράματος απαιτεί 150 tf (teraflops τρισεκατομμύρια πράξεις κινητής υποδιαστολής). Ένας γήινος δορυφόρος μπορεί να δημιουργήσει απαίτηση οργάνωσης, αποθήκευσης και ανάλυσης όγκου ψηφιακών δεδομένων ενός tb (1 terabyte 1 τρισεκατομμύριο περίπου bytes) ανά ημέρα. Η παραγωγή ειδικών εντυπώσεων στις κινηματογραφικές ταινίες απαιτούν χειρισμό 1,8 gb (gigabytes δισεκατομμύρια περίπου bytes) οπτικών δεδομένων ανά δευτερόλεπτο. Εκτιμάται ότι οι μεγάλες προκλήσεις, προκειμένου να αντιμετωπιστούν, απαιτούν υπολογιστές με: Ταχύτητα: 1 tf Κύρια μνήμη: 1 tb Ταχύτητα εισόδου-εξόδου: 1 tb/sec κατ ελάχιστο. Υπολογιστές τέτοιων προδιαγραφών έχουν ήδη σχεδιαστεί και κατασκευαστεί με βάση την έννοια της παραλληλίας, και ως εκ τούτου καλούνται παράλληλοι. 1.2.Παράλληλος Προγραμματισμός, Μία Νέα Πρόκληση Ένα υπολογιστικό σύστημα, από τη σκοπιά της δομημένης οργάνωσης υπολογιστικών συστημάτων, αποτελείται από επίπεδα αφαίρεσης, ιεραρχικά τοποθετημένα. Κάθε επίπεδο έχει την δικιά του κατηγορία από γλώσσες προγραμματισμού και καθώς ανεβαίνουμε την ιεραρχία οι γλώσσες προγραμματισμού μοιάζουν όλο και περισσότερο με τις φυσικέςμαθηματικές γλώσσες. Η πραγματικότητα των υπολογιστικών συστημάτων οργανώθηκε με τέτοιο τρόπο έτσι ώστε τα προγράμματα να είναι γραμμένα σε γλώσσα παρόμοια με 13

14 αυτήν που εκφράζονται τα προβλήματα τα οποία επιλύουν. Αντίθετα, στο χαμηλότερο επίπεδο έχουμε την γλώσσα που καταλαβαίνει ο υπολογιστής, ακολουθίες από μηδέν και ένα, και κάθε πρόγραμμα εκφρασμένο σε γλώσσα υψηλότερου επιπέδου πρέπει να μεταγλωττίζεται-διερμηνεύεται στην γλώσσα αυτή. Εναλλακτικά ονομάζουμε τα επίπεδα αφαίρεσης και ως εικονικές μηχανές (virtual machines), γιατί κάθε γλώσσα προγραμματισμού δίνει την ψευδαίσθηση στον προγραμματιστή ότι ο υπολογιστής εκτελεί απευθείας τις εντολές της γλώσσας αυτής. Η εικονική μηχανή θα μπορούσε να υλοποιηθεί σε υλικό, έτσι ώστε η εντολές της αντίστοιχης γλώσσας προγραμματισμού να εκτελούνται απευθείας από κυκλώματα, ωστόσο το κόστος και η πολυπλοκότητα της υλοποίησης εικονικών μηχανών υψηλών επιπέδων είναι τεράστιο, οπότε και προτιμάτε η μέθοδος της μεταγλώττισης-διερμηνείας. Ο προγραμματισμός στα υψηλά επίπεδα ονομάζεται και ως Productivity-layer programming (παραγωγικός προγραμματισμός) ενώ στα χαμηλότερα ονομάζεται efficiency-layer programming (αποδοτικός προγραμματισμός). Η κατηγοριοποίηση αυτή συμβαίνει γιατί υπάρχουν δύο αντικρουόμενοι στόχοι, δύο διαφορετικές αντιλήψεις γύρω από την αποτελεσματικότητα της διαδικασίας του προγραμματισμού. Η πρώτη αντίληψη για την αποτελεσματικότητα του προγραμματισμού απαιτεί την γρήγορη ανάπτυξη εφαρμογών για την επίλυση επιστημονικών-εμπορικών προβλημάτων που συντηρούνται και επεκτείνονται εύκολα. Η δεύτερη αντίληψη θεωρεί αποτελεσματικά τα προγράμματα τα οποία εκμεταλλεύονται πλήρως τις δυνατότητες του υλικού για την ταχύτερη εκτέλεσή τους ενώ παράλληλα διατηρούν χαμηλή την ενεργειακή τους κατανάλωση. Εικόνα 1: Σκιτσογραφία παραλληλίας 14

15 Η παράλληλη επεξεργασία ορίζεται ως η ταυτόχρονη χρήση πολλαπλών υπολογιστικών πόρων για την επίλυση ενός προβλήματος. Ιστορικά τεχνικές παράλληλης επεξεργασίας ξεκίνησαν να εφαρμόζονται στα χαμηλότερα επίπεδα αφαίρεσης ενός συστήματος. Η διασωλήνωση (pipelining), οι υπερβαθμωτοί επεξεργαστές (superscalar processors) και οι επεξεργαστές ανυσμάτων (vector processors) αποτελούν τεχνικές παράλληλης επεξεργασίας και αύξησης του αριθμού των μικροεντολών που εκτελούνται ανά δευτερόλεπτο (MIPS) από μία CPU (κεντρική μονάδα επεξεργασίας-επεξεργαστής), σε συνεργασία με τον μεταγλωττιστή, οι οποίες όμως είναι διαφανής (implicit) στον προγραμματιστή εφαρμογών (productivity-layer programmer), για τον οποίο η εικονική μηχανή παραμένει ακολουθιακή. H εφαρμογή των παραπάνω τεχνικών μαζί με την αύξηση της συχνότητας λειτουργίας των επεξεργαστών δημιούργησε την προσδοκία της βελτίωσης της απόδοσης και των δυνατοτήτων των ακολουθιακών προγραμμάτων. Σταδιακά, πολύ πριν εξαντληθούν οι δυνατότητες ανάπτυξης των μονοεπεξεργαστικών συστημάτων, εμφανίστηκαν παράλληλα συστήματα πολλών επεξεργαστών. Η κατηγοριοποίησή τους μπορεί να γίνει με διάφορα κριτήρια. Για παράδειγμα, χαρακτηρίζονται ομοιογενή τα συστήματα όπου χρησιμοποιούνται όμοιας αρχιτεκτονικής επεξεργαστές (βλ. transputer) και ανομοιογενή εκείνα που περιλαμβάνουν ετερόκλητους επεξεργαστές (κυρίως ολοκληρωμένα κυκλώματα σε συσκευές όπως είναι οι κάμερες, οι φωτογραφικές μηχανές, τα κινητά τηλέφωνα). Ένας άλλος διαχωρισμός προκύπτει από την ύπαρξη ή όχι κοινής μνήμης (shared or distributed memory systems), όπου η επικοινωνία των επεξεργαστών σε συστήματα κοινής μνήμης γίνεται μέσω αυτής, ενώ στα συστήματα κατανεμημένης μνήμης αναπτύχθηκαν ειδικοί μηχανισμοί επικοινωνίας (βλ. MPI, openmp). Ο παραγωγικός προγραμματισμός των πρώτων παράλληλων συστημάτων δεν ήταν εφικτός καθώς οι πρώτες παράλληλες γλώσσες ήταν στενά συνδεδεμένες με την αρχιτεκτονική του υλικού του συστήματος. Ταυτόχρονα, ο παραγωγικός προγραμματισμός απέκτησε ενιαία θεωρία (τεχνολογία λογισμικού) και νέες πρακτικές (αντικειμενοστραφής σχεδίαση και προγραμματισμός), οι οποίες βασίζονταν σε εικονικές μηχανές μονοεπεξεργαστικών συστημάτων. Η κατάσταση ωστόσο άλλαξε δραματικά. Τα βασικά αίτια είναι τρία. Πρώτον οι αρχικές προβλέψεις για γραμμική αύξηση της συχνότητας λειτουργίας των επεξεργαστών δεν επαληθεύτηκαν γιατί η αύξηση της συχνότητας οδηγεί σε δύσκολα διαχειρίσιμες ενεργειακά καταστάσεις τόσο για την τροφοδοσία όσο και για την ψύξη. Το κομμάτι της ενέργειας παίζει ιδιαίτερο ρόλο και για έναν ακόμη λόγο. Όλο και περισσότερα υπολογιστικά συστήματα τροφοδοτούνται από μπαταρίες (laptops, tablets, έξυπνα τηλέφωνα και ολοκληρωμένα κυκλώματα φορητών συσκευών). Δεύτερον η επιπλέον ανάπτυξη των τεχνικών αδιαφανής παράλληλης επεξεργασίας σε επίπεδο υλικού παρουσιάζουν μεγάλο κόστος υλοποίησης χωρίς να συμβάλλουν ουσιαστικά στην καλύτερη επίδοση. Τρίτον η μνήμη είναι μεν άφθονη αλλά η προσπέλασή της είναι πολύ πιο δαπανηρή σε σχέση με την επεξεργασία. O Dr. David Patterson του Berkeley University of California περιέγραψε την παραπάνω κατάσταση με τον όρο the three walls: 15

16 the power, ILP and memory wall (τα τρία τείχη: το τείχος της ισχύς, της μνήμης και του παραλληλισμού επιπέδου εντολής). Η μόνη βιώσιμη λύση είναι η καθολική αντικατάσταση των μονοεπεξεργαστικών συστημάτων με συστήματα πολλών επεξεργαστών και την επακόλουθη στροφή προς τον παράλληλο προγραμματισμό. Το ακολουθιακό μοντέλο προγραμματισμού κλονίζεται γιατί η εκμετάλλευση των δυνατοτήτων των νέων παράλληλων συστημάτων απαιτεί την αδιαφάνεια (explicitness) τους στον προγραμματισμό όλο και υψηλότερων επιπέδων αφαίρεσης. Η αυτόματη παραλληλοποίηση ακολουθιακού κώδικα από μεταγλωττιστές και λειτουργικά συστήματα θα μπορούσε να είναι το τελευταίο προπύργιο του ακολουθιακού μοντέλου, ωστόσο ακόμα δεν έχει ουσιαστικά αποτελέσματα. Η νέα κατάσταση η οποία διαμορφώνεται από την καθολική επικράτηση των παράλληλων συστημάτων οδηγεί και στα εξής συμπεράσματα: Το εποικοδόμημα του παραγωγικού προγραμματισμού απειλείται καθώς απαιτείται συνολική αναθεώρηση των πρακτικών του. Χρειάζονται νέοι τρόποι έκφρασης παράλληλων αλγορίθμων και νέα παράλληλα σχεδιαστικά πρότυπα (design patterns). Το λογισμικό βρίσκεται πίσω από τις δυνατότητες του υλικού. Οι βιομηχανίες παραγωγής υλικού πρέπει να καθιερώσουν κοινές αρχιτεκτονικές παράλληλων συστημάτων. Η κοινότητα των προγραμματιστών χαμηλού επιπέδου πρέπει να επαναδομήσει τα επίπεδα αφαίρεσης των παράλληλων συστημάτων, τη γέφυρα που συνδέει τον προγραμματιστή εφαρμογών με το υλικό. Συγκεκριμένα χρειάζονται νέες γλώσσες προγραμματισμού, νέα περιβάλλοντα εργασίας και νέα λειτουργικά συστήματα που θα φέρουν τα παράλληλα συστήματα κοντά στα προβλήματα της ανθρώπινης δραστηριότητας τα οποία καλούνται να αντιμετωπίσουν Σειριακή εναντίον Παράλληλης Επεξεργασίας Η ακολουθία είναι μια από τις θεμελιώδεις πλευρές της ανθρώπινης και φυσικής δραστηριότητας. Κάθε μέρα το σκοτάδι της νύχτας μεταμορφώνεται στο φως της ημέρας και αυτό με τη σειρά του μεταμορφώνεται πάλι σε σκοτάδι. Ο κάθε άνθρωπος ακολουθεί μια καθημερινή ρουτίνα αποτελούμενη από μια σειρά βημάτων δραστηριότητας: σηκώνεται το πρωί, τρώει το πρωινό του, πηγαίνει στη δουλειά, τρώει το μεσημεριανό, το βραδινό κ.λπ. Η ανθρώπινη ομιλία είναι σειριακή και η γνώση εκφράζεται και μεταδίδεται με μία σειρά από λέξεις είτε προφορικά είτε γραπτά. Όλη η έννοια του χρόνου, που είναι τόσο σημαντική για τον προγραμματισμό και την εκτέλεση επιτυχημένων ενεργειών, βασίζεται στην έννοια της ακολουθίας. Παντού στη φύση και στην ανθρώπινη ύπαρξη, η δραστηριότητα ξεδιπλώνεται και εκφράζεται μέσα από την αρχή της ακολουθίας. Αυτός είναι και ο λόγος που οι πρώτοι αλγόριθμοι και τα πρώτα προγράμματα υλοποιήθηκαν με βάση την έννοια της ακολουθίας. Ακόμη πριν κατασκευαστούν οι πρώτοι Η/Υ, το μαθηματικό πρότυπο ενός αλγορίθμου καθοριζόταν ως μία πεπερασμένη ακολουθία πράξεων. Ωστόσο η επιστήμη των υπολογιστών βαθμιαία ωρίμασε και έγινε φανερό, ιδιαίτερα τα 10 τελευταία χρόνια, ότι η ακολουθία είναι τμήμα μόνο της υπόθεσης. Οι ανθρώπινες και 16

17 φυσικές δραστηριότητες δεν είναι μόνο σειριακές αλλά και παράλληλες: η δράση δεν αναπτύσσεται μόνο σειριακά αλλά η δράση συμβαίνει ταυτόχρονα σε πολλά διαφορετικά σημεία. Η παραλληλία είναι εξίσου θεμελιώδης και σημαντική όσο και η ακολουθία. Κάθε άνθρωπος μιλάει και ενεργεί σειριακά, ωστόσο αποτελεί τμήμα κάποιου οργανισμού, ο οποίος περιέχει πολλούς ανθρώπους που όλοι λειτουργούν παράλληλα. Φανταστείτε σε πιο σημείο θα βρισκόταν οι ανθρωπότητα σήμερα αν δεν υπήρχε η συντονισμένη δραστηριότητα πολλών μεμονωμένων ανθρώπων που δουλέψανε ταυτόχρονα ως μία ομάδα. Η ίδια ακριβώς αρχή παρατηρείται και στη φύση: οι κύκλοι που αναπτύσσονται στη φύση είναι σίγουρα δράσεις σειριακές αλλά η φύση λειτουργεί παράλληλα, παντού χωρίς όρια. Η επιστήμη της Φυσικής τώρα αρχίζει να διαμορφώνει τους πιο θεμελιακούς φυσικούς νόμους με βάση τους όρους των πεδίων : ενεργειακά πεδία και πεδία ύλης. Το πεδίο είναι μια οντότητα που λειτουργεί παντού την ίδια ακριβώς χρονική στιγμή με τέλεια παραλληλία. Γι αυτό μια ολοκληρωμένη εικόνα της ανθρώπινης αλλά και της φυσικής δραστηριότητας απαιτεί οπωσδήποτε δύο βασικές έννοιες: την ακολουθία και την παραλληλία. Εικόνα 2: Σειριακή και Παράλληλη επικοινωνία Μετά από 40 χρόνια πλήρους ενασχόλησης με το σειριακό προγραμματισμό, η επιστήμη των υπολογιστών άρχισε να αναγνωρίζει τη σημασία του παράλληλου προγραμματισμού. Παρόλο που τα προγράμματα είναι σειριακά (μια ακολουθία πράξεων), τρομακτικές αυξήσεις στην υπολογιστική ισχύ επιτεύχθηκαν κάνοντας την εκτέλεση μιας ακολουθίας εντολών ολοένα και πιο γρήγορη. Το 1945 ο πρώτος ηλεκτρονικός επεξεργαστής στον υπολογιστή ENIAC μπορούσε να εκτελέσει 1000 αριθμητικές πράξεις ανά δευτερόλεπτο. Οι συμβατικοί υπολογιστές RISC (επεξεργαστές μειωμένου σετ εντολών) μπορούν σήμερα να εκτελέσουν αριθμητικών πράξεων ανά δευτερόλεπτο. Αυτοί οι επεξεργαστές είναι κατά βάση ακόμα σειριακοί αλλά η ακολουθία είναι τώρα 104 πιο γρήγορη απ ότι ήταν πριν 40 χρόνια. Η αύξηση της ταχύτητας των επεξεργαστών αναμένεται να συνεχιστεί, αλλά μάλλον με ρυθμούς μικρότερους σε σχέση με το παρελθόν. 17

18 Παρόλη την συνεχώς αυξανόμενη υπολογιστική ισχύ των επεξεργαστών VLSI, υπάρχει μια ευρεία περιοχή σημαντικών επιστημονικών προβλημάτων που απαιτούν πολύ μεγαλύτερη υπολογιστική ταχύτητα. Μάλιστα σε ορισμένες περιπτώσεις η διαφορά της επιπλέον υπολογιστικής ισχύος που απαιτείται, αγγίζει τα όρια αρκετά μεγάλων τάξεων μεγέθους. Μια προσέγγιση για τη δημιουργία της αναγκαίας υπολογιστικής ισχύος είναι η σχεδίαση ταχύτατων ειδικών σειριακών επεξεργαστών με τη κατασκευή μεγάλου αριθμού κυκλωμάτων VLSI. Ωστόσο η σχεδίαση και η κατασκευή αυτών των ειδικών επεξεργαστών είναι ιδιαίτερα δαπανηρή. Περίπου πριν από 10 χρόνια, οι κατασκευαστές επεξεργαστών διαπίστωσαν, ότι είναι οικονομικά προτιμότερη η σύνδεση πολλών απλών VLSI επεξεργαστών σε έναν υπολογιστή, από τη σχεδίαση ενός καινούργιου επεξεργαστή για ειδικούς σκοπούς. Αν κάποιος χρειάζεται 10 φορές περισσότερη υπολογιστική ισχύ, τότε μπορεί να χρησιμοποιήσει 10 επεξεργαστές, ενώ αν θέλει 100 φορές περισσότερη ισχύ θα χρησιμοποιήσει 100 επεξεργαστές. Αυτό αποτέλεσε την εμπορική εισαγωγή σε ευρεία βάση των συστημάτων διαμοιραζόμενης μνήμης. Καθώς αναπτύσσεται κάθε νέα γενιά ταχύτερων σειριακών επεξεργαστών, αυτοί μπορούν να συνδεθούν σε μεγάλους αριθμούς αυξάνοντας την ισχύ τέτοιων συστημάτων στο επιθυμητό επίπεδο. Κατά αυτόν τον τρόπο η παράλληλη επεξεργασία δεν έρχεται σε σύγκρουση με τη σειριακή αλλά λειτουργούν μαζί στο ίδιο υπολογιστικό σύστημα. Η πρόοδος στη σχεδίαση ταχύτερων VLSI επεξεργαστών θα δημιουργήσει ταχύτερα και πιο δυνατά παράλληλα συστήματα. Οι εταιρείες που παράγουν παράλληλα συστήματα όπως ΙΒΜ συνεχίζουν να ενσωματώνουν τους τελευταίας γενιάς πανίσχυρους σειριακούς επεξεργαστές στα συστήματα τους. Ακόμα και τα κυκλώματα ανυσματικής επεξεργασίας, που είναι σε μεγάλο βαθμό παράλληλα, συνδέονται σε μεγάλους αριθμούς σε τέτοιου είδους συστήματα. Η εξέλιξη στην τεχνολογία κυκλωμάτων θα συνεχίσει να τροφοδοτεί την εξέλιξη παράλληλων συστημάτων πολυεπεξεργαστών Ο Ορισμός Του Παράλληλου Προγραμματισμού Στην πληροφορική, παράλληλος προγραμματισμός λέγεται η ανάπτυξη εφαρμογών οι οποίες εκμεταλλεύονται την ύπαρξη πολλαπλών επεξεργαστικών μονάδων σε έναν πολυεπεξεργαστή ή πολυυπολογιστή για να επιτύχουν αύξηση των υπολογιστικών επιδόσεων και μείωση του απαιτούμενου χρόνου εκτέλεσης της εφαρμογής. Επομένως ο παράλληλος προγραμματισμός μπορεί να ιδωθεί ως ειδική περίπτωση ταυτόχρονου προγραμματισμού, όπου η εκτέλεση γίνεται πραγματικά παράλληλα και όχι ψευδοπαράλληλα. 18

19 Εικόνα 1: Παράλληλη επεξεργασία Στους πολυεπεξεργαστές εκτελείται ένα μόνο λειτουργικό σύστημα, το οποίο αναλαμβάνει να αναθέσει την εκτέλεση παράλληλων διεργασιών σε διαφορετικούς επεξεργαστές, ενώ στους πολυυπολογιστές, οι οποίοι ουσιαστικά αποτελούν κατανεμημένα συστήματα εφόσον είναι εφοδιασμένοι με το κατάλληλο λογισμικό, κάθε κόμβος εκτελεί τον δικό του πυρήνα. Συνήθως ένας αλγόριθμος παραλληλοποιείται με διάσπασή του σε πολλαπλά τμήματα τα οποία ανατίθενται σε ξεχωριστά νήματα ή διεργασίες και έτσι εκτελούνται παράλληλα σε διαφορετικές επεξεργαστικές μονάδες. Ωστόσο δεν είναι βέβαιο ότι ένας αλγόριθμος, υλοποιημένος σε κάποιο πρόγραμμα, μπορεί να παραλληλοποιηθεί πάντα: μία υπορουτίνα η οποία υπολογίζει την ακολουθία Φιμπονάτσι μέσω ενός επαναληπτικού βρόχου δεν μπορεί να διασπαστεί σε πολλαπλά τμήματα με διαμοίραση των επαναλήψεων του βρόχου σε μικρότερους υποβρόχους, αφού ο υπολογισμός ο οποίος γίνεται σε κάθε επανάληψη εξαρτάται από αυτούς των δύο προηγούμενων επαναλήψεων επομένως τελικά όλες οι επαναλήψεις πρέπει να εκτελεστούν σειριακά στο εσωτερικό μίας μόνο διεργασίας. Τέτοιου τύπου εξαρτήσεις είναι το σημαντικότερο εμπόδιο για την παραλληλοποίηση. Ωστόσο ακόμα και στην περίπτωση μη παραλληλοποιήσιμου προγράμματος η χρήση διαφορετικών νημάτων ή διεργασιών μπορεί να είναι ευεργετική αν ο προγραμματιστής επιθυμεί να επικαλύψει υπολογισμούς με επικοινωνίες (π.χ. ένα νήμα να συνεχίζει τους υπολογισμούς όσο το άλλο αναμένει είσοδο από το δίκτυο ή από τον χρήστη αυτό έχει νόημα ακόμα και αν το πρόγραμμα εκτελείται ψευδοπαράλληλα σε μονοεπεξεργαστικό, σειριακό υπολογιστή). Η παραλληλοποίηση ενός σειριακού αλγορίθμου, προκειμένου να εκμεταλλευτούμε την αύξηση των υπολογιστικών επιδόσεων που προσφέρει ο παραλληλισμός, διακρίνεται σε τέσσερα βήματα που εκτελούνται διαδοχικά: 19

20 1. Τη διάσπαση του ολικού υπολογισμού σε επιμέρους εργασίες. Εξαρτάται από το πρόβλημα και εναπόκειται στον προγραμματιστή. 2. Την ανάθεση εργασιών σε οντότητες εκτέλεσης (διακριτές διεργασίες, νήματα ή ίνες). Μπορεί να είναι είτε στατική, όπου κάθε οντότητα αναλαμβάνει ένα προκαθορισμένο σύνολο εργασιών προς εκτέλεση, ή δυναμική, όπου οι εργασίες ανατίθενται μία-μία κατά τον χρόνο εκτέλεσης μόλις μία οντότητα ολοκληρώσει την τρέχουσα εργασία της ζητά να της δοθεί η επόμενη. Η δυναμική λύση είναι προτιμότερη σε περίπτωση που οι επεξεργαστές έχουν διαφορετικό φόρτο (π.χ. αν κάποιοι εκτελούν και άλλα προγράμματα) αλλά επισύρει κάποια χρονική επιβάρυνση. 3. Την ενορχήστρωση των οντοτήτων. Εδώ γίνεται ο καθορισμός του τρόπου συντονισμού και επικοινωνίας μεταξύ των οντοτήτων εκτέλεσης, π.χ. φράγματα εκτέλεσης, αποστολή ή λήψη μηνυμάτων κλπ. 4. Την αντιστοίχηση οντοτήτων σε επεξεργαστές. Μπορεί να είναι στατική, δηλαδή προκαθορισμένη από τον προγραμματιστή, ή δυναμική, δηλαδή ρυθμιζόμενη από το σύστημα κατά τον χρόνο εκτέλεσης. Η απόδοση των παράλληλων προγραμμάτων εκτιμάται κυρίως από δύο σημαντικούς παραμέτρους: τον Χρόνο Εκτέλεσης και την Επιτάχυνση. Ο Χρόνος Εκτέλεσης που καλείται και Παράλληλος Χρόνος Εκτέλεσης, είναι απλά ο χρόνος εκτέλεσης του παράλληλου προγράμματος στην αρχιτεκτονική του παράλληλου συστήματος που θέλουμε να προσομοιώσουμε. Ο Σειριακός Χρόνος Εκτέλεσης ορίζεται σαν ο χρόνος εκτέλεσης της σειριακής έκδοσης του ίδιου αλγορίθμου, που εκτελείται με έναν μόνο επεξεργαστή. Η Επιτάχυνση του παράλληλου προγράμματος είναι ο λόγος του Σειριακού Χρόνου Εκτέλεσης προς τον Παράλληλο Χρόνο Εκτέλεσης. Ένα άλλο σημαντικό μέτρο της απόδοσης του προγράμματος είναι η Απόδοση του Επεξεργαστή. Για κάθε επεξεργαστή, αυτό ορίζεται σαν το ποσοστό του χρόνου που ο επεξεργαστής πραγματικά λειτουργεί κατά τη διάρκεια εκτέλεσης του προγράμματος. Αν αναφερθούμε στο σύνολο του προγράμματος, η Απόδοση του Συστήματος για τον συγκεκριμένο αλγόριθμο ορίζεται σαν η μέση απόδοση όλων των επεξεργαστών. 20

21 ΚΕΦΑΛΑΙΟ 2: ΕΙΣΑΓΩΓΗ ΣΤΟ OPENMP (Open Multi- Processing) 2.1. Παράλληλα και Κατανεμημένα Συστήματα Στην πληροφορική, παράλληλα, κατανεμημένα ή ταυτόχρονα συστήματα ονομάζονται υπολογιστές οι οποίοι επιτρέπουν την ταυτόχρονη εκτέλεση πολλαπλών συνεργαζόμενων προγραμμάτων σε μία ή περισσότερες επεξεργαστικές μονάδες. Οι διαφορές μεταξύ αυτών των όρων είναι λεπτές, με την έμφαση να δίνεται άλλοτε στον σχεδιασμό και ανάλυση αλγορίθμων, άλλοτε στην κατασκευή υποστηρικτικού λογισμικού και άλλοτε στη σχεδίαση των υποδομών υλικού που απαιτούνται για την επίτευξη του ταυτοχρονισμού. Εικόνα 4: Ταξινόμηση κατά Flynn Το 1966, ο Michael J. Flynn πρότεινε για αρχιτεκτονική κατηγοριοποίηση των υπολογιστικών συστημάτων ανάλογα με την πολλαπλότητα των εντολών και τις ροές δεδομένων, η οποία περιλαμβάνει ένα πρότυπο οργάνωσης ακολουθιακών μηχανών και τρία πρότυπα οργάνωσης παράλληλων μηχανών. Οι παράλληλες αυτές μηχανές περιλαμβάνουν ένα σύνολο pu (processing units: μονάδες επεξεργασίας). Ακολουθεί η κατά Flynn κατηγοριοποίηση: 21

22 Εικόνα 5: SIMD SISD (Single Instruction stream, single Data stream: μοναδική ροή εντολών, μοναδική ροή δεδομένων). Στην κατηγορία αυτή ανήκουν οι μηχανές, καθεμιά των οποίων διαθέτει μια cpu (central processing unit: κεντρική μονάδα επεξεργασίας), η οποία λειτουργεί κατά το πρότυπο von Neumann. Κάθε στιγμή ένας μοναδικός επεξεργαστής εκτελεί μία εντολή σε ένα δεδομένο το οποίο έχει προσκομίσει από την κύρια μνήμη. SIMD (Single Instruction stream, Multiple Data stream: μοναδική ροή εντολών, πολλαπλή ροή δεδομένων). Σ αυτήν την κατηγορία μηχανών, οι pu κάθε μηχανής εκτελούν συγχρονισμένα μια κοινή ακολουθία εντολών επί διαφορετικών δεδομένων. Οι μηχανές της κατηγορίας αυτής αποτελούν τους επεξεργαστές πίνακα (array processors). Κάθε στιγμή πολλαπλοί επεξεργαστές εκτελούν μία μόνο κοινή εντολή σε πολλαπλά διαφορετικά δεδομένα. Ο όρος σήμερα περιγράφει σε σημαντικό βαθμό τη λειτουργία των σύγχρονων επεξεργαστών γραφικών. MISD (Multiple Instruction stream, Single Data stream: πολλαπλή ροή εντολών, μοναδική ροή δεδομένων). Οι αρχιτέκτονες υπολογιστών θεωρούν γενικά ότι, αυτό το πρότυπο οργάνωσης δεν είναι πρακτικό και συνεπώς δεν έχουν κατασκευαστεί αυτούσιες μηχανές αυτής της κατηγορίας. Κάθε στιγμή πολλαπλοί επεξεργαστές τροποποιούν με διαφορετικό τρόπο την ίδια ροή δεδομένων συνήθως αξιοποιείται με γνώμονα την αύξηση της ανοχής σφαλμάτων μίας εφαρμογής και όχι την αύξηση των υπολογιστικών επιδόσεων. MIMD (Multiple Instruction stream, Multiple Data stream: πολλαπλή ροή εντολών, πολλαπλή ροή δεδομένων). Σε κάθε μηχανή της κατηγορίας αυτής, οι pu είναι ελεύθερες να εκτελούν ανεξάρτητα οποιαδήποτε εντολή με οποιαδήποτε δεδομένα. Οι μηχανές αυτού του είδους αποτελούν τις μηχανές πολυεπεξεργασίας (multiprocessing machines). Οι πλήρως παράλληλοι υπολογιστές, όπου πολλαπλοί αυτόνομοι επεξεργαστές εκτελούν ταυτοχρόνως πολλαπλές διαφορετικές ροές εντολών σε διαφορετικά δεδομένα. Τα συστήματα MIMD διακρίνονται σε πολυεπεξεργαστές κοινής μνήμης, όπου πολλαπλοί επεξεργαστές επικοινωνούν με μία κοινή μνήμη ενιαίου χώρου διευθύνσεων, και σε πολυυπολογιστές κατανεμημένης μνήμης, όπου πολλαπλά πακέτα επεξεργαστή-ιδιωτικής μνήμης, με τον δικό του χώρο διευθύνσεων το καθένα, διασυνδέονται και επικοινωνούν μεταξύ τους --και στις δύο περιπτώσεις η επικοινωνία γίνεται μέσω ενός «δικτύου διασύνδεσης». Τα μοντέλα παράλληλου προγραμματισμού για πολυεπεξεργαστές και πολυυπολογιστές είναι το μοντέλο κοινού χώρου διευθύνσεων (π.χ. πολλαπλές διεργασίες 22

23 ή νήματα, OpenMP) και το μοντέλο μεταβίβασης μηνυμάτων (π.χ. PVM, MPI), αντιστοίχως. Στο πρώτο οι επεξεργαστικές μονάδες ανταλλάσσουν πληροφορίες προελαύνοντας κοινόχρηστες μεταβλητές στην κοινή μνήμη, ενώ στο δεύτερο ανταλλάσσοντας μηνύματα. Κάθε προγραμματιστικό μοντέλο μπορεί να εφαρμοστεί και σε σύστημα μιας αρχιτεκτονικής που δεν είναι η φυσική του (π.χ. πολυνηματικό πρόγραμμα σε πολυυπολογιστή ή πρόγραμμα MPI σε πολυεπεξεργαστή) αλλά συνήθως με χαμηλότερες επιδόσεις. Εικόνα 6: Κοινή μνήμη 2.2. Τί είναι το OpenMP; Το OpenMP είναι ένα πρότυπο παράλληλου προγραμματισμού, το οποίο δίνει στον χρήστη τη δυνατότητα να αναπτύξει παράλληλα προγράμματα για συστήματα μοιραζόμενης μνήμης, τα οποία είναι ανεξάρτητα από τη συγκεκριμένη αρχιτεκτονική και έχουν μεγάλη ικανότητα κλιμάκωσης. Με το πρότυπο αυτό, ο χρήστης μπορεί να δώσει εντολές και οδηγίες στον μεταγλωττιστή για να ορίσει μέρη του προγράμματος που επιθυμεί να εκτελεστούν παράλληλα, να ορίσει σημεία συγχρονισμού και άλλα. Εικόνα 7: OpenMP Το πρότυπο αυτό προσφέρει στον προγραμματιστή ένα σύνολο από οδηγίες, οι οποίες ενσωματώνονται στον κώδικα ενός προγράμματος, και έτσι μπορεί ο μεταγλωττιστής να επιτύχει παραλληλισμό στο πρόγραμμα αυτό, σύμφωνα πάντα με τις οδηγίες και παραμέτρους που έχει θέσει ο προγραμματιστής. Το API αυτό αποτελείται κυρίως από τρία βασικά συστατικά: 23

24 Οδηγίες προς τον μεταγλωττιστή (compiler directives) Σύνολο συναρτήσεων χρόνου εκτέλεσης (run-time library functions) Μεταβλητές περιβάλλοντος (Environment Variables) Η διεπαφή εφαρμογών προγραμμάτων (Application Program Interface API) του OpenMP έχει οριστεί για τις γλώσσες προγραμματισμού C/C++ και Fortran, ενώ έχει υλοποιηθεί για τις πιο σημαντικές πλατφόρμες όπως το Unix και τα Windows NT. Το όνομά του προέρχεται από τη φράση Open Specifications for Multi-Processing που σημαίνει Ανοιχτές προδιαγραφές για Πολύ-Επεξεργασία. Πρέπει να επισημάνουμε ότι το OpenMP δεν προορίζεται για αρχιτεκτονικές συστημάτων κατανεμημένης μνήμης, ούτε έχει υλοποιηθεί από όλες τις εταιρίες υλικού και λογισμικού. Επίσης, δεν έχει σχεδιαστεί για να αποδίδει τη μέγιστη αποδοτικότητα στη χρήση της κοινής μνήμης. Οι στόχοι του OpenMP είναι να παράσχει ένα πρότυπο που θα ισχύει για αρχιτεκτονικές και πλατφόρμες κοινής μνήμης. Ένα πρότυπο που θα είναι μικρό και εύκολα κατανοητό, δηλαδή θα παρέχει ένα απλό και περιορισμένο σύνολο από οδηγίες με το οποίο θα μπορεί να γίνεται σημαντική παραλληλοποίηση. Γενικά μπορούμε να πετύχουμε την παραλληλοποίηση χρησιμοποιώντας ένα σύνολο 3-4 κοινών οδηγιών. Επίσης, θα πρέπει να είναι εύκολο στη χρήση του. Το OpenMP παρέχει: α) τη δυνατότητα παραλληλοποίησης ενός προγράμματος σταδιακά (εν αντιθέσει, για παράδειγμα, με το MPI όπου κάθε φορά γίνεται include όλη η βιβλιοθήκη) και β) τη δυνατότητα τόσο χονδρού όσο και λεπτού κόκκου παραλληλίας. Τέλος, ο κυριότερος στόχος του OpenMP είναι το portability. Υποστηρίζει Fortran (77, 90 και 95) και C/C++ ενώ έχει υλοποιηθεί για τις πιο πολλές από τις σημαντικές πλατφόρμες όπως το Unix και τα WindowsNT Ιστορική εξέλιξη του OpenMP Η ιστορία του OpenMP ξεκινάει από τις αρχές της δεκαετίας του '90. Εκείνη τη εποχή, οι εταιρίες συστημάτων μοιραζόμενης μνήμης παρείχαν παρόμοιες επεκτάσεις προγραμμάτων Fortran, βασισμένες σε οδηγίες μεταγλωττιστή. Ο προγραμματιστής έδινε στον μεταφραστή ένα σειριακό πρόγραμμα Fortran με οδηγίες που καθόριζαν ποιοι βρόχοι θα παραλληλοποιούνταν. Στη συνέχεια, ο μεταγλωττιστής ήταν υπεύθυνος για την αυτόματη παραλληλοποίηση αυτών των βρόγχων σε συμμετρικούς επεξεργαστές (SMP's). Αν και οι υλοποιήσεις των διάφορων εταιριών ήταν παρόμοιες ως προς τη λειτουργικότητα, ωστόσο, διέφεραν αρκετά. Έτσι, έγινε μια προσπάθεια για να δημιουργηθεί ένα πρότυπο. Το πρώτο πρότυπο που δημιουργήθηκε ήταν το ANSI X3H5 to 1994, αλλά δεν υιοθετήθηκε επειδή εκείνη την εποχή το ενδιαφέρον για αρχιτεκτονικές μοιραζόμενης μνήμης έπεσε, ενώ ανέβηκε το ενδιαφέρον για συστήματα με αρχιτεκτονική 24

25 κατανεμημένης μνήμης. Το 1997 προτάθηκε το πρότυπο OpenMP συνεχίζοντας από εκεί που είχε μείνει το ANSI X3H5, μιας και τώρα τα συστήματα μοιραζόμενης μνήμης άρχισαν να γίνονται δημοφιλέστερα. Εκείνη τη χρονιά είχε οριστεί μόνο το API για τη Fortran. To 1998 ορίστηκε το API για τις γλώσσες C/C++, ενώ το 2000 φτιάχτηκε μια δεύτερη έκδοση για τη Fortran και το 2002 ακολούθησε η δεύτερη έκδοση για C/C++. Το 2005 ακολούθησε μία νέα συνδυασμένη έκδοση C/C++/Fortran προδιαγραφών, η έκδοση 2.5, ενώ το Μάιο του 2008 κυκλοφόρησε η τρίτη έκδοση που περιλάμβανε την έννοια των tasks και του task construct. Η επόμενη έκδοση (3.1) κυκλοφόρησε στις 9 Ιουλίου του Η τέταρτη και πιο πρόσφατη έκδοση φτιάχτηκε τον Ιούλιο του 2013, μια έκδοση που παρουσίασε βελτίωση στην υποστήριξη των επιταχυντών, στην αντιμετώπιση των λαθών (error handling) και παρείχε SIMD υποστήριξη και επεκτάσεις στο tasking. Ημερομηνία Έκδοση 1997 Fortran version C/C++ version Fortran version C/C++ version C/C++/Fortran version C/C++/Fortran version C/C++/Fortran version C/C++/Fortran version Μοντέλο Προγραμματισμού OpenMP Το μοντέλο προγραμματισμού του OpenMP είναι βασισμένο στο πολυνηματικό μοντέλο παραλληλισμού. Μια διεργασία κοινής μνήμης αποτελείται από πολλά νήματα και το OpenMP βασίζεται στο χαρακτηριστικό αυτό. Στο OpenMP ο προγραμματιστής μπορεί να ελέγχει και να τον αυξάνει ή να τον μειώνει σταδιακά. Αρχικά, μία εφαρμογή σε OpenMP ξεκινά με ένα μόνο νήμα, το οποίο ονομάζεται master thread(νήμα αρχηγός). Το master thread εκτελεί ακολουθιακά μέχρι να συναντήσει το πρώτο παράλληλο τμήμα. Όταν το πρόγραμμα εισέρχεται σε μία περιοχή που έχει ορίσει ο προγραμματιστής να εκτελεστεί παράλληλα (παράλληλη περιοχή, parallel region), τότε δημιουργούνται αρκετά νήματα (fork-join μοντέλο) και το μέρος του κώδικα που βρίσκεται μέσα στη παράλληλη περιοχή εκτελείται παράλληλα. Όταν ολοκληρωθεί ο υπολογισμός της παράλληλης περιοχής όλα τα νήματα τερματίζουν και συνεχίζει μόνο το master thread. Στην εικόνα φαίνεται ο τρόπος με τον οποίο λειτουργεί το μοντέλο αυτό. 25

26 Παραλληλισμός τύπου Fork-Join: Το νήμα αρχηγός δημιουργεί ομάδα νημάτων σύμφωνα με τις ανάγκες Ο παραλληλισμός προστίθεται βαθμιαία Το ακολουθιακό πρόγραμμα εξελίσσεται σε παράλληλο πρόγραμμα Εικόνα 9: Fork and Join O διαμοιρασμός των δεδομένων μπορεί να οδηγήσει σε συνθήκες ανταγωνισμού. Για να ελέγξουμε τι συνθήκες ανταγωνισμού, χρησιμοποιούμε συγχρονισμό. Ο συγχρονισμός, όμως, κοστίζει, άρα κάθε φορά που παραλληλοποιούμε πρέπει να οργανώνουμε τα δεδομένα κατά τέτοιο τρόπο ώστε να ελαχιστοποιούμε την ανάγκη για συγχρονισμό. Το OpenMP δεν μπορεί να εγγυηθεί ότι σε μία παράλληλη εκτέλεση ενός κώδικα η είσοδος και η έξοδος είναι συγχρονισμένη. Ο συγχρονισμός των νημάτων είναι ευθύνη του προγραμματιστή. Το OpenMP παρέχει αρκετές οδηγίες και συναρτήσεις συγχρονισμού, και πρέπει να χρησιμοποιηθούν σωστά από τον προγραμματιστή. Το OpenMP δεν είναι μοντέλο αυτόματης παραλληλοποίησης. Προσφέρεται, δηλαδή, σε μεγάλο βαθμό, έλεγχος στον προγραμματιστή. Το μοντέλο μνήμης του OpenMP είναι ένα χαλαρό μοντέλο μοιραζόμενης μνήμης. Όλα τα νήματα έχουν πρόσβαση στη κύρια μνήμη. Κάθε νήμα μπορεί να έχει μια προσωρινή άποψη (temporary view) της μνήμης. Με αυτόν τον τρόπο, αν και δεν είναι υποχρεωτικό στο μοντέλο μνήμης του OpenMP, μπορεί να αποθηκεύσει (cache) κάποιες μεταβλητές και έτσι να αποφεύγεται η συνεχής προσπέλαση στη μνήμη. Επίσης κάθε νήμα έχει και την ιδιωτική του μνήμη (thread-private memory), όπου τα υπόλοιπα νήματα δεν έχουν πρόσβαση. Επιγραμματικά, στο OpenMP ισχύουν τα εξής: Σε μια εντολή παραλληλισμού μπορεί να ορίζονται μοιραζόμενες και ιδιωτικές μεταβλητές. Κάθε αναφορά σε μοιραζόμενη μεταβλητή είναι μία αναφορά στην ίδια 26

27 την μεταβλητή, ενώ μια αναφορά σε ιδιωτική μεταβλητή είναι μια αναφορά σε ένα τοπικό αντίγραφο στην ιδιωτική μνήμη του νήματος. Βέβαια, για την προσπέλαση των μοιραζόμενων μεταβλητών από διαφορετικά νήματα απαιτείται συγχρονισμός, και όπως είπαμε νωρίτερα, αυτό είναι ευθύνη του προγραμματιστή. Είναι πιθανό σε κάποιες υλοποιήσεις η πρόσβαση σε μοιραζόμενες μεταβλητές να είναι ατομική ενέργεια και να μην χρειάζεται παρέμβαση από τον προγραμματιστή. Σε περίπτωση εμφωλευμένων εντολών παραλληλισμού, μία μεταβλητή που είναι ιδιωτική στην εξωτερική παράλληλη περιοχή, μπορεί να είναι μοιραζόμενη στην εσωτερική παράλληλη περιοχή, εκτός αν έχει οριστεί στην εσωτερική οδηγία ως ιδιωτική Πλεονεκτήματα OpenMP Πριν την εμφάνιση του OpenMP, δεν υπήρχε τυποποιημένος τρόπος για να παραλληλοποιήσει κάποιος εύκολα ένα πρόγραμμα σε περιβάλλον πολυεπεξεργαστών κοινής μνήμης. Παρότι υπήρχε ένα πρότυπο για μεταβίβαση μηνυμάτων, οι προγραμματιστές που ήθελαν παραλληλισμό κοινής μνήμης έπρεπε είτε να χρησιμοποιήσουν μη στάνταρ και μη μεταφέρσιμα API είτε να γράψουν κώδικα για την υποκείμενη υλοποίηση πολυεπεξεργασίας. Αυτά τα προγράμματα ήταν γενικά μεταφέρσιμα, ωστόσο κατά την ανάπτυξή τους η προσοχή του προγραμματιστή αναλωνόταν στις λεπτομέρειες της υλοποίησης πολυεπεξεργασίας και όχι στο πρόβλημα. Το OpenMP έρχεται να αλλάξει την κατάσταση αυτή: Το OpenMP είναι ένα κοινά αποδεκτό πρότυπο. Προγράμματα που αναπτύσσονται βάσει αυτού του προτύπου είναι μεταφέρσιμα σε μια μεγάλη ποικιλία συστημάτων πολυεπεξεργαστών κοινής μνήμης. Οι κατασκευαστές αυτών των συστημάτων δεν έχουν παρά να υλοποιήσουν ένα καλώς καθορισμένο API. Το OpenMP δεν εξαναγκάζει τον προγραμματιστή να αλλάξει το στυλ του προγραμματισμού του. Τα προγράμματα μπορούν να γραφούν πρώτα για σωστή σειριακή εκτέλεση και στη συνέχεια να προστεθούν οι εντολές OpenMP, χωρίς να επηρεαστεί η εκτέλεση στη σειριακή περίπτωση. Έτσι, διαχωρίζεται η εργασία για την επίλυση του προβλήματος από την παραλληλοποίηση του. Η διαδικασία παραλληλοποίησης είναι καθοδηγούμενη από τον χρήστη. Αυτό σημαίνει ότι ο μεταφραστής δε χρειάζεται να κάνει διεξοδική ανάλυση του κώδικα, αλλά αρκεί να βασιστεί στις πληροφορίες που του παρέχει ο χρήστης. Με αυτόν τον τρόπο ο χρήστης έχει πλήρη έλεγχο στο τι και πώς θα παραλληλιστεί. Πιο γενικά, τα πλεονεκτήματα: Παρέχει φορητό κώδικα για multithreading 27

28 Απλό (δεν χρειάζεται να ασχοληθούμε με το μήνυμα που περνάει Παρέχει επεκτασιμότητα Στοιχειώδες προγραμματισμός (μπορεί να λειτουργήσει σε ένα μέρος του προγράμματος, καμία δραματική αλλαγή στον κώδικα δεν είναι απαραίτητη) Ενιαίο κώδικα για τόσο σειριακές όσο και παράλληλες εφαρμογές Μπορεί να χρησιμοποιηθεί σε διάφορους επιταχυντές, όπως ο GPGPU Και τα μειονεκτήματα: Κίνδυνος για εισαγωγή δύσκολου debug για σφάλματα συγχρονισμού Λειτουργεί αποτελεσματικά μόνο σε πλατφόρμες πολλαπλών επεξεργαστών με κοινόχρηστη μνήμη Απαιτεί έναν compiler που υποστηρίζει OpenMP Η επεκτασιμότητα περιορίζεται από την αρχιτεκτονική της μνήμης Δεν υπάρχει υποστήριξη για σύγκριση και αλλαγή 2.6. Εντολές OpenMP για C/C++ Οι περισσότερες οδηγίες στο OpenMP είναι οδηγίες προς τον compiler και η σύνταξη τους έχει την ακόλουθη μορφή: #pragma omp directive-name [clauses...] Επομένως, είναι δυνατή η αγνόηση τους από τον compiler. Οι περισσότερες οδηγίες στο OpenMP εφαρμόζονται σε δομημένα τμήματα κώδικα (structured blocks). Αυτό σημαίνει πως τα τμήματα που περικλείονται σε μία οδηγία πρέπει να έχουν ένα μοναδικό σημείο εισόδου στην αρχή τους και ένα μοναδικό σημείο εξόδου στο τέλος τους. Κάθε οδηγία στο OpenMP ανήκει σε μια από τις ακόλουθες 5 κατηγορίες: 1. Παράλληλες Περιοχές (Parallel Regions) 2. Διαχείριση Εμβέλειας Δεδομένων 3. Διαμοίραση Έργου (Work-sharing) 4. Συγχρονισμός 5. Συναρτήσεις χρόνου εκτέλεσης/ μεταβλητές περιβάλλοντος Οι εντολές ακολουθούν τις συμβάσεις του προτύπου C/C++. Είναι case sensitive, πρέπει να υπάρχει ένα και μόνο ένα όνομα ανά οδηγία και κάθε οδηγία εφαρμόζεται μόνο στο αμέσως επόμενο block εντολών το οποίο πρέπει να είναι ένα δομημένο block. Επίσης, μακρές οδηγίες μπορούν να συνεχιστούν σε επόμενες γραμμές αρκεί στο τέλος κάθε γραμμής να τοποθετείται ο χαρακτήρας της ανάποδης καθέτου ( \ ). 28

29 Η εντολή parallel Αυτή η εντολή είναι η βασικότερη από όλες, αφού ορίζει την περιοχή του κώδικα που επιθυμούμε να εκτελεστεί παράλληλα. Μια παράλληλη περιοχή είναι ένα τμήμα κώδικα το οποίο θα εκτελεστεί από πολλαπλά νήματα. Παρακάτω φαίνεται ο τρόπος σύνταξής της: #pragma omp parallel [clause...] Όταν ένα νήμα φτάσει σε μια οδηγία παράλληλης περιοχής, δημιουργεί μια ομάδα από νήματα και το ίδιο γίνεται ο master της ομάδας. Ο master είναι κι ο ίδιος μέλος της ομάδας. Ο κώδικας της παράλληλης περιοχής αντιγράφεται τόσες φορές όσα τα νήματα και δίδεται σε αυτά για να τον εκτελέσουν. Γενικά, δεν υπάρχει συγχρονισμός μεταξύ των νημάτων. Κάθε νήμα μπορεί να φτάσει σε οποιοδήποτε σημείο μέσα στη παράλληλη περιοχή, σε ακαθόριστη χρονική στιγμή. Στο τέλος της παράλληλης περιοχής υπονοείται ένα φράγμα, πέρα από το οποίο μόνο ο master θα συνεχίσει την εκτέλεση του προγράμματος. Το OpenMP παρέχει τη δυνατότητα δημιουργίας παράλληλης περιοχής μέσα σε μια άλλη παράλληλη περιοχή (τακτική που πρέπει γενικά να αποφεύγεται). Η φωλιασμένη αυτή παράλληλη περιοχή, καταλήγει στη δημιουργία μιας καινούριας ομάδας από νήματα η οποία αποτελείται εξ' ορισμού από ένα νήμα. Ωστόσο, διάφορες υλοποιήσεις μπορούν να επιτρέψουν παραπάνω από ένα νήμα σε μια φωλιασμένη παράλληλη περιοχή. Ο αριθμός των νημάτων που δημιουργούνται κατά την είσοδο σε μια παράλληλη περιοχή μπορεί να καθοριστεί από τρεις παράγοντες, οι οποίοι κατά σειρά προτεραιότητας είναι: α. Η χρήση της συνάρτησης βιβλιοθήκης omp_set_num_threads(). β. Η τιμή της μεταβλητής περιβάλλοντος OMP_NUM_THREADS. γ. Η χρήση της φράσης default (προκαθορισμένη υλοποίηση). Επίσης, υπάρχει η δυνατότητα δυναμικής προσαρμογής του αριθμού των νημάτων για μία συγκεκριμένη παράλληλη περιοχή. Αυτό μπορεί να επιτευχθεί με τους εξής δύο τρόπους: α. Η χρήση της συνάρτησης βιβλιοθήκης omp_set_dynamic(). β. Η τιμή της μεταβλητής περιβάλλοντος OMP_DYNAMIC. Η αρίθμηση των νημάτων ξεκινάει από τον αριθμό 0, οποίος δίνεται στον master κάθε ομάδας και φτάνει στον αριθμό Ν-1 όπου Ν ο αριθμός των νημάτων. Η ταυτότητα κάθε νήματος μπορεί να βρεθεί χρησιμοποιώντας τη συνάρτηση βιβλιοθήκης omp_get_thread_num(), ενώ ο συνολικός αριθμός των νημάτων μπορεί να βρεθεί με τη χρήση της συνάρτησης βιβλιοθήκης omp_get_num_threads(). Αν και τα νήματα εκτελούν το ίδιο τμήμα κώδικα, ωστόσο, θα θέλαμε να εκτελέσουν διαφορετικά μονοπάτια αυτού του κώδικα. Αυτό επιτυγχάνεται με το να δίνουμε διαφορετικό κομμάτι κώδικα σε κάθε νήμα (για παράδειγμα, με τη χρήση if-else, μοντέλο παραλληλισμού SPMD). Παράδειγμα Απλό πρόγραμμα "Hello World" #include "stdafx.h" #include <stdlib.h> 29

30 #include <stdio.h> #include <omp.h> int _tmain(int argc, _TCHAR* argv[]) { int nthreads, tid; #pragma omp parallel private(tid) { tid); tid = omp_get_thread_num(); printf("hello World from thread = %d\n", omp_get_num_threads(); %d\n", nthreads); if (tid == 0) { nthreads = printf("number of threads = system("pause"); return 0; Σε αυτό το σημείο θα πρέπει να αναφέρουμε μερικούς περιορισμούς που πρέπει να ισχύουν όταν μιλάμε για παράλληλες περιοχές. Πρώτον, μια παράλληλη περιοχή πρέπει να είναι ένα δομημένο block*, το οποίο δεν εκτείνεται σε πολλαπλές ρουτίνες ή σε αρχεία με κώδικα. Δεύτερον, όλες οι διακλαδώσεις που ξεκινούν μέσα σε μια παράλληλη περιοχή, πρέπει να καταλήγουν στην ίδια παράλληλη περιοχή. Τρίτον, μόνο μια συνθήκη if-else επιτρέπεται. Εντολές Διαμοιρασμού Εργασίας Μια εντολή διαμοιρασμού εργασίας αναφέρεται σε μια περιοχή κώδικα. Η περιοχή αυτή θα κατανεμηθεί ανάμεσα στα νήματα της ομάδας που συναντούν την εντολή. Δηλαδή, δεν εκτελούν όλα τα νήματα όλες τις εντολές, αλλά καθένα εκτελεί συγκεκριμένα τμήματα. Οι εντολές διαμοιρασμού εργασίας δεν δημιουργούν καινούρια νήματα και δεν υπάρχει κάποιος συγχρονισμός κατά την είσοδο σε μια τέτοια οδηγία, υπάρχει όμως συγχρονισμός κατά την έξοδο (εισάγεται φράγμα). Υπάρχουν τρεις τύποι εντολών διαμοιρασμού εργασίας: Εντολή FOR: Διαμοιράζει τις επαναλήψεις ενός βρόχου for στα νήματα της τρέχουσας παράλληλης περιοχής. Αντιστοιχεί στο μοντέλο Παραλληλισμού Δεδομένων (Data Parallelism). Χρησιμοποιώντας την εντολή αυτή μπορούμε να επιτύχουμε παραλληλισμό δεδομένων. Όλα τα νήματα θα εκτελέσουν το ίδιο τμήμα κώδικα, αλλά σε διαφορετικά δεδομένα. Αυτό είναι ιδιαίτερα χρήσιμο όταν γίνονται πράξεις με διανύσματα ή πίνακες. 30

31 Προϋποθέτει ότι βρισκόμαστε μέσα σε παράλληλη περιοχή. Ακολουθεί η σύνταξη της οδηγίας: #pragma omp for [clause [clause]...] for_loop όπου clause είναι μία από τις παρακάτω συνθήκες: private(list) (υποδεικνύεται η δημιουργία ιδιωτικού αντιγράφου) firstprivate(list) (επιπλέον αρχικοποίηση με την τιμή της parallel) lastprivate(list) (επιπλέον ανάθεση της τελικής τιμής όπως αυτή προβλέπεται από την ακολουθιακή εκτέλεση) reduction(operator: list) ordered schedule(type [,chunk] ) nowait Η φράση schedule ορίζει τον τρόπο με τον οποίο θα γίνει ο διαμοιρασμός των επαναλήψεων ανάμεσα στα νήματα. Το πρώτο όρισμα της φράσης μπορεί να είναι: static: Οι επαναλήψεις του βρόχου διαιρούνται σε σταθερά κομμάτια και ανατίθενται με προκαθορισμένο τρόπο στα νήματα. dynamic: Όπως και πριν, οι επαναλήψεις του βρόχου διαιρούνται σε ίσα κομμάτια μόνο που αυτή την φορά, όταν ένα νήμα είναι ελεύθερο, ζητά το επόμενο κομμάτι. guided: Μοιάζει με το dynamic αλλά το μέγεθος των κομματιών μειώνεται εκθετικά. runtime: Η απόφαση σχεδιασμού αναβάλλεται μέχρι να αρχίσει να εκτελείται το πρόγραμμα. Κατά την εκτέλεση του προγράμματος καθορίζεται ένας από τους παραπάνω τρόπους. Το ordered επιτρέπει τη σειριακή εκτέλεση ορισμένων εντολών του βρόχου. Τέλος, η φράση nowait, αν υπάρχει, αναιρεί το φράγμα που υπάρχει, όπως είπαμε νωρίτερα, στο τέλος της οδηγίας FOR. Εντολή SECTIONS: Διαμοιράζει την εργασία σε διακριτά δομικά blocks. Κάθε block εκτελείται από ένα νήμα. Αντιστοιχεί στο μοντέλο Συναρτησιακού Παραλληλισμού (Functional Parallelism). Η οδηγία sections είναι μια μη επαναληπτική περιοχή διαμοιρασμού εργασίας. Καθορίζει ότι τα εσωκλειόμενα τμήματα κώδικα θα διαμοιραστούν μεταξύ των νημάτων της ομάδας. Μια οδηγία sections μπορεί να περιέχει περισσότερες από μία, ανεξάρτητες, οδηγίες section. Κάθε τμήμα εκτελείται μια φορά από ένα νήμα της 31

32 ομάδας, ενώ διαφορετικά τμήματα εκτελούνται από διαφορετικά νήματα. Η σύνταξη μιας οδηγίας sections φαίνεται παρακάτω: #pragma omp sections [clause...] newline private (list) firstprivate (list) lastprivate (list) reduction (operator: list) nowait { #pragma omp section newline structured_block #pragma omp section newline structured_block Στο τέλος κάθε οδηγίας section υπονοείται κάποιο φράγμα που θα βοηθήσει στο συγχρονισμό των νημάτων, εκτός κι αν χρησιμοποιηθεί η φράση nowait οπότε τα νήματα δεν περιμένουν για συγχρονισμό μετά το πέρας της εργασίας τους. Οι περιορισμοί που θα πρέπει να ισχύουν στις οδηγίες sections είναι οι εξής: όπως και στις οδηγίες for, απαγορεύεται μια διακλάδωση να εισέρχεται σε ένα block ή να καταλήγει έξω από αυτό. οι οδηγίες section πρέπει να λαμβάνουν χώρα μέσα σε μια οδηγία sections. μόνο μία συνθήκη nowait μπορεί να περιέχεται σε μια οδηγία sections Εντολή SINGLE: Σειριοποιεί ένα τμήμα του κώδικα ώστε να εκτελεστεί υποχρεωτικά από ένα νήμα. Η οδηγία single καθορίζει ότι ο κώδικας που εσωκλείεται από αυτή, θα εκτελεστεί μόνο από ένα νήμα. Το νήμα που θα φτάσει πρώτο στην single οδηγία, αυτό θα εκτελέσει τον κώδικα. Η οδηγία αυτή, είναι χρήσιμη όταν έχουμε τμήματα από κώδικα που δεν εξαρτώνται αποκλειστικά από τα νήματα όπως για παράδειγμα λειτουργίες Ι/Ο. Η σύνταξη μιας οδηγίας single φαίνεται παρακάτω: #pragma omp single [clause...] newline private (list) firstprivate (list) nowait structured_block Τα νήματα που δεν εκτελούν την οδηγία, περιμένουν στο τέλος του εσωκλειόμενου κώδικα, εκτός αν χρησιμοποιηθεί η συνθήκη nowait οπότε τα νήματα δεν θα περιμένουν για να συγχρονιστούν. Οι περιορισμοί που ισχύουν είναι ότι απαγορεύεται μια διακλάδωση να εισέρχεται σε ένα block οδηγίας single ή να καταλήγει έξω από αυτό και ότι μόνο μία συνθήκη nowait μπορεί να χρησιμοποιηθεί σε κάθε οδηγία single. 32

33 Παραδείγματα: 1)FOR #include <stdlib.h> #include <stdio.h> #include <omp.h> #define CHUNKSIZE 100 #define N 1000 int main() { int i, chunk; float a[n], b[n], c[n]; for (i = 0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE; #pragma omp parallel shared(a,b,c,chunk) private(i) { #pragma omp for schedule(dynamic,chunk) nowait for (i = 0; i < N; i++) c[i] = a[i] + b[i]; system("pause"); return 0; 2)SECTIONS #include <stdlib.h> #include <stdio.h> #include <omp.h> #define N 1000 int main() { int i; float a[n], b[n], c[n], d[n]; for (i = 0; i < N; i++) a[i] = i * 1.5; b[i] = i ; #pragma omp parallel shared(a,b,c,d) private(i) { #pragma omp sections nowait { #pragma omp section for (i = 0; i < N; i++) c[i] = a[i] + b[i]; #pragma omp section for (i = 0; i < N; i++) d[i] = a[i] * b[i]; 33

34 system("pause"); return 0; Εντολές Συγχρονισμού Οι Εντολές Συγχρονισμού χρησιμοποιούνται για να ελέγξουμε τη σειρά εκτέλεσης των νημάτων μιας ομάδας, έτσι ώστε να εξασφαλίσουμε την ακεραιότητα των δεδομένων. Εντολή Barrier Η οδηγία barrier συγχρονίζει όλα τα νήματα της ομάδας απαιτώντας από κάθε νήμα να σταματήσει, προσωρινά την εκτέλεσή του, στο σημείο όπου υπάρχει η οδηγία barrier οδηγία, μέχρις ότου όλα τα νήματα φτάσουν σε αυτό το σημείο. Στη συνέχεια, όλα τα νήματα ξεκινούν παράλληλα, από εκείνο το σημείο, την εκτέλεσή του κώδικα που ακολουθεί. Η σύνταξη μιας οδηγίας single φαίνεται παρακάτω: #pragma omp barrier newline Κάθε εντολή barrier σε μια παράλληλη περιοχή, πρέπει να αντιμετωπιστεί από όλα τα νήματα ή από κανένα. Η σειρά με την οποία τα νήματα προσπελαύνουν τις εντολές διαμοιρασμού εργασίας και τις εντολές barrier σε μια παράλληλη περιοχή, πρέπει να είναι ίδια για κάθε νήμα της ομάδας. Εντολή Master Η εντολή master καθορίζει μια περιοχή η οποία θα εκτελεστεί μόνο από το master νήμα της ομάδας. Όλα τα άλλα νήματα της ομάδας δεν εκτελούν αυτό το τμήμα κώδικα. Για την εντολή αυτή, δεν υπάρχει κάποιο φράγμα που να υπονοείται. Δεν επιτρέπονται διακλαδώσεις έξω από το μπλοκ της master. Η σύνταξη μιας εντολής master φαίνεται παρακάτω: #pragma omp master newline Εντολή Critical Η Εντολή critical καθορίζει μια περιοχή η οποία πρέπει να εκτελεστεί μόνο από ένα νήμα κάθε φορά. Κυρίως χρησιμοποιείται για να ορίσουμε μια κρίσιμη περιοχή. Σε μια κρίσιμη περιοχή, μόνο μια διεργασία μπορεί να εγγράψει ή να διαβάσει μια κοινή μεταβλητή διασφαλίζοντας έτσι την ακεραιότητα αυτής της μεταβλητής. Η σύνταξη της εντολής critical είναι η παρακάτω: #pragma omp critical [ name ] newline 34

35 Το name είναι ένα αναγνωριστικό όνομα της κρίσιμης περιοχής που καθορίζει η εντολή critical. Οι κρίσιμες περιοχές που δεν έχουν όνομα θεωρείται ότι έχουν την ίδια ταυτότητα, ενώ διαφορετικές εντολές critical που έχουν το ίδιο όνομα, θεωρείται ότι αναφέρονται στην ίδια κρίσιμη περιοχή. Αν ένα νήμα εκτελεί μια κρίσιμη περιοχή και ένα άλλο νήμα φτάσει σε αυτή την κρίσιμη περιοχή και προσπαθήσει να την εκτελέσει, τότε το δεύτερο νήμα θα αναγκαστεί να περιμένει μέχρι το πρώτο νήμα να φύγει από την κρίσιμη περιοχή. Απαγορεύονται οι διακλαδώσεις μέσα ή έξω από ένα μπλοκ CRITICAL. Εντολή ATOMIC Η Εντολή atomic καθορίζει ότι η συγκεκριμένη θέση μνήμης πρέπει να ενημερώνεται ατομικά (atomic action), μην επιτρέποντας πολλά νήματα να ενημερώσουν ταυτόχρονα τη συγκεκριμένη θέση μνήμης. Έτσι απαγορεύει σε οποιοδήποτε νήμα να διακόψει κάποιο άλλο νήμα που βρίσκεται στη διαδικασία προσπέλασης ή αλλαγής της τιμής μιας μεταβλητής μοιραζόμενης μνήμης. Η σύνταξη της εντολής atomic είναι η παρακάτω: #pragma omp atomic newline Εντολή FLUSH Η εντολή flush καθορίζει ένα σημείο συγχρονισμού στο οποίο η υλοποίηση του κώδικα πρέπει να παρέχει ένα συνεπές στιγμιότυπο της μνήμης. Σε αυτό το σημείο η τρέχουσα τιμή μιας μοιραζόμενης μεταβλητής εγγράφεται άμεσα στη μνήμη από τη cache (write back). Η σύνταξη της εντολής flush είναι η παρακάτω: #pragma omp flush (var1, var2,...) newline Εντολή ORDERED Η εντολή ordered καθορίζει ότι οι επαναλήψεις του εσωκλειόμενου βρόγχου θα εκτελεστούν με τη σειρά όπως θα εκτελούνταν σε ένα σειριακό υπολογιστή. Η σύνταξη της εντολής ordered είναι η παρακάτω: #pragma omp for ordered [clauses...] (loop region) Όταν ένα νήμα το οποίο πρόκειται να εκτελέσει την πρώτη επανάληψη του βρόγχου, συναντήσει μια ordered εντολή, τότε προχωράει την ordered περιοχή χωρίς να περιμένει. Αντίθετα, όταν νήματα που εκτελούν επόμενες επαναλήψεις, συναντήσουν την ίδια ordered εντολή, τότε περιμένουν στην αρχή της ordered περιοχής μέχρι να τελειώσουν από αυτή την περιοχή όλα τα νήματα που εκτελούν προηγούμενες επαναλήψεις. Οι περιορισμοί που πρέπει να ισχύουν σε μια ordered εντολή είναι ότι, πρώτον, μια ordered εντολή μπορεί να εμφανίζεται μόνο σε μια for ή παράλληλη for εντολή. Δεύτερον, ένας βρόγχος ο οποίος περιέχει μια ordered εντολή, θα πρέπει να είναι βρόγχος με μια 35

36 ordered συνθήκη. Τρίτον, μια επανάληψη ενός βρόγχου δεν πρέπει να εκτελεί την ίδια ordered εντολή παραπάνω από μια φορά και δεν πρέπει να εκτελεί πάνω από μία ordered εντολές Εντολή THREADPRIVATE Η εντολή threadprivate καθορίζει ότι καθολικά αντικείμενα (ή μεταβλητές) μπορούν να γίνουν προσωρινά ιδιωτικά για κάποιο νήμα. Με αυτό τον τρόπο, μπορούμε να ορίσουμε καθολικά αντικείμενα, αλλά να μετατρέψουμε την εμβέλειά τους και να τα κάνουμε τοπικά για κάποιο νήμα. Οι μεταβλητές για τις οποίες ισχύει η εντολή threadprivate συνεχίζουν να είναι ιδιωτικές, για κάθε νήμα, ακόμα και σε διαφορετικές παράλληλες περιοχές. Η σύνταξη της threadprivate εντολής είναι η παρακάτω: #pragma omp threadprivate (list) Η εντολή πρέπει να εμφανίζεται αμέσως μετά τις δηλώσεις των καθολικών μεταβλητών (άρα πριν τη main()). Μετά την εντολή, η συγκεκριμένη μεταβλητή που έχει γίνει threadprivate, αντιγράφεται σε κάθε νήμα και κάθε νήμα κρατάει το δικό του αντίγραφο, έτσι ώστε δεδομένα τα οποία εγγράφονται από ένα νήμα να μην είναι ορατά στα υπόλοιπα. Κατά την πρώτη είσοδο σε μια παράλληλη περιοχή, οι τιμές των threadprivate μεταβλητών θεωρούνται ακαθόριστες, εκτός κι αν έχει χρησιμοποιηθεί στην parallel (section ή for) εντολή, η φράση copyin. Οι μεταβλητές THREADPRIVATE διαφέρουν από τις ιδιωτικές, PRIVATE, μεταβλητές (που θα δούμε στη συνέχεια) επειδή διατηρούνται μεταξύ διαφορετικών παράλληλων περιοχών (parallel sections) του κώδικα. Για να συνεχίσουν οι μεταβλητές να είναι ιδιωτικές για όλες τις παράλληλες περιοχές, θα πρέπει να ισχύουν οι παρακάτω συνθήκες: α. Δεν υπάρχει παράλληλη περιοχή μέσα σε μια άλλη παράλληλη περιοχή. β. Ο αριθμός των νημάτων στις παράλληλες περιοχές πρέπει να είναι ο ίδιος. γ. Ο δυναμικός σχηματισμός νημάτων πρέπει να είναι turned off στη πρώτη παράλληλη περιοχή και να παραμένει ο ίδιος στις υπόλοιπες παράλληλες περιοχές 36

37 Φράσεις Εμβέλειας Δηλώσεων Δεδομένων (Φράσεις Διαμοιρασμού Δεδομένων) Εφ' όσον το OpenMP υλοποιεί μοντέλο προγραμματισμού συστήματα μοιραζόμενης μνήμης, οι περισσότερες μεταβλητές είναι εξ' ορισμού μοιραζόμενες. Οι καθολικές μεταβλητές είναι γενικά μοιραζόμενες. Εξαιρούνται ο μετρητές βρόχων for που είναι εξ' ορισμού ιδιωτικές. Επίσης, ιδιωτικές είναι οι τοπικές μεταβλητές και τα ορίσματα συναρτήσεων που καλούνται μέσα σε παράλληλες περιοχές Οι Φράσεις Εμβέλειας Δηλώσεων Δεδομένων του OpenMP χρησιμοποιούνται για τον ρητό καθορισμό της εμβέλειας και του διαμοιρασμού των δεδομένων και είναι οι εξής: PRIVATE Με την φράση αυτή μπορούμε να ορίσουμε μεταβλητές ιδιωτικές για κάθε νήμα. Αυτό σημαίνει ότι κάθε νήμα έχει ένα δικό της αντίγραφο της μεταβλητής στην ιδιωτική της μνήμη. Όλες οι αναφορές στις private μεταβλητές αλλάζουν και μετατρέπονται σε αναφορές στα αντίγραφα των μεταβλητών. FIRSTPRIVATE Συνδυάζει τη λειτουργία της φράσης PRIVATE με τη δυνατότητα αρχικοποίησης των μεταβλητών κατά την είσοδο στη παράλληλη περιοχή. Τα αντίγραφα της μεταβλητής FIRSTPRIVATE παίρνουν την τιμή που είχε η μεταβλητή πριν την είσοδο στη παράλληλη περιοχή. LASTPRIVATE Ακριβώς το αντίθετο με την FIRSTPRIVATE κάνει η δήλωση LASTPRIVATE. Στην περίπτωση αυτή μια μεταβλητή LASTPRIVATE διατηρεί, κατά την έξοδο από τη παράλληλη περιοχή, την τελευταία τιμή που απέκτησε κάποιο από τα αντίγραφά της. SHARED 37

38 Η shared ορίζει μεταβλητές ως διαμοιραζόμενες σε όλα τα νήματα. Αυτό σημαίνει ότι αν ένα νήμα αλλάξει την τιμή μιας τέτοιας μεταβλητής, η αλλαγή θα είναι ορατή σε όλα τα νήματα. Τα νήματα δεν έχουν τοπικό αντίγραφο της μεταβλητής αυτής, χρησιμοποιούν την θέση της στη διαμοιραζόμενη μνήμη. Ο προγραμματιστής είναι υπεύθυνος για να φροντίσει να μην δημιουργήσουν προβλήματα ταυτόχρονες αναγνώσεις και εγγραφές της ίδιας μεταβλητής από πολλά νήματα. Οι shared μεταβλητές διατηρούν την τιμή τους κατά την έξοδο από παράλληλη περιοχή. REDUCTION Η φράση αυτή εκτελεί μία πράξη αναγωγής σε κάποιες μοιραζόμενες μεταβλητές. Όλες οι μεταβλητές που βρίσκονται σε μία παράλληλη περιοχή και υπάρχουν στη λίστα της φράσης reduction, αντιγράφονται σε τοπικά αντίγραφα, ένα για κάθε νήμα. Με την ολοκλήρωση των επαναλήψεων, εφαρμόζεται η πράξη που ορίζεται στο πεδίο operator και το τελικό αποτέλεσμα αποθηκεύεται στην αρχική θέση τους. COPYIN Με την παράμετρο αυτή μπορούμε να δώσουμε αρχική τιμή σε threadprivate μεταβλητές. Όταν τα νήματα μπαίνουν σε μία παράλληλη περιοχή, οι threadprivate μεταβλητές δεν έχουν κάποια αρχική τιμή. Με την χρήση της παραμέτρου αυτής, μια threadprivate μεταβλητή αρχικοποιείται στην τιμή που έχει η μεταβλητή στο master thread. Ρουτίνες Συστήματος Εκτέλεσης Το πρότυπο OpenMP ορίζει ένα API με κλήσεις σε ρουτίνες του συστήματος εκτέλεσης για διάφορες λειτουργίες (εύρεση / καθορισμός διαθέσιμων νημάτων / επεξεργαστών, κλειδώματα, μέτρηση χρόνου εκτέλεσης, δυναμική προσαρμογή αριθμού νημάτων κλπ.). Ανάλογα με την υλοποίηση, ορισμένες κλήσεις συναρτήσεων μπορεί να μην επιφέρουν αποτέλεσμα, αν δεν υποστηρίζονται από το σύστημα εκτέλεσης. Οι Ρουτίνες Συστήματος Εκτέλεσης είναι: OMP_SET_NUM_THREADS Η συνάρτηση αυτή ορίζει το πλήθος των νημάτων που θα δημιουργηθούν σε μία παράλληλη περιοχή (θετικός ακέραιος). Πρέπει να κληθεί σε μέρη του κώδικα που εκτελούνται σειριακά (από το master thread). Η συνάρτηση αυτή υπερέχει της μεταβλητής περιβάλλοντος OMP_NUM_THREADS. Επίσης, αν η δυνατότητα για δυναμική δημιουργία νημάτων είναι ενεργοποιημένη, η συνάρτηση δεν ορίζει τον αριθμό των νημάτων που θα δημιουργηθούν αλλά το μέγιστο πλήθος που μπορούν να δημιουργηθούν. OMP_GET_NUM_THREADS Η συνάρτηση αυτή επιστρέφει το πλήθος των νημάτων που εκτελούνται εκείνη τη στιγμή. Σε μία παράλληλη περιοχή επιστρέφει τον αριθμό των νημάτων που δημιουργήθηκαν για την περιοχή αυτή, ενώ σε μία ακολουθιακή περιοχή επιστρέφει την τιμή 1. 38

39 OMP_GET_MAX_THREADS Η συνάρτηση αυτή επιστρέφει την μέγιστη τιμή που η προηγούμενη συνάρτηση (OMP_GET_NUM_THREADS) μπορεί να επιστρέψει. Πρακτικά επιστρέφει την τιμή της μεταβλητής περιβάλλοντος OMP_NUM_THREADS ή την τιμή του τέθηκε από τη συνάρτηση omp_set_num_threads(). OMP_GET_THREAD_NUM Η συνάρτηση αυτή επιστρέφει τον αριθμό του νήματος που την καλεί. Το master thread έχει την τιμή 0. Αν κληθεί σε μια ακολουθιακή περιοχή ή σε μια εμφωλευμένη παράλληλη περιοχή θα επιστρέψει την τιμή 0. OMP_GET_THREAD_LIMIT Επιστρέφει τον μέγιστο αριθμό των νημάτων που είναι διαθέσιμα στο πρόγραμμα. OMP_GET_NUM_PROCS Με την κλήση της συνάρτησης αυτής μπορούμε να μάθουμε το πλήθος των επεξεργαστών που είναι διαθέσιμοι στο πρόγραμμα. OMP_IN_PARALLEL Η συνάρτηση αυτή ορίζει αν τη στιγμή της κλήσης της βρισκόμαστε σε παράλληλη ή σειριακή περιοχή. Επιστρέφει την τιμή 0 αν είμαστε σε σειριακή περιοχή, η μια μη μηδενική τιμή αν είμαστε σε parallel περιοχή. OMP_SET_DYNAMIC Με τη συνάρτηση αυτή μπορούμε να ενεργοποιήσουμε τη δυνατότητα για δυναμικό ορισμό του πλήθους των νημάτων για κάθε παράλληλη περιοχή. Αν η συνάρτηση επιστρέψει μη μηδενική τιμή τότε σημαίνει ότι η ενεργοποίηση αυτού του μηχανισμού έγινε με επιτυχία, ενώ σε αντίθετη περίπτωση ο μηχανισμός δεν έχει ενεργοποιηθεί. Η συνάρτηση αυτή έχει προτεραιότητα από την OMP_DYNAMIC μεταβλητή περιβάλλοντος. Η κλήση της πρέπει να γίνει από το σειριακό τμήμα του προγράμματος. Η προκαθορισμένη κατάσταση εξαρτάται από την υλοποίηση του OpenMP. OMP_GET_DYNAMIC Με τη συνάρτηση αυτή μπορούμε να δούμε αν η δυνατότητα για δυναμικό ορισμό του αριθμού των νημάτων είναι ενεργοποιημένη. OMP_SET_NESTED Με τη συνάρτηση αυτή μπορούμε να ενεργοποιήσουμε και να απενεργοποιήσουμε τη δυνατότητα για ένθετο παραλληλισμό. Εξ ορισμού αυτή η δυνατότητα είναι απενεργοποιημένη. Η τιμή nested = 0 σημαίνει απενεργοποίηση, ενώ μια μη-μηδενική τιμή σημαίνει ενεργοποίηση. Η κλήση της συνάρτησης υπερισχύει της τιμής της μεταβλητής περιβάλλοντος OMP_NESTED. 39

40 OMP_GET_NESTED Εξετάζει αν επιτρέπεται ένθετος παραλληλισμός ή όχι. Η επιστροφή μη-μηδενικής τιμής σημαίνει ότι επιτρέπεται. OMP_INIT_LOCK Αρχικοποίηση μεταβλητής κλειδώματος. Αρχικά η μεταβλητή είναι ξεκλείδωτη. OMP_DESTROY_LOCK Διαγραφή μεταβλητής κλειδώματος. Η μεταβλητή πρέπει να έχει αρχικοποιηθεί. OMP_SET_LOCK Αναγκάζει το νήμα που την εκτελεί να περιμένει μέχρι το κλείδωμα να ελευθερωθεί. Τότε το νήμα καταλαμβάνει το κλείδωμα και συνεχίζει την εκτέλεσή του. Το κλείδωμα πρέπει να έχει αρχικοποιηθεί. OMP_UNSET_LOCK Αυτή η ρουτίνα απελευθερώνει ένα κλείδωμα. Το κλείδωμα πρέπει να έχει αρχικοποιηθεί. OMP_TEST_LOCK Το νήμα που εκτελεί αυτή τη ρουτίνα ελέγχει τη κατάσταση ενός κλειδώματος, χωρίς όμως να μπει σε κατάσταση αναμονής αν το κλείδωμα δεν είναι διαθέσιμο. Επιστρέφει 0 αν το κλείδωμα είναι ελεύθερο, αλλιώς επιστρέφει μη-μηδενική τιμή. Το κλείδωμα πρέπει να έχει αρχικοποιηθεί. OMP_GET_WTIME Ρουτίνα για τη μέτρηση χρόνου εκτέλεσης (wall clock όχι CPU). Επιστρέφει μια τιμή διπλής ακρίβειας. Συνήθως χρησιμοποιείται σε ζεύγη ώστε ο χρόνος που πέρασε για την εκτέλεση ενός τμήματος κώδικα υπολογίζεται ως διαφορά δύο μετρήσεων. Η μέτρηση είναι συνεπής για το ίδιο νήμα, επομένως δεν έχει νόημα η αφαίρεση δύο τιμών που έχουν μετρηθεί σε διαφορετικά νήματα. OMP_GET_WTICK Επιστρέφει μια τιμή διπλής ακρίβειας, που είναι ο χρόνος μεταξύ δύο διαδοχικών κτύπων ρολογιού. Μεταβλητές Περιβάλλοντος Το OpenMP παρέχει μια σειρά μεταβλητών περιβάλλοντος που βοηθούν στην εκτέλεση του παράλληλου κώδικα. Τα ονόματα των μεταβλητών γράφονται πάντα σε κεφαλαία. OMP_SCHEDULE Αφορά μόνο στις οδηγίες for, parallel for που έχουν ορίσει τη φράση schedule ίση με RUNTIME. Η τιμή αυτής της μεταβλητής καθορίζει το τρόπο εκτέλεσης των επαναλήψεων. 40

41 OMP_NUM_THREADS Ορίζει τον μέγιστο επιτρεπόμενο αριθμό νημάτων. OMP_DYNAMIC Επιτρέπει ή απαγορεύει τη δυναμική προσαρμογή του διαθέσιμου αριθμού νημάτων στις παράλληλες περιοχές. Λαμβάνει τις τιμές TRUE και FALSE. OMP_NESTED Επιτρέπει ή απαγορεύει ένθετο παραλληλισμό, αν το επιτρέπει η υλοποίηση. Λαμβάνει τις τιμές TRUE και FALSE. OMP_STACKSIZE Ελέγχει το μέγεθος στοίβας των (non-master) νημάτων. OMP_WAIT_POLICY Ορίζει αν η αναμονή των νημάτων στην οδηγία wait θα είναι ενεργός (busy waiting) ή όχι. Λαμβάνει τιμές ACTIVE και PASSIVE. Εξαρτάται από την υλοποίηση. OMP_THREAD_LIMIT Ορίζει το μέγιστο αριθμό νημάτων που μπορεί να χρησιμοποιήσει ένα πρόγραμμα OpenMP. Άρα OMP_THREAD_LIMIT >= OMP_NUM_THREADS. Εικόνα 2: OpenMP language extensions 41

42 ΚΕΦΑΛΑΙΟ 3: ΑΛΓΟΡΙΘΜΟΙ ΟΜΑΔΟΠΟΙΗΣΗΣ 3.1. Ομαδοποίηση Ομαδοποίηση (clustering) δεδομένων είναι μία διαδικασία οργάνωσης των δεδομένων σε ομάδες (clusters), τέτοια ώστε τα δεδομένα κάθε ομάδας να έχουν κοινά χαρακτηριστικά. Η ομαδοποίηση των δεδομένων γίνεται με διάφορους αλγόριθμους και τεχνικές. Η ομαδοποίηση δεδομένων οδηγεί σε δημιουργία ομάδων των οποίων τα αντικείμενα της κάθε ομάδας παρουσιάζουν κάποια ομοιότητα, ενώ τα αντικείμενα διαφορετικών ομάδων παρουσιάζουν διαφορές. Η τεχνική της ομαδοποίησης υπάγεται στην ευρύτερη κατηγορία των τεχνικών μάθησης χωρίς επίβλεψη. Ανάλυση ομάδων (cluster analysis) ή ομαδοποίηση, είναι ο διαχωρισμός αντικειμένων ενός πληθυσμού με σκοπό να βρεθεί η δομή των δεδομένων. Βασικός στόχος είναι η δημιουργία τέτοιων συνόλων ώστε τα στοιχεία κάθε συνόλου να βρίσκονται πιο κοντά μεταξύ τους απ ότι με τα στοιχεία των άλλων συνόλων. Εκτός αυτού η ανάλυση ομάδων, μπορεί να έχει και άλλους στόχους. Ένα στόχος, για παράδειγμα είναι η διευθέτηση των ομάδων σε μια φυσική ιεραρχία. Αυτό περιλαμβάνει τη διαδοχική ταξινόμηση των ίδιων των ομάδων έτσι ώστε σε κάθε επίπεδο ιεραρχίας οι ομάδες μέσα στην ίδια κατηγορία να είναι πιο όμοιες μεταξύ τους απ ότι αυτές σε διαφορετικές κατηγορίες. Η ανάλυση ομάδων χρησιμοποιείται επίσης για περιγραφική στατιστική (descriptive statistics) για να εξακριβωθεί κατά πόσο τα δεδομένα αποτελούνται από ένα σύνολο ευδιάκριτων υποκατηγοριών, όπου κάθε κατηγορία αντιπροσωπεύει αντικείμενα με σημαντικά διαφορετικές ιδιότητες. Αυτός ο στόχος απαιτεί μια εκτίμηση του βαθμού διαφορετικότητας των αντικειμένων που έχουν καταχωρηθεί σε κάθε κατηγορία. Τέλος, κεντρικός όλων των στόχων είναι η αναζήτηση του βαθμού ομοιότητας (ή διαφορετικότητας) μεταξύ των αντικειμένων που ομαδοποιούνται. Εικόνα 3: Ομαδοποίηση 42

43 Ένας αρκετά γενικός ορισμός του προβλήματος είναι ο εξής: Ένας αλγόριθμος ομαδοποίησης επιχειρεί τη διαμέλιση ενός Α διάστατου χώρου σε κ περιοχές με μεγάλη πυκνότητα σημείων, που χωρίζονται μεταξύ τους από περιοχές χαμηλής πυκνότητας. Φυσικά, η τεχνική της ομαδοποίησης σχετίζεται άμεσα με την τεχνική της βελτιστοποίησης και έτσι, οι εφαρμογές της πολλαπλασιάζονται σε εύρεση ομοιογενών ομάδων στοιχείων με πληρωμή ελάχιστου κόστους, μέγιστου κέρδους, μικρότερης δυνατής διαδρομής και άλλα. Ένα συχνό δίλημμα που προκύπτει στην ομαδοποίηση είναι πιο αλγόριθμος είναι ο κατάλληλος για τα διαθέσιμα δεδομένα. Το σίγουρο είναι ότι δεν υπάρχουν «καλοί» και «κακοί» αλγόριθμοι, αλλά η ποιότητα του καθενός μπορεί να κριθεί από τα αποτελέσματα που δίνει σε μια συγκεκριμένη εφαρμογή. Είναι δύσκολο να δοθεί ένα ενιαίος ορισμός για την ανάλυση ομάδων. Συνήθως εννοείται ο διαχωρισμός του συνόλου των δεδομένων σε αμοιβαία μη αλληλεπικαλυπτόμενα υποσύνολα. Ωστόσο, ανάλογα με τη μέθοδο μπορεί να προκύψουν διαφορετικές ομαδοποιήσεις, αφού κάθε μέθοδος προϋποθέτει διαφορετική δομή στα δεδομένα. Βασική σε όλες τις τεχνικές ομαδοποίησης είναι η επιλογή του τρόπου μέτρησης της απόστασης ή της ανομοιότητας μεταξύ δυο αντικειμένων Εφαρμογές Ομαδοποίησης Η ποικιλία των εφαρμογών της ομαδοποίησης είναι μεγάλη σε πολλά επιστημονικά πεδία. Σημαντικές εφαρμογές εμφανίζονται στον χώρο του marketing, όπου είναι δυνατόν να ανακαλυφθούν ομάδες πελατών με παρόμοια συμπεριφορά, μέσω μια μεγάλης βάσης δεδομένων που έχει καταχωρημένα πολλά δεδομένα σχετικά με τα χαρακτηριστικά της αγοραστικής συμπεριφοράς των πελατών, όπως και τις αγορές που έχουν κατά καιρούς πραγματοποιήσει αυτοί στο παρελθόν. Στην ιατρική, χρησιμοποιείται για την κατηγοριοποίηση των ασθενών ανάλογα με την σοβαρότητα της κατάστασης της υγείας τους. Επίσης, είναι δυνατόν να χρησιμοποιηθεί για τον εντοπισμό ασθενειών ή μολυσμένων κυττάρων. Στον χώρο της βιολογίας, είναι δυνατόν, να ομαδοποιηθούν φυτά και ζώα με παρόμοια χαρακτηριστικά. Στον κλάδο της αστρονομίας υπάρχουν εφαρμογές για την κατηγοριοποίηση των ουράνιων σωμάτων. Στον ολοένα αναπτυσσόμενο τομέα της διοίκησης επιχειρήσεων, όπου με την εφαρμογή τεχνικών ομαδοποίησης αναλύονται η συμπεριφορά και αγοραστική δύναμη και άλλα σχετικά στοιχεία των πελατών. Για παράδειγμα, στη βιολογία η ομαδοποίηση μπορεί να χρησιμοποιηθεί στη δημιουργία ομάδων γονιδίων με παρόμοια δομή. Συχνά τέτοιες ομάδες περιέχουν πρωτεΐνες που συσχετίζονται λειτουργικά. Στην ανάλυση αλληλουχιών, η ομαδοποίηση μπορεί να χρησιμοποιηθεί για το διαχωρισμό ομόλογων αλληλουχιών σε οικογένειες γονιδίων. Η ομαδοποίηση ως έννοια είναι σημαντική όχι μόνο σε πολλές επιστήμες όπως η βιολογία και η ιατρική, αλλά και σε πολλούς τομείς της πληροφορικής όπως η αναγνώριση προτύπων, η εξόρυξη γνώσης, η ανάκτηση δεδομένων, η τεχνητή νοημοσύνη και η 43

44 μηχανική μάθηση. Επίσης, όσον αφορά την επεξεργασία δεδομένων, η ομαδοποίηση μπορεί να συμβάλει στην μείωση των δεδομένων, στην παραγωγή και έλεγχο μίας υπόθεσης και στην πραγματοποίηση μίας πρόβλεψης βασισμένη στις συστάδες. Τα τελευταία χρόνια οι τομείς αυτοί αποκτούν όλο και περισσότερο ενδιαφέρον καθιστώντας έτσι την συσταδοποίηση αντικείμενο εντατικής έρευνας. Στην μείωση των δεδομένων, η ομαδοποίηση μπορεί να χρησιμοποιηθεί με σκοπό την συμπίεση των δεδομένων. Στην περίπτωση, δηλαδή, ενός μεγάλου συνόλου δεδομένων, η ομαδοποίηση δύναται αρχικά να το τμηματοποιήσει σε συστάδες και ύστερα να επεξεργαστεί τους αντιπροσώπους των συστάδων, αντί τα δεδομένα ξεχωριστά. Στην παραγωγή υπόθεσης, η συσταδοποίηση εφαρμόζεται, με σκοπό την διαπίστωση τυχόν υποθέσεων που μπορεί να προκύψουν μετά από την επεξεργασία ενός συνόλου δεδομένων. Για παράδειγμα, είναι δυνατό να βρεθούν δύο μεγάλες συστάδες πελατών, με βάση την ηλικία τους και την χρονική στιγμή που κάνουν τις αγορές τους. Έτσι, μπορούμε να διαπιστώσουμε ότι λ.χ. «οι νέοι προτιμούν να κάνουν τα ψώνια τους τις βραδινές ώρες», ενώ «οι μεγαλύτεροι σε ηλικία κάνουν τα ψώνια τους κυρίως τις πρωινές ώρες». Στον έλεγχο υπόθεσης, μπορεί να χρησιμοποιηθεί η ανάλυση συστάδων για την εξακρίβωση και την αξιολόγηση μίας υπόθεσης. Για παράδειγμα, εάν θέλουμε να εξετάσουμε την υπόθεση «οι μεγαλύτεροι σε ηλικία κάνουν τα ψώνια τους κυρίως τις πρωινές ώρες», πρέπει να συλλέξουμε ένα αντιπροσωπευτικό σύνολο καταστημάτων, τα οποία διαθέτουν στοιχεία των πελατών τους. Αν το αποτέλεσμα της συσταδοποίησης είναι η υπόθεση «οι μεγαλύτεροι σε ηλικία κάνουν τα ψώνια τους κυρίως τις πρωινές ώρες», τότε η υπόθεση επαληθεύεται και από την ανάλυση συστάδων Στάδια Ομαδοποίησης Η διαδικασία της ομαδοποίησης ακολουθεί τα τέσσερα βασικά βήματα: Επιλογή χαρακτηριστικών γνωρισμάτων. Ο στόχος είναι να επιλεγούν τα καταλληλότερα γνωρίσματα στα οποία πρόκειται να εφαρμοστεί η ομαδοποίηση ώστε να επιτυγχάνεται η βέλτιστη ομοιογένεια σε κάθε συστάδα. Έτσι, η προεπεξεργασία των δεδομένων πριν την εφαρμογή της διαδικασίας ομαδοποίησης κρίνεται απαραίτητη. Αλγόριθμοι ομαδοποίησης. Σε αυτό το στάδιο γίνεται η επιλογή ενός αλγορίθμου που θα οδηγήσει σε ένα καλό σχήμα ομαδοποίησης για ένα σύνολο δεδομένων. Για τη επιλογή του αλγορίθμου χρησιμοποιείται το μέτρο γειτνίασης και το κριτήριο ομαδοποίησης, τα οποία ορίζουν απόλυτα τον αλγόριθμο, καθώς επίσης και η δυνατότητά του να καθορίσει ένα σχήμα ομαδοποίησης που να προσαρμόζεται στο συγκεκριμένο σύνολο δεδομένων. 1. Το μέτρο γειτνίασης αναφέρεται στην ομοιότητα δύο αντικειμένων (δηλαδή διανύσματα γνωρισμάτων). Η επιλογή των γνωρισμάτων πρέπει να γίνεται 44

45 προσεχτικά ώστε η συμβολή τους να είναι ίση κατά τον υπολογισμό του μέτρου γειτνίασης και να μην υπερισχύει το ένα έναντι του άλλου. Η γειτνίαση των προτύπων συνήθως μετριέται με βάση μία συνάρτηση απόστασης που ορίζεται για ζεύγη προτύπων. Η συνάρτηση απόστασης η οποία επιλέγεται, αποτελεί κάθε φορά το μέτρο της ομοιότητας μεταξύ των προτύπων. Με βάση αυτό το μέτρο γίνεται η καταχώρηση τους στην ίδια ή σε διαφορετικές ομάδες 2. Το κριτήριο ομαδοποίησης εκφράζεται βάση μιας συνάρτησης κόστους ή κάποιου άλλου τύπου κανόνων. Είναι σημαντικό να γνωρίζουμε τον τύπο των συστάδων που θα προκύψουν στο σύνολο δεδομένων, για να διαλέξουμε το κατάλληλο κριτήριο που θα ταιριάζει στο σύνολο δεδομένων και θα έχει ως αποτέλεσμα μία επιτυχημένη τμηματοποίηση. Επικύρωση αποτελεσμάτων. Σε αυτή τη φάση αξιολογούνται τα αποτελέσματα του αλγορίθμου ομαδοποίησης σύμφωνα με κατάλληλα κριτήρια ορθότητας ομαδοποίησης και τεχνικές. Η ποιότητα της ομαδοποίησης εξαρτάται από την ομοιότητα(δηλαδή μεγάλη ομοιότητα εντός της συστάδας - μικρή ομοιότητα μεταξύ των συστάδων) και την μέθοδο υλοποίησης της ομαδοποίησης. Το πόσο επιτυχημένο θεωρείται το αποτέλεσμα της ομαδοποίησης δεδομένων, εξαρτάται από τα κριτήρια που θα χρησιμοποιηθούν για τον διαχωρισμό των στοιχείων σε ομάδες. Η σωστή επιλογή των κριτηρίων αυτών είναι ένα πολύ σημαντικό ζήτημα. Ερμηνεία των αποτελεσμάτων. Αποτελεί το τελευταίο στάδιο της διαδικασίας ομαδοποίησης, όπου οι αναλυτές καλούνται να εξάγουν γνώση από τις παραχθείσες συστάδες, συνδυάζοντας κι άλλα στοιχεία, αναλύσεις, με σκοπό το καλύτερο και εγκυρότερο αποτέλεσμα Τρόποι Ομαδοποίησης Οι αλγόριθμοι που επιλύουν προβλήματα ομαδοποίησης είναι πολλοί και στηρίζονται σε διαφορετικές τεχνικές. Η επιλογή εξαρτάται από τη μορφή των δεδομένων και από τον χρήστη. Οι αλγόριθμοι ομαδοποίησης χωρίζονται γενικά σε 2 κύριες κατηγορίες: Ιεραρχικοί αλγόριθμοι (hierarchical) Οι ιεραρχικοί αλγόριθμοι βρίσκουν διαδοχικές ομάδες, χρησιμοποιώντας κάθε φορά ήδη καθιερωμένες ομάδες. Οι ιεραρχικοί αλγόριθμοι χωρίζονται στους συσσωρευτικούς (agglomerative) και στους διαχωριστικούς (divisive). Οι συσωρευτικοί ξεκινούν θεωρώντας ότι κάθε σημείο είναι ένα από μόνο του μια ομάδα που περιέχει μόνο τον εαυτό του και στη συνέχεια πραγματοποιούν συγχωνεύσεις. Οι διαιρετικοί λειτουργούν αντίστροφα. Θεωρούν ότι αρχικά υπάρχει μία ομάδα με μέσα όλα τα σημεία και στη συνέχεια διαιρούν την ομάδα αυτή σε μικρότερες. 45

46 Μη ιεραρχικοί ή διαχωριστικοί αλγόριθμοι (partitioned) Οι διαχωριστικοί αλγόριθμοι χωρίζουν τα δεδομένα από την αρχή σε ένα συγκεκριμένο αριθμό από ομάδες και έπειτα βελτιστοποιούν το αποτέλεσμα. Και αυτοί χωρίζονται σε περεταίρω κατηγορίες. Οι αλγόριθμοι που είναι βασισμένοι στην πυκνότητα δημιουργούν ομάδες με βάση την πυκνότητα των αντικειμένων στο χώρο. Ένα σημείο το οποίο ανήκει σε κάποια ομάδα θα πρέπει να έχει στη γειτονιά του (ορίζεται η ακτίνα της γειτονιάς του σημείου) ένα συγκεκριμένο αριθμό από άλλα σημεία. 3. Ιεραρχική ομαδοποίηση Εικόνα 4: Κατηγορίες Clustering Στην ιεραρχική ομαδοποίηση τα στιγμιότυπα ομαδοποίησης δίνονται με μορφή δενδρογράμματος. Στα δενδρογράμματα αυτά, επιλέγεται ένα επίπεδο που θα τα κλαδευτούν. Το σημείο που θα κλαδευτεί κάποιο δενδρόγραμμα δείχνει τον αριθμό των ομάδων που θα προκύψουν καθώς και τα σημεία που περιέχει η κάθε ομάδα. Τα βασικά βήματα του ιεραρχικού αλγόριθμου πάνω σε ένα σύνολο αντικειμένων Ν και έναν πίνακα αποστάσεων Ν*Ν είναι τα εξής: 1. Κάθε αντικείμενο ανατίθεται σε μια ομάδα, έτσι ώστε αν έχουμε Ν αντικείμενα να έχουμε και Ν ομάδες. Οι αποστάσεις μεταξύ των ομάδων είναι ίδιες με τις αποστάσεις μεταξύ των αντικειμένων που περιέχονται στις ομάδες 2. Εύρεση του πιο όμοιου ζευγαριού ομάδων και συγχώνευσή του σε μια ομάδα, έτσι ώστε να υπάρχει μια ομάδα λιγότερο. 3. Υπολογισμός των αποστάσεων μεταξύ της νέας ομάδας και των παλαιών ομάδων. 46

47 4. Επανάληψη των βημάτων 2 και 3, έως ότου όλα τα αντικείμενα να ανήκουν σε μια ομάδα μεγέθους Ν. Οι ιεραρχικές τεχνικές χωρίζονται στις Συσωρευτικές και Διαιρετικές. Συσωρευτική ομαδοποίηση Οι συσωρευτικές τεχνικές αρχικά θεωρούν ότι κάθε σημείο είναι από μόνο του μια ξεχωριστή ομάδα και προχωρούν σε συγχωνεύσεις αυτών, μέχρι όλα τα σημεία να τοποθετηθούν σε μία (bottom-up). Στην αρχή της διαδικασίας κάθε δεδομένο θεωρείται ως ξεχωριστό cluster και σε κάθε βήμα του αλγορίθμου γίνεται η ένωση μικρότερων ομάδων, με βάση κάποιο κριτήριο, απόσταση ή ομοιότητα, σε μεγαλύτερα μέχρι να δημιουργηθεί μία ενιαία ομάδα με όλα τα δεδομένα. Η μέθοδος αυτή απαιτεί την εύρεση μία ποσότητας που ονομάζεται ομοιότητα/απόσταση ομάδων (cluster similarity/distance), και η οποία περιγράφει το μέτρο ομοιότητας ή απόστασης των ομάδων. Για αυτήν την μέθοδο υπάρχουν διάφοροι αλγόριθμοι, οι διαφορές των οποίων κυρίως βρίσκονται στον τρόπο εύρεσης της απόστασης ή της ομοιότητας των clusters. Το βήμα 3(βλέπε πάνω) στους συσωρευτικούς αλγορίθμους γίνεται με 3 διαφορετικούς τρόπους: Στην ομαδοποίηση μονής σύνδεσης (single linkage clustering) θεωρούμε την απόσταση μεταξύ μιας ομάδας και μιας άλλης να είναι ίση με την μικρότερη απόσταση μεταξύ του κάθε μέλους μιας ομάδας και των μελών της άλλης ομάδας. Η μέθοδος αυτή χρησιμοποιεί ως κριτήριο ομοιότητας των clusters την ελάχιστη απόσταση μεταξύ τους. Στην μέθοδο αυτή, λοιπόν, αρχικά όλα τα δεδομένα βρίσκονται σε ξεχωριστά clusters και στη συνέχεια σε κάθε βήμα της επαναληπτικής διαδικασίας υπολογίζονται όλες οι αποστάσεις μεταξύ όλων των clusters που υπάρχουν. Απόσταση μεταξύ δύο clusters θεωρείται η απόσταση μεταξύ των δύο πιο «κοντινών» σημείων τους. Τα clusters που βρίσκονται πιο «κοντά» ενώνονται σε ένα ενιαίο cluster και με αυτόν τον τρόπο συνεχίζεται η επαναληπτική διαδικασία. Στην ομαδοποίηση ολικής σύνδεσης (complete linkage clustering) θεωρούμε απόσταση μεταξύ δυο ομάδων την μέγιστη απόσταση μεταξύ του κάθε μέλους της μιας ομάδας με τα μέλη της άλλης ομάδας. Η μέθοδος αυτή είναι περίπου όμοια με την μέθοδο single linkage. Η μόνη διαφορά που υπάρχει ανάμεσα σε αυτή και την προηγούμενη μέθοδο είναι η μέτρηση της απόστασης ανάμεσα σε δύο clusters. Για την μέθοδο αυτή η απόσταση ανάμεσα σε δύο clusters είναι η απόσταση των πιο απομακρυσμένων σημείων των clusters. 47

48 Στην ομαδοποίηση μέσης σύνδεσης (average linkage clustering) η απόσταση μεταξύ μιας ομάδας και μιας άλλης είναι ίση με τη μέση απόσταση του κάθε μέλους από τα μέλη της άλλης ομάδας. Στην μέθοδο average linkage η απόσταση μεταξύ δύο clusters υπολογίζεται από τον σταθμισμένο μέσο όλων των δυνατών ζευγαριών των clusters. Ο σταθμισμένος μέσος προκύπτει ανάλογα τον αριθμό των κόμβων που υπάρχουν σε κάθε cluster. Διαιρετική ομαδοποίηση Οι διαιρετικές τεχνικές αρχικά θεωρούν ότι όλα τα σημεία ανήκουν σε μία ομάδα. Στη συνέχεια την διαιρούν έως ότου κάθε ομάδα να περιέχει ένα μόνο σημείο (top-down). Στην αρχή της διαδικασίας όλα τα δεδομένα βρίσκονται σε ένα ενιαίο cluster και στην συνέχεια σε κάθε βήμα με βάση κάποιο κριτήριο, τα δεδομένα σπάνε διαδοχικά σε clusters έτσι που τελικά κάθε δεδομένο να αποτελεί και ένα ξεχωριστό cluster. Πλεονεκτήματα και Μειονεκτήματα Ιεραρχικών Τεχνικών: Πλεονεκτήματα: Τερματίζονται σχετικά γρήγορα. Δεν απαιτούν να είναι γνωστός ο αριθμός των ομάδων εκ των προτέρων. Έχουν ενσωματωμένη ευελιξία χάρις στη δυνατότητα που παρέχουν να επιλέγεται το επίπεδο τομής του δενδρογράμματος. Έχουν ευκολία χειρισμού κάθε τύπου μέτρου απόστασης ή ομοιότητας. Οι μέθοδοι αυτές παράγουν ταυτόχρονα και καλές οπτικοποιήσεις των αποτελεσμάτων τους κατά τη διάρκεια της εκτέλεσής τους. Μπορούν να εφαρμοστούν σε πολλούς τύπους δεδομένων και όχι μόνο για δεδομένα που περιέχουν ισοτροπικούς clusters (π.χ. σε clusters με μορφή αλυσίδας, ομόκεντρους). Μειονεκτήματα: Διακρίνονται από αοριστία στον ορισμό των κριτηρίων τερματισμού. Οι ιεραρχικοί αλγόριθμοι δεν επιστρέφουν ποτέ σε έναν ήδη κατασκευασμένο, ενδιάμεσο cluster για να τον βελτιώσουν. Έχουν μεγαλύτερες απαιτήσεις σε υπολογιστική ισχύ από τους διαμεριστικούς αλγόριθμους 48

49 4. Διαχωριστική Ομαδοποίηση (partitional) Η διαχωριστική ομαδοποίηση είναι μία μέθοδος ομαδοποίησης, στην οποία τα δεδομένα διασπώνται άμεσα σε ένα συγκεκριμένο αριθμό από ομάδες. Αρχικά, στην μέθοδο αυτή τα δεδομένα διασπώνται σε ομάδες με κάποιο τρόπο. Στη συνέχεια μέσω μία επαναληπτικής διαδικασίας τα δεδομένα μετακινούνται από την μία ομάδα στην άλλη με βάση ένα κριτήριο. Όταν η διαδικασία τελειώσει τα δεδομένα θα έχουν διαχωριστεί σε ένα συγκεκριμένο αριθμό ομάδων. Στην διαχωριστική ομαδοποίηση, ορίζονται εξαρχής οι ομάδες και τοποθετούνται τα σημεία του συνόλου δεδομένων που είναι διαθέσιμα στις ομάδες αυτές. Στη συνέχεια, επαναπροσδιορίζονται αυτές οι αναθέσεις έως ότου κάποιο κριτήριο τερματισμού εκπληρωθεί. Ουσιαστικά, αν υπάρχει ένα σύνολο δεδομένων πλήθους Ν, κατασκευάζονται k ομάδες και στη συνέχεια βελτιστοποιούνται. Το κυρίως πρόβλημα αυτών των τεχνικών είναι η σωστή επιλογή των ομάδων και του αριθμού k. Όπως και προηγουμένως, αφού έχουν πραγματοποιηθεί όλες οι αναθέσεις των σημείων στις ομάδες, επαναπροσδιορίζονται οι αναθέσεις αυτές. Αυτό μπορεί να συμβεί αν σε κάθε ομάδα αποδοθεί μια τιμή και σιγά σιγά ελαχιστοποιείται. Η τιμή αυτή μπορεί να αποδοθεί με το άθροισμα των τετραγωνικών αποστάσεων από το μέσο όρο στην κάθε ομάδα. K means αλγόριθμος O αλγόριθμος Κ means είναι ο πιο διαδεδομένος αλγόριθμος ομαδοποίησης. Ο αλγόριθμος K means διασπάει τα δεδομένα σε Κ διαφορετικά clusters μέσω μίας επαναληπτικής διαδικασίας, όπου K είναι ένας ακέραιος αριθμός. Η επαναληπτική διαδικασία αυτή τερματίζει από τη στιγμή που θα ικανοποιηθεί ένα συγκεκριμένο κριτήριο. Τα κύρια βήματα του αλγορίθμου περιγράφονται παρακάτω: 1. Αρχικά γίνεται η επιλογή K σημείων στο πεδίο των δεδομένων έτσι ώστε τα σημεία αυτά να αποτελούν τα κέντρα των αρχικών ομάδων 2. Ανάθεσε κάθε δεδομένο σε μία ομάδα για το οποίο η απόσταση του από το κέντρο της ομάδας να είναι η μικρότερη από κάθε άλλη από τα κέντρα των υπολοίπων ομάδων. 3. Όταν όλα τα δεδομένα έχουν ανατεθεί στις ομάδες υπολόγισε ξανά τα κέντρα των ομάδων, παίρνοντας τον μέσο όρο των δεδομένων κάθε ομάδας. 4. Επανέλαβε τα βήματα 2,3 μέχρι να επαληθευτεί κάποιο κριτήριο σύγκλισης Το κριτήριο σύγκλισης του αλγορίθμου, ο τρόπος μέτρησης της απόστασης των δεδομένων με τα κέντρα των ομάδων καθώς και ο τρόπος ανάδειξης των αρχικών κέντρων τους καθορίζουν σε μεγάλο βαθμό την τελική ομαδοποίηση των δεδομένων και ορίζονται από τον χρήστη. 49

50 Εικόνα 5: Αλγόριθμος k-means Ο αλγόριθμος αυτός παραμένει διάσημος επειδή τείνει σε κάποιο όριο πολύ γρήγορα. Όσον αφορά την απόδοση ο αλγόριθμος δεν εγγυάται ότι θα αγγίξει το βέλτιστο. Η ποιότητα της τελική λύσης εξαρτάται πολύ από το αρχικό σύνολο ομάδων και μπορεί να είναι πολύ χαμηλότερη από το συνολικό βέλτιστο. Επίσης, ένα άλλο μειονέκτημα του αλγόριθμου είναι ότι ο αριθμός των ομάδων πρέπει να οριστεί εξαρχής. Bisecting K Means αλγόριθμος Ο αλγόριθμος Bisecting K means χρησιμοποιεί έμμεσα τον K means αλγόριθμο αλλά διαφοροποιείται σε κάποια σημεία από αυτόν. Γενικά θεωρείται ότι λειτουργεί αποδοτικότερα από τον Κ means αλγόριθμο και μπορεί να παράγει ομάδες ομοιόμορφου μεγέθους. Τα βήματα του αλγόριθμου παρουσιάζονται παρακάτω ενώ πρακτικά η όλη διαδικασία τερματίζει μετά από αρκετές επαναλήψεις : 1. Αρχικά όλα τα δεδομένα θεωρούνται ότι βρίσκονται σε μία ενιαία ομάδα 2. Επιλογή μίας ομάδας για την διάσπαση με βάση κάποιο κριτήριο που καθορίζεται από τον χρήστη 3. Διάσπασε την επιλεγμένη ομάδα σε δύο άλλα clusters χρησιμοποιώντας τον K means αλγόριθμο 4. Επανέλαβε τα βήματα 2,3 μέχρι να δημιουργηθεί ο επιθυμητός αριθμός από ομάδες δεδομένων. Ασαφής ομαδοποίηση (Fuzzy clustering) Η διαφορά της Ασαφούς ομαδοποίησης από την κλασσική ομαδοποίηση δεδομένων, είναι ότι πλέον κάθε πρότυπο ανήκει σε όλες τις ομάδες σε κάποιο βαθμό. Όπως αναφέρθηκε προηγουμένως, στην κλασσική ομαδοποίηση δεδομένων δημιουργούνται ομάδες και αναλόγως τοποθετούνται τα πρότυπα σε κάθε μία από αυτές. Εδώ δεν μπορεί ένα πρότυπο να ανήκει ταυτόχρονα σε δύο και παραπάνω ομάδες. Αντίθετα με τη λογική αυτή, στην Ασαφή ομαδοποίηση ορίζεται μια συνάρτηση συμμετοχής. Η συνάρτηση αυτή υποδηλώνει το βαθμό συμμετοχής κάθε προτύπου στην κάθε ομάδα. Οι τιμές που μπορεί να πάρει ο βαθμός συμμετοχής είναι από μηδέν έως ένα. Όσο πιο κοντά στο ένα είναι ο βαθμός συμμετοχής του i προτύπου στην j ομάδα, τόσο πιο μεγάλη σιγουριά υπάρχει για τη συμμετοχή αυτού στη συγκεκριμένη ομάδα. Αντίθετα, όσο πιο κοντά στο μηδέν είναι ο βαθμός συμμετοχής, μεγαλώνουν οι αμφιβολίες για τη συμμετοχή του. Φυσικά δεν είναι 50

51 απαραίτητο όλες οι ομάδες να έχουν ασαφή χαρακτήρα. Είναι πιθανό να προκύψουν και απόλυτες ομάδες όπως και στην κλασσική ομαδοποίηση δεδομένων. Αυτό θα συμβεί αν όλα τα στοιχεία κάποιας ομάδας έχουν βαθμό συμμετοχής ένα Επιλογή Κατάλληλου Αλγορίθμου Η επιλογή του κατάλληλου αλγορίθμου για clustering δεν είναι απλή υπόθεση. Η πληθώρα αλγορίθμων ομαδοποίησης, οι οποίοι υπάρχουν στην βιβλιογραφία, είναι ένα μεγάλο εμπόδιο στην απόφαση και επιλογή του καλύτερου αλγορίθμου για το εκάστοτε πρόβλημα που αντιμετωπίζεται. Ένα σύνολο κριτηρίων αποδοχής έχουν προταθεί για την σύγκριση αλγορίθμων ομαδοποίησης και την διευκόλυνση της επιλογής του πιο κατάλληλου κάθε φορά. Αυτά τα κριτήρια βασίζονται: 1. στον τρόπο με τον οποίο σχηματίζονται τα clusters, 2. την δομή που έχουν τα δεδομένα προς επεξεργασία, 3. και στην ευαισθησία που έχει ο αλγόριθμος σε αλλαγές που δεν επηρεάζουν τη δομή των δεδομένων. Παρόλο αυτά, τα παραπάνω κριτήρια δεν αρκούν για να δοθούν απαντήσεις σε πολύ σημαντικά ερωτήματα όπως: a) ποιο είναι το καλύτερο μέτρο για την σύγκριση της ομοιότητας των στοιχείων, b) πώς πρέπει να αξιοποιηθεί κάποια γνώση που υπάρχει για τα δεδομένα, c) με ποιον τρόπο μπορεί να ομαδοποιήσει κανείς αποτελεσματικά ένα πολύ μεγάλο σύνολο δεδομένων κ.α. Το κυρίως πρόβλημα με τους αλγορίθμους ομαδοποίησης, είναι ότι δεν υπάρχει κανένας που να μπορεί να εφαρμοστεί για όλες τις δυνατές περιπτώσεις δεδομένων και να αναδείξει επιτυχώς την ποικιλία δομών που εμφανίζονται. Το πρόβλημα γίνεται πιο έντονο ειδικά σε πολυδιάστατα σύνολα δεδομένων, που συνήθως χαρακτηρίζουν τα περισσότερα πραγματικά προβλήματα. Αυτό συμβαίνει, γιατί σε κάθε αλγόριθμο χρησιμοποιούνται διαφορετικές υποθέσεις για τη δομή των δεδομένων, διαφορετικά μέτρα σύγκρισης ομοιότητας και διαφορετικά κριτήρια ομαδοποίησης. Τα παραπάνω εξηγούν την πληθώρα των αλγορίθμων ομαδοποίησης που υπάρχουν και ολοένα συνεχίζουν να δημιουργούνται. Κάθε ένας προκύπτει από τις ιδιαίτερες ανάγκες ενός συγκεκριμένου προβλήματος, που κάποιος άλλος αλγόριθμος αδυνατεί να αντιμετωπίσει. Άρα, οι νέοι αλγόριθμοι που εμφανίζονται στοχεύουν να προσαρμοστούν σε συγκεκριμένες προδιαγραφές και να επιλύσουν επιτυχώς μια συγκεκριμένη κατηγορία προβλημάτων, αυτή που τους δημιούργησε. Για όλους τους παραπάνω λόγους, κρίνεται απαραίτητο για κάθε χρήστη ενός αλγορίθμου ομαδοποίησης να γνωρίζει πολύ καλά την τεχνική που ακολουθεί ο αλγόριθμος της 51

52 επιλογής του, να έχει γνώση των λεπτομερειών στον τρόπο με τον οποίο ομαδοποιούνται τα δεδομένα σε clusters και να είναι καλός γνώστης της πληροφορίας που πρόκειται να επεξεργαστεί. Φυσικά, η εμπειρία του σε τεχνικές ομαδοποίησης παίζει πολύ σπουδαίο ρόλο. Όσο περισσότερη πληροφορία για τα δεδομένα έχει στα χέρια του ο χρήστης, τόσο καλύτερα θα εκτιμηθεί η διαδικασία του clustering και τόσο πιο σωστά συμπεράσματα θα προκύψουν. Επίσης η γνώση για τα δεδομένα, βοηθάει στην βελτίωση της ποιότητας των παραγόμενων χαρακτηριστικών, στην επιλογή του καλύτερου μέτρου ομοιότητας και στην όσο το δυνατόν καλύτερη αναπαράσταση των δεδομένων Εγκυρότητα των Αποτελεσμάτων Ομαδοποίησης Στην ομαδοποίηση είναι πολύ σημαντικό να επικυρωθεί η εγκυρότητα των ομάδων, διότι κάθε διαδικασία επεξεργασίας των δεδομένων ή αλλαγή στις εξωτερικές παραμέτρους του αλγορίθμου μπορεί να καταλήξει σε διαφορετικά αποτελέσματα. Εξαιτίας αυτού κρίνεται απαραίτητο να εξεταστούν οι ομάδες μέσα από στατιστικά κριτήρια. 1. Εσωτερικά κριτήρια εγκυρότητας: Κριτήρια εγκυρότητας με βάση τη δομή των ίδιων ομάδων. Αυτά τα κριτήρια δίνουν το μεγαλύτερο σκορ στον αλγόριθμο που παράγει τις ίδιες ομάδες με μεγάλη εσωτερική ομοιότητα και μικρή ομοιότητα μεταξύ των ομάδων. Μειονέκτημα αυτών των κριτηρίων είναι η προκατάληψη υπέρ των αλγορίθμων που στηρίζονται στην ίδια βασική αρχή. Για παράδειγμα ο k-means βελτιστοποιεί τις αποστάσεις μεταξύ των αντικειμένων και ένα εσωτερικό κριτήριο που στηρίζεται στον υπολογισμό αποστάσεων θα υπερεκτιμά το αποτέλεσμα ομαδοποίησης. 2. Εξωτερικά κριτήρια εγκυρότητας: Κριτήρια εγκυρότητας που εξετάζουν το αποτέλεσμα ομαδοποίησης σε σχέση με μια εξωτερική τεχνητή κατασκευή με προκαθορισμένο αριθμό ομάδων. Τα κριτήρια αυτά εξετάζουν πόσο κοντά είναι το αποτέλεσμα σε σχέση με τις ομάδες της προκαθορισμένης δομής. Τα μειονεκτήματα αυτών των κριτηρίων είναι αφενός η μη προσαρμογή σε πραγματικά δεδομένα και αφετέρου η επανάληψη της υπάρχουσας γνώσης μπορεί να μην είναι ο σκοπός. 3. Σχετικά κριτήρια εγκυρότητας: Κριτήρια εγκυρότητας που εξετάζουν ποιο αλγοριθμικό μεθοδολογικό πλαίσιο, δηλαδή ποιοι παράμετροι παράγουν το καλύτερο αποτέλεσμα ομαδοποίησης. 52

53 ΚΕΦΑΛΑΙΟ 4: Ο ΑΛΓΟΡΙΘΜΟΣ BLAST 4.1. Εισαγωγή στον BLAST Ο αλγόριθμος BLAST (Basic Local Alignment Search Tool) είναι ένα από τα πιο ευρέως χρησιμοποιούμενα προγράμματα βιοπληροφορικής για την αναζήτηση ακολουθιών, που είναι ένα θεμελιώδες πρόβλημα στη βιοπληροφορική έρευνα. Δημιουργήθηκε και σχεδιάστηκε από τους Stephen Altschul, Warren Gish, Webb Miller, Eugene Myers, και David J. Lipman στο NIH (National Institutes of Health) και δημοσιεύθηκε στην Εφημερίδα της Μοριακής Βιολογίας το Το BLAST αποτελεί ένα εργαλείο σύγκρισης πρωτογενών βιολογικών πληροφοριών αλληλουχίας, όπως τις αλληλουχίες αμινοξέων των διαφορετικών πρωτεϊνών ή τα νουκλεοτίδια των αλληλουχιών DNA. Μια αναζήτηση BLAST βασίζεται στην κεντρική ιδέα της εύρεσης κοινών υπο-ακολουθιών ίδιου μήκους (segment pairs) που εμφανίζονται και στη δοσμένη ακολουθία μικρού μήκους (input query sequence) και στο σύνολο των ακολουθιών μιας βάσης δεδομένων µε βάση µία συγκεκριμένη συνάρτηση ομοιότητας (scoring threshold). Για να εκτελέσετε τον αλγόριθμο BLAST απαιτεί μια ζητούμενη ακολουθία και μια αλληλουχία για να ψάξετε) ή μια βάση δεδομένων που περιέχει πολλαπλές τέτοιες ακολουθίες. Ο BLAST θα βρει υπο-αλληλουχίες στην βάση δεδομένων οι οποίες είναι παρόμοιες με την ζητούμενη ακολουθία. Στην τυπική χρήση, η ζητούμενη αλληλουχία είναι πολύ μικρότερη από τη βάση δεδομένων (για παράδειγμα, η ζητούμενη μπορεί να είναι χίλια νουκλεοτίδια, ενώ η βάση δεδομένων είναι αρκετά δισεκατομμύρια νουκλεοτίδια). Σε ένα πρώτο βήμα, ο αλγόριθμος αναζητά λέξεις συγκεκριμένου μήκους που εμφανίζονται στη ζητούμενη ακολουθία, χρησιμοποιώντας έναν δεδομένο πίνακα υποκαταστάσεων (substitution matrix). Οι επιτυχείς λέξεις που έχουν score T ή μεγαλύτερο επεκτείνονται και προς τις δύο κατευθύνσεις σε µία απόπειρα να παραχθούν στοιχίσεις που να υπερβαίνουν το προκαθορισμένο κατώφλι S (scoring threshold). Οι περιοχές που ικανοποιούν αυτή τη συνθήκη ονομάζονται HSP (High-scoring Segment Pair). Η παράμετρος "T" καθορίζει την ταχύτητα και την ευαισθησία της αναζήτησης. Σε ένα δεύτερο στάδιο, ο BLAST, ψάχνει στη βάση δεδομένων γνωστών ακολουθιών για το ακριβές ταίριασα της λίστας των λέξεων. Στο τρίτο βήμα, ο αλγόριθμος προσπαθεί να επεκτείνει και προς τις δυο κατευθύνσεις τις εμφανίσεις των λέξεων, παράγοντας πιθανές στοιχίσεις. Κάθε νέα στοίχιση ονομάζεται High Segment Pair- HSP. Tα High Segment Pairs που ξεπερνούν ένα όριο S, χαρακτηρίζονται ως Maximal Segment Pairs- MSPs. Τέλος, ο BLAST καθορίζει τη στατιστική σημαντικότητα κάθε Maximal Segment Pair. Μία επισκόπηση του αλγορίθμου BLAST είναι η εξής: 1.Αφαιρέστε τις περιοχές χαμηλής πολυπλοκότητας αλλιώς η αλληλουχία επαναλαμβάνεται στην ζητούμενη αλληλουχία 53

54 2. Κάντε μια λίστα λέξεων k-μήκους 3. Αναφέρετε τις πιθανές λέξεις που ταιριάζουν. Ο BLAST νοιάζεται μόνο για τις λέξεις με υψηλή βαθμολογία. Οι βαθμολογίες δημιουργούνται από τη σύγκριση της λέξης στη λίστα στο βήμα 2 με όλες τις λέξεις k-γραμμάτων. 4.Οργανώστε τις υπόλοιπες λέξεις με υψηλό σκορ σε ένα αποτελεσματικό δέντρο αναζήτησης 5.Επαναλάβετε το βήμα 3 έως 4 για κάθε λέξη με k-γράμματα στην αλληλουχία 6.Σαρώστε τις ακολουθίες της βάσης δεδομένων για την ακριβή αντιστοιχία με τις υπόλοιπες λέξεις με υψηλό σκορ 7.Επεκτείνετε τις ακριβείς αντιστοιχίες σε HSP 8. Αναφέρετε όλα τα HSPs στη βάση δεδομένων των οποίων η βαθμολογία είναι αρκετά υψηλή 9. Κάντε δύο ή περισσότερες περιοχές HSP σε μεγαλύτερη ευθυγράμμιση 10. Εμφάνισε τις ζητούμενες τοπικές ευθυγραμμίσεις και κάθε μια από τις συμφωνημένες ακολουθίες της βάσης δεδομένων 11. Ανάφερε κάθε ταίριασμα του οποίου αναμένουμε η βαθμολογία να είναι χαμηλότερη από ένα όριο Ε (scoring threshold). Εικόνα 14: Αλγόριθμος Blast 54

55 4.2. Σχηματική απεικόνιση και ανάλυση του αλγορίθμου BLAST Όπως αναφέραμε στην προηγούμενη ενότητα, τα βασικά βήματα του αλγορίθμου BLAST είναι τρία, Επιγραμματικά: Κατασκευή λίστας λέξεων Σάρωση της βάσης δεδομένων για την εύρεση τμημάτων της ακολουθίας που ταυτίζονται με τις λέξεις στην λίστα Επέκταση των τμημάτων για τον εντοπισμό ζευγών υψηλής βαθμολογίας Σχηματικά, όπως παρουσιάζεται στην ιστοσελίδα του Biotechnology Information): NCBI (National Center for Πιο αναλυτικά τα βήματα του αλγορίθμου: Εικόνα 6: Αλγόριθμος BLAST (2) Κατασκευή λίστας λέξεων Στο πρώτο βήμα του αλγορίθμου, όπως προαναφέραμε, κατασκευάζουμε µία λίστα µε όλες τις ακολουθίες που έχουν ένα σταθερό μήκος k, οι οποίες δίνουν υψηλή βαθμολογία όταν αντιστοιχιστούν µε κάποια συνεχή υπο-ακολουθία της ακολουθίας που εξετάζουμε. 55

56 Για παράδειγμα όταν το k=3 έχουμε: Εικόνα 16: Κατασκευή λίστας λέξεων 1 Σάρωση της βάσης δεδομένων για την εύρεση τμημάτων της ακολουθίας που ταυτίζονται με τις λέξεις στην λίστα Αφού κατασκευάσουμε τη λίστα λέξεων για την ακολουθία που εξετάζουμε, παίρνουμε µε τη σειρά τις ακολουθίες της βάσης δεδομένων και τις εξετάζουμε για επιτυχίες. Σαν επιτυχία ορίζουμε ένα τμήμα μιας ακολουθίας που ταυτίζεται µε µία από τις λέξεις της λίστας. Η επιτυχία εντοπίζεται αναζητώντας στη λίστα λέξεων µία λέξη που μόλις διαβάσαμε από την βάση δεδομένων. Για κάθε επιτυχία αποθηκεύουμε τα σημεία έναρξής της στις δύο ακολουθίες, έτσι ώστε να προχωρήσουμε στην επέκτασή της στο τρίτο βήμα του αλγορίθμου. Επέκταση των τμημάτων για τον εντοπισμό ζευγών υψηλής βαθμολογίας Κάθε επιτυχία που εντοπίζεται στο δεύτερο βήμα επεκτείνεται σε ένα τοπικά μέγιστο ζεύγος τμημάτων. Η επέκταση γίνεται και προς τις δύο κατευθύνσεις στις ακολουθίες και σταματάει για κάποια κατεύθυνση όταν φτάσουμε στο άκρο της μιας ακολουθίας προς την κατεύθυνση αυτή ή όταν η βαθμολογία του ζεύγους γίνει μικρότερη κατά µία διαφορά X από τη μέγιστη τιμή την οποία υπολογίσαμε για κάποιο προηγούμενο βήμα της επέκτασης. Ακόμα, επιχειρείται η συνένωση μικρότερων (τοπικών) ευθυγραμμίσεων ώστε να σχηματίσουν πιθανές ολικές. Σε αυτό το σημείο χρησιμοποιείται δυναμικός προγραμματισμός, σε µία προσπάθεια να ενσωματωθούν πιθανές ευθυγραμμίσεις µε κενά (gapped alignments). Σε αυτά τα 2 τελευταία στάδια, ουσιαστικά, βρίσκουμε τα ζεύγη των συνεχών υποακολουθιών ίσου μήκους που δίνουν τη μέγιστη βαθμολογία από όλα τα πιθανά 56

57 ζεύγη υπο-ακολουθιών που προέρχονται από τις ακολουθίες που εξετάζουμε(msps), καθώς και κάθε τοπικά μέγιστο ζεύγος τμημάτων του οποίου η βαθμολογία είναι μεγαλύτερη από µία τιμή S (HSPs). Εικόνα 7: MSP & HSP Εικόνα 8: Εικόνες για βήματα BLAST Εισαγωγή 4.3. Το πρόγραμμα BLAST Το πρόγραμμα BLAST μπορεί κανείς είτε να κατεβάσει και να τρέξει ως ένα βοηθητικό πρόγραμμα γραμμής εντολών "blastall" είτε να το τρέξει δωρεάν μέσω του Διαδικτύου. Το BLAST, που φιλοξενείται από το NCBI, επιτρέπει σε οποιονδήποτε με ένα web browser να εκτελέσει αναζητήσεις ομοιότητας πάνω σε συνεχώς ενημερωμένες βάσεις δεδομένων είτε πρωτεϊνών είτε DNA που περιλαμβάνουν τις περισσότερες από τις νέες αλληλουχίες των οργανισμών. Το πρόγραμμα BLAST βασίζεται σε μια μορφή open source, δίνοντας σε όλους πρόσβαση σε αυτό ώστε να μπορέσουν να έχουν τη δυνατότητα να αλλάξουν τον κώδικα του προγράμματος. Αυτό οδήγησε στη δημιουργία αρκετών υπο-προγραμμάτων BLAST. 57

58 To BLAST μπορεί να χρησιμοποιηθεί για διάφορους σκοπούς. Αυτές περιλαμβάνουν την αναγνώριση των ειδών, την έρευνα της φυλετικής ιστορίας, την χαρτογράφηση και την σύγκριση του DNA. Αναγνώριση ειδών Με τη χρήση του BLAST, μπορεί ενδεχομένως να προσδιοριστεί σωστά ένα είδος ή να βρεθούν ομόλογα είδη. Αυτό μπορεί να είναι χρήσιμο, για παράδειγμα, όταν εργάζεστε με μια ακολουθία DNA από ένα άγνωστο είδος. Έρευνα Φυλετικής Ιστορίας Χρησιμοποιώντας τα αποτελέσματα που λαμβάνονται μέσω BLAST μπορείτε να δημιουργήσετε ένα φυλογενετικό δέντρο. Φυλογενετικές σχέσεις που βασίστηκαν μόνο στο BLAST είναι λιγότερο αξιόπιστες από αυτές που βασίστηκαν σε άλλες υπολογιστικές μεθόδους φυλογενετικού σκοπού, έτσι θα πρέπει να προβληθεί μόνο για αρχικές φυλογενετικές αναλύσεις. Χαρτογράφηση DNA Κατά την εργασία με γνωστά είδη και κοιτάζοντας στην αλληλουχία ενός γονιδίου σε άγνωστη τοποθεσία, το BLAST μπορεί να συγκρίνει την χρωμοσωμική θέση της αλληλουχίας του ενδιαφέροντος με σχετικές αλληλουχίες στην βάση δεδομένων. Σύγκριση Κατά την εργασία με γονίδια, το BLAST μπορεί να εντοπίσει κοινά γονίδια σε δύο συναφή είδη και μπορεί να τα χρησιμοποιήσει για την χαρτογράφηση από έναν οργανισμό σε έναν άλλο. Υπάρχει διαθέσιμη πληθώρα των διαφορετικών προγραμμάτων BLAST, τα οποία μπορούν να χρησιμοποιηθούν ανάλογα με το τι ο καθένας προσπαθεί να κάνει και με τι εργάζεται. Αυτά τα διαφορετικά προγράμματα ποικίλλουν στην είσοδο που δέχονται, στην βάση δεδομένων που αναζητείται και σε αυτό που συγκρίνεται. Αυτά τα προγράμματα και τα στοιχεία τους αναφέρονται παρακάτω: blastn - συγκρίνει μια νουκλεοτιδική ακολουθία (DNA) με μια βάση νουκλεοτιδικών ακολουθιών (DNA). Η αναζήτηση γίνεται και στις δύο αλυσίδες. Είναι ένα πρόγραμμα βελτιστοποιημένης ταχύτητας, όχι όμως και ευαισθησίας. Πρόκειται για την γενική έκδοση του BLAST για αναζήτηση n-n. Αποτελεί τη βέλτιστη επιλογή για τον εντοπισμό παρόμοιων, αλλά όχι πανομοιότυπων ακολουθιών. blastp - συγκρίνει την ζητούμενη αμινοξική ακολουθία με μια βάση πρωτεϊνικών ακολουθιών (σύγκριση πρωτεΐνης με πρωτεΐνες). Η βασική έκδοση του BLAST για σύγκριση πρωτεϊνών. blastx - συγκρίνει μια άγνωστη νουκλεοτιδική ακολουθία (DNA) μεταφρασμένη σε όλα τα πλαίσια ανάγνωσης με μια βάση πρωτεϊνικών ακολουθιών του NCBI. Χρησιμοποιείται για την εύρεση πιθανών μεταφρασμένων πρωτεϊνικών προϊόντων μιας άγνωστης νουκλεοτιδικής ακολουθίας. tblastn - συγκρίνει την ζητούμενη πρωτεϊνική ακολουθία με μια βάση νουκλεοτιδικών ακολουθιών (DNA) του NCBI που μεταφράζεται δυναμικά σε όλα τα πλαίσια ανάγνωσης. Η βασική του ουσιαστική διαφορά ως προς τον κλασικό BLASTp είναι το γεγονός ότι συχνά χρησιμοποιούνται βάσεις που περιέχουν νουκλεοτιδιακές ακολουθίες (expressed sequence tags, draft genome records) πέρα από αυτές που μεταφράζονται σε πρωτεΐνες και συνεπώς περιέχονται στις πρωτεϊνικές βάσεις. 58

59 tblastx - μετατρέπει μια νουκλεοτιδική ακολουθία (DNA) σε μια πρωτεϊνική ακολουθία σε όλα τα πλαίσια ανάγνωσης και μετά τη συγκρίνει με μια βάση νουκλεοτιδικών ακολουθιών του NCBI η οποία έχει μεταφραστεί σε όλα τα πλαίσια ανάγνωσης. BLAST2 - Ονομάζεται εξελιγμένο BLAST. Εκτελεί στοιχίσεις που περιέχουν κενά (gapped alignments). MEGABLAST - είναι ένα πρόγραμμα που χρησιμοποιεί έναν πλεονεκτικό αλγόριθμο (Miller et al, 2000), για αναζήτηση στοίχισης νουκλεοτιδικών ακολουθιών. Χρησιμοποιείται για στοίχιση ακολουθιών με μικρές διαφορές και είναι 10 φορές γρηγορότερο από παρόμοια προγράμματα. Ενδείκνυται για σύγκριση μεταξύ μεγάλων ακολουθιών. Ο MEGABLAST αποδίδει βέλτιστα στο πρόβλημα της ευθυγράμμισης ακολουθιών που διαφέρουν σε πολύ μικρό ποσοστό. PSI-BLAST - (Position Specific Iterated BLAST) χρησιμοποιεί σταθερή αναζήτηση, στην οποία οι ακολουθίες που θα βρεθούν στον πρώτο γύρο αναζητήσεων χρησιμοποιούνται για να χτίσουν ένα αποτελεσματικό μοντέλο για τους επόμενους κύκλους αναζητήσεων. Έχει σχεδιαστεί για πιο ευαίσθητες αναζητήσεις ομοιότητας πρωτεϊνικών ακολουθιών. Στην πραγματικότητα είναι ο πιο ευαίσθητος BLAST, και συνεπώς χρησιμοποιείται στη συσχέτιση πρωτεϊνών µε μικρό ποσοστό ομοιότητας. PHI-BLAST - (Pattern Hit Initiated BLAST) συνδυάζει το ταίριασμα ενός πρότυπου φυσιολογικής έκφρασης με μια συγκεκριμένη θέση που επαναλαμβάνεται στην πρωτεϊνική ακολουθία. RPS-BLAST - συγκρίνει μια πρωτεϊνική ακολουθία ως προς την βάση Conserved Domain Database (CD-Search). Ο RPS - BLAST χρησιμοποιείται για την ανίχνευση διατηρημένων τμημάτων (conserved domains) Εφαρμογή του Προγράμματος BLAST Μέσω της ιστοσελίδας του NCBI, θα εφαρμόσουμε το πρόγραμμα BLAST σε δεδομένα. Θα αναζητήσουμε τις ομοιότητες των ιών Η1Ν1 και Η7Ν1 με την νουκλεοτιδική ακολουθία (DNA) του ανθρώπινου οργανισμού που μας παρέχετε μέσω της σελίδας. Η ακολουθία των ιών ακολουθεί παρακάτω: Η1Ν1: >(gb X53029:26-51, ) Influenza A virus (A/USSR/90/1977(H1N1)) genes for matrix proteins 1 and 2, genomic RNA ATGAGTCTTCTAACCGAGGTCGAAACGCCTATCAGAAACGAATGGGGGTGCAGATGCAACGATTCAAGTG ATCCTCTTGTTGTTGCCGCAAGTATCATTGGGATTTTGCACTTGATATTGTGGATTCTTGATCGTCTTTT TTTCAAATGCATTTATCGTCTCTTTAAACACGGTCTGAAAAGAGGGCCTTCTACGGAAGGAGTACCAGAG TCTATGAGGGAAGAATATCGAAAGGAACAGCAGAATGCTGTGGATGCTGACGATAGTCATTTTGTCAACA TAGAGCTAGAGTAA Η7Ν1 >gb X52226: Influenza A virus (A/FPV/Rostock/34(H7N1)) gene for neuraminidase, genomic RNA ATGAATCCAAATCAGAAAATAATAACCATTGGGTCAATCTGTATGGGGATCGGAATAATCAGCCTAATAT 59

60 TACAAATTGGAAACATAATCTCAATGTGGGTTAGTCATTCAATTCAGACTGAAAATCAAAATCACCATGA AGCATGCAACCCAAGCATTGCTGGACAGGATGCAGCTTCAGTGGCACTAGCAGGCAATTCCTCTCTTTGT CCCATTAGTGGGTGGGCTATATACAGTAAAGACAATGGTATAAGAATTGGCTCCAAAGGAGACGTATTTG TCATAAGAGAGCCATTTATTTCATGCTCTCACTTGGAATGCAGGACCTTTTTTCTGACTCAGGGCGCCTT GTTGAATGACAAACACTCAAATGGAACCGTTAAAGACAGAAGCCCTTATAGAACCTTGATGAGCTGTCCT GTTGGTGAAGCTCCTTCTCCCTACAATTCAAGGTTCGTGTCGGTTGCATGGTCAGCAAGTGCCTGCCATG ATGGCATGGGTTGGCTAACAATCGGAATTTCTGGTCCAGATAATGGAGCAGTGGCTGTATTAAAATACAA TGGTATAATAACAGACACCATCAAAAGTTGGAAAAATAACATATTGAGAACGCAAGAGTCTGAATGTGCC TGTATAAATGGTTCATGTTTCACTATAATGACCGATGGCCCAAGTAATGGGCAGGCCTCGTACAAAATTT TCAAGATAGAAAAGGGGAAGGTAGTCAAATCAAGTGAATTAAATGCACCTAATTACCACTACGAGGAATG TTCTTGTTATCCTGATGCAGGTGAAGTAATGTGTGTATGCAGGGATAATTGGCATGGTTCGAATCGACCA TGGGTGTCTTTCAATAAAAACCTTGATTATCAAATAGGTTACATCTGCAGTGGGGTTTTTGGTGATAATC CACGACCCAATGATGGAACAGGCAGCTGTGGTCCAGTGTCTTCTAATGGAGCATATGGGATAAAGGGGTT CTCATTTAAGTATGGTAATGGTGTTTGGATAGGGAGAACCAAAAGCACTAGTTCCAGAAGCGGGTTTGAG ATGATTTGGGATCCCAATGGATGGACAGAAACTGACAGCAGTTTCTCTGTGAAGCAAGATATTGTAGCAA TAACTGATTGGTCGGGATATAGCGGGAGTTTCGTCCAACACCCTGAATTAACAGGGTTGGACTGCATGAG GCCTTGTTTCTGGGTTGAACTGATCAGGGGACGGCCCAACCACAATACGATCTGGACTAGTGGGAGCAGC ATTTCCTTCTGTGGTGTGAACAGCGATACTGTAGGTTGGTCTTGGCCAGACGGTGCTGAGTTGCCATTCA CCATTGACAAGTAG Σε αυτό το σημείο να αναφέρουμε ότι οι ακολουθίες συμβολίζονται με τα γράμματα T, G, A και C, τα οποία αντιστοιχούν στα νουκλεοτίδια που αποτελούν το DNA. A --> αδενίνη C --> κυτοσίνη G --> γουανίνη T --> θυμίνη Η έξοδος της εκτέλεσης του BLAST για την αναζήτηση ακολουθίας σε βάση ή την ευθυγράμμιση 2 ακολουθιών, οργανώνεται στις εξής 5 ενότητες: 1. Header Παρέχει γενικές πληροφορίες σχετικά µε τη συγκεκριμένη εκτέλεση. Μεταξύ αυτών, αναφέρεται η έκδοση και εκδοχή του BLAST που χρησιμοποιήθηκε, το μοναδικό Request ID (RID) της εκτέλεσης (µόνο στην online εκδοχή), ώστε να είναι δυνατή μετέπειτα ανάκτηση και επανάληψη της διαδικασίας από το χρήστη, καθώς και η πλήρης περιγραφή της βάσης που χρησιμοποιήθηκε (πλήρες όνομα, μέγεθος), εφόσον η εκτέλεση αφορά σε αναζήτηση ακολουθίας σε βάση δεδομένων. 2. Overview Συναντάται µόνο στην OnLine εκδοχή του αλγορίθμου και αποτελεί απεικόνιση του αποτελέσματος της ευθυγράμμισης. Συγκεντρώνει τις ακολουθίες που αντιστοιχίζονται ικανοποιητικά µε το ζητούμενο σε δύο τμήματα: στο ένα περιέχονται οι νουκλεοτιδιακές και στο άλλο οι αµινοξεϊκές. Ο τίτλος αποτελεί σύνδεσμο για µία σύντομη περιγραφή των αποτελεσμάτων που εντοπίστηκαν και αναφέρει τον αριθμό των HSPs (High Scoring Pairs). Στο κυρίως γράφημα, εμφανίζεται η ζητούμενη ακολουθία τµηµατοποιημένη στο επάνω μέρος και ακριβώς κάτω, τοποθετούνται οι ευθυγραμμίσεις που ανακτήθηκαν από τη βάση. Το χρώμα της κάθε ευθυγράμμισης αποτελεί ένδειξη του score της ευθυγράμμισης, και συνεπώς του μήκους στο οποίο οι δύο ακολουθίες εμφανίζουν ομοιότητα. 3. Description Στην ενότητα αυτή συγκεντρώνεται ένα σύνολο επιπλέον δυνατοτήτων ανάλυσης των αποτελεσμάτων. Περιέχονται σύνδεσμοι προς τις βάσεις UniGene, Gene, GEO, Structure, καθώς και προς την αντίστοιχη καταχώρηση στο εργαλείο 60

61 χαρτογράφησης του αντίστοιχου γονιδιώµατος (MapView). Η ενότητα αυτή είναι διαθέσιμη µόνο στην online έκδοση του αλγορίθμου. 4. Alignment Παρουσιάζονται όλα τα ζεύγη που επιστράφηκαν ως ευθυγραμμίσεις (δηλαδή η ζητούμενη ακολουθία µε όλες όσες επιστράφηκαν από την εκτέλεση του αλγορίθμου), στοιχείο προς στοιχείο, µε επισήμανση των ομοιοτήτων και των διαφορών που εμφανίζουν. 5. Statistics Πρόκειται για την κυρίως έξοδο του προγράμματος. Αρχικά, σημειώνεται η βάση δεδομένων που χρησιμοποιήθηκε, η σταθερά λ που χρησιμοποιήθηκε στον υπολογισμό της expect value, ο πίνακας αντικατάστασης και οι τιμές ποινής και επιβράβευσης στις περιπτώσεις όπου έγινε επέκταση προκειμένου να επιτευχθεί καλύτερη ευθυγράμμιση ή σημειώθηκε αντιστοιχία, αντίστοιχα. Στη συνέχεια, αποδίδεται ο αριθμός των λέξεων που εξετάστηκαν, των ακριβών αντιστοιχιών στη βάση, επιχειρήσεων και επιτυχών επεκτάσεων, τα μήκη της προς εξέταση ακολουθίας και της βάσης, και η μνήμη που απαιτήθηκε για την ολοκλήρωση της εκτέλεσης. Πριν συνεχίσουμε, πρέπει να αναφέρουμε τις στατιστικές παραμέτρους και τις παραμέτρους αναζήτησης που εμφανίζονται στο πρόγραμμα BLAST: 1. Expect Value (E-Value) Πρόκειται για τη µία από τις δυο βασικές εξόδους του BLAST. Η E-Value είναι μία παράμετρος που περιγράφει τον αριθμό των ακριβών αντιστοιχιών που αναμένουμε να εντοπίσουμε στη δεδομένη βάση λόγω καθαρής τύχης (και όχι βιολογικής σχέσης μεταξύ των ακολουθιών). Υπολογίζεται βάσει του στοχαστικού μοντέλου που πρότειναν οι Karlin και Altschul (1990) και συγκεκριμένα ως φθίνουσα εκθετική συνάρτηση του score αντιστοιχίας S. Όσο χαμηλότερη είναι η E-Value ή όσο πιο κοντά είναι στο μηδέν, τόσο πιο σημαντική είναι η ομοιότητα. Ωστόσο, να έχετε κατά νου ότι σχεδόν ταυτόσημες ευθυγραμμίσεις έχουν σχετικά υψηλές E-Value. Αυτό συμβαίνει επειδή ο υπολογισμός της E-Value λαμβάνει υπόψη το μήκος της ζητούμενης αλληλουχίας. Αυτές οι υψηλές E-Value έχουν νόημα, διότι μικρότερες αλληλουχίες έχουν μεγαλύτερη πιθανότητα να εμφανιστούν στη βάση δεδομένων καθαρά από τύχη. Ε = Κ Ν exp (-λ S) K, λ: παραμετρικές μεταβλητές Ν : μήκος(ζητούμενο)*μήκος(βάσης δεδομένων) Όπως προκύπτει από τον ορισμό της, η Ε λαμβάνει τιμές όχι µόνο ακέραιες αλλά και κλασματικές. Η e-value μπορεί επίσης να εκφράζει όχι µόνο αναμενόμενο απόλυτο αριθμό τυχαίων επιτυχιών, αλλά και ποσοστό. Η E-Value μπορεί επίσης να χρησιμοποιηθεί ως ένας βολικό τρόπο για να δημιουργηθεί ένα όριο σημαντικότητας για την αναφορά των αποτελεσμάτων. Μπορείτε να αλλάξετε το όριο της E-Value στις περισσότερες σελίδες αναζήτησης BLAST. Η τιμή της παραμέτρου είναι εξ' ορισμού (by default) ίση µε 10. Όταν η E-Value αυξάνεται 61

62 από την προκαθορισμένη τιμή των 10, μια μεγαλύτερη λίστα με περισσότερες χαμηλής βαθμολογίας αντιστοιχίες μπορεί να αναφερθεί. 2. BIT SCORE Το bit score αποτελεί μαζί µε την Ε-Value τη βασική έξοδο κάθε εκτέλεσης του αλγορίθμου. Το BIT SCORE μας δίνει μια ένδειξη του πόσο καλή είναι η ευθυγράμμιση, όσο μεγαλύτερη είναι το bit score, τόσο καλύτερη είναι η ευθυγράμμιση. Σε γενικές γραμμές, αυτή η ένδειξη υπολογίζεται από έναν τύπο που λαμβάνει υπόψη την ευθυγράμμιση των ομοειδών ή πανομοιότυπων υπολειμμάτων, καθώς και τυχόν κενά με στόχο την ευθυγράμμιση των αλληλουχιών. Η τιμή της µμεταβλητής (S') προκύπτει από την κανονικοποίηση του απόλυτου score S, ώστε να είναι δυνατή η σύγκριση της ποιότητας διαφορετικών ευθυγραμμίσεων, ακόμα και αν σε αυτές έχουν χρησιμοποιηθεί διαφορετικές E-Values και πίνακες αντικατάστασης. 3. CUTOFF SCORE Ορίζεται ως το κατώτερο αποδεκτό score που θα πρέπει να φέρει µία ευθυγράμμιση προκειμένου να εμφανίζεται ως αποτέλεσμα. Η τιμή του υπολογίζεται βάσει της E-Value. Αύξηση της τιμής του cutoff score (τιμής αποκοπής) συνεπάγεται αύξηση της ευαισθησίας του αλγορίθμου, κάνοντάς τον "αυστηρότερο" απέναντι στις αντιστοιχίες που εντοπίζονται στην βάση δεδομένων. 4. WORD SIZE Το μήκος της λέξης που χρησιμοποιείται κατά την εκτέλεση του BLAST, καθορίζει σε μεγάλο βαθιό την ακρίβεια των αποτελεσμάτων του. Όσο η τιμή αυξάνεται, τα αποτελέσματα είναι ακριβέστερα αλλά λιγότερα, µε κίνδυνο να µην εμφανίζονται ευθυγραμμίσεις µε υπαρκτή βιολογική σημασία. Από την άλλη, μικρότερες τιμές του μήκος λέξεως επιστρέφουν περισσότερα αποτελέσματα (συµπεριλαµβανοµένων αυτών που επιστρέφουν οι μεγαλύτερές τους) στα οποία όμως συμπεριλαμβάνονται ευθυγραμμίσεις µε ελάχιστη ή αδιάφορη βιολογική σημασία. Συνηθισμένες τιμές για την παράμετρο word size για πρωτεΐνες είναι από 2 ως 5, µε προτεινόμενες τις 3 ή 4, ενώ για DNA η τιμή 11. Η επιλογή γίνεται από τον χρήστη. 5. ALIGNMENTS (parameter B) Καθορίζει τον μέγιστο αριθμό ευθυγραμμίσεων που θα εμφανιστεί στην έξοδο. Σε περίπτωση που πολυάριθμές ευθυγραμμίσεις περνούν το όριο του cutoff score, αυτή η παράμετρος καθορίζει ότι µόνο οι Β µε το υψηλότερο score θα εμφανιστούν στην έξοδο. Για την εκτέλεση του προγράμματος, αρχικά μας ζητάει την αλληλουχία που θέλουμε να ψάξουμε. Μπορούμε είτε να την δώσουμε χειροκίνητα είτε να ανεβάσουμε μια βάση δεδομένων από ένα αρχείο και να επιλέξουμε μία υπο-αλληλουχία. Στο πρώτο στάδιο, μπορούμε να δώσουμε ένα όνομα στην αναζήτηση μας που θα εμφανίζετε στο πάνω μέρος των αποτελεσμάτων μας, αλλιώς θα δέχεται αυτόματα από το πρόγραμμα. 62

63 Εικόνα 9: Πρόγραμμα BLAST Σε δεύτερο στάδιο, επιλέγουμε μία βάση δεδομένων πάνω στην οποία θα ψάξουμε. Μπορούμε να ανεβάσουμε δικιά μας βάση δεδομένων ή να επιλέξουμε από τις αποθηκευμένες βάσης που υπάρχουν στο πρόγραμμα. Η προεπιλεγμένη βάση είναι η "Human genomic + transcript" και περιορίζει την αναζήτηση στο ανθρώπινο είδος. Πάνω σε αυτήν θα δουλέψουμε κι εμείς. Επίσης, μας δίνεται η επιλογή να χρησιμοποιήσουμε την γονιδιακή ακολουθία κάποιου οργανισμού (μέσω της επιλογής custom). Εικόνα 10: Εικόνα BLAST (2) Στην συνέχεια είναι η επιλογή του προγράμματος που θέλουμε να τρέξουμε και κάποιες επιλογές που μας επιτρέπουν να βελτιστοποιήσουμε την αναζήτησή μας σε διάφορα σενάρια. Οι επιλογές αντιστοιχούν σε megablast, discontiguous megablast, και BLASTN για νουκλεοτίδια και blastp, PSI-BLAST και PHI-BLAST για πρωτεΐνη. 63

64 Εικόνα 11: Εικόνα BLAST (3) Η τελευταία επιλογή που μας δίνεται είναι αυτή των παραμέτρων του επιλεγμένου αλγόριθμου BLAST. Εικόνα 12: Εικόνα BLAST (4) Αποτελέσματα προγράμματος BLAST Θα εφαρμόσουμε αναζήτηση του ιού Η1Ν1 πάνω στην βάση δεδομένων "Human genomic + transcript" που μας δίνει το BLAST. Την βάση δεδομένων μπορείτε να την κατεβάσετε απο σελίδα ftp://ftp.ncbi.nih.gov/genomes/homo_sapiens/. Το πρώτο πράγμα που μας εμφανίζει είναι το Header όπως αναφέραμε στο προηγούμενο υπο-κεφάλαιο: Εικόνα 13: Header H1N1 64

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Τι είναι το OpenMP Πρότυπο Επέκταση στη C/C++ και τη Fortran

Διαβάστε περισσότερα

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

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί Χαρμανδάρης Βαγγέλης, Τμήμα Εφαρμοσμένων Μαθηματικών Πανεπιστήμιο Κρήτης, Εαρινό Εξάμηνο 2013/14 Κεφάλαιο 5: (A) Λογισμικό, Βασικές Εφαρμογές

Διαβάστε περισσότερα

EM 361: Παράλληλοι Υπολογισμοί

EM 361: Παράλληλοι Υπολογισμοί ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ EM 361: Παράλληλοι Υπολογισμοί Ενότητα #5Α: Λογισμικό, Βασικές Εφαρμογές OpenMP Διδάσκων: Χαρμανδάρης Ευάγγελος ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΩΝ ΜΑΘΗΜΑΤΙΚΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΚΑΙ

Διαβάστε περισσότερα

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Διαμοίραση έργου και συγχρονισμός στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Παράλληλες Περιοχές Καθορίζονται

Διαβάστε περισσότερα

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Ταχύτητα εκτέλεσης Χρόνος εκτέλεσης = (αριθμός εντολών που εκτελούνται) Τί έχει σημασία: Χ (χρόνος εκτέλεσης εντολής) Αριθμός

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Αρχιτεκτονική Υπολογιστών Παραλληλισμός Βασικές Πηγές: Αρχιτεκτονική Υπολογιστών: μια Δομημένη Προσέγγιση, Α. Tanenbaum, Vrije Universiteit, Amsterdam. Computer Architecture and Engineering, K. Asanovic,

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Γ ) Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών

Διαβάστε περισσότερα

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:12 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP (2 ο Μέρος)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP (2 ο Μέρος) ΕΡΓΑΛΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP (2 ο Μέρος) Νίκος Τρυφωνίδης Εφαρμογή 7: Ανισορροπία Το πρόγραμμα imbalance.c περιέχει ένα loop το οποίο έχει μεγαλύτερη εργασία

Διαβάστε περισσότερα

OpenMP. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων. Αθήνα, Νοέµβριος /11/2004 Εισαγωγή στο OpenMP 1

OpenMP. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων. Αθήνα, Νοέµβριος /11/2004 Εισαγωγή στο OpenMP 1 OpenMP Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων Αθήνα, Νοέµβριος 2004 29/11/2004 Εισαγωγή στο OpenMP 1 1 Παράλληλες αρχιτεκτονικές Αρχιτεκτονική κατανεµηµένης µνήµης (distributed

Διαβάστε περισσότερα

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ www.cslab.ece.ntua.gr Διπλωματικές

Διαβάστε περισσότερα

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων OpenMP 9 ο Εξάμηνο Προγραμματισμός σε μοιραζόμενη μνήμη void thread1(int *shared_var) int

Διαβάστε περισσότερα

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων

OpenMP. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων OpenMP 9 ο Εξάμηνο Προγραμματισμός σε μοιραζόμενη μνήμη void thread1(int *shared_var) int

Διαβάστε περισσότερα

2. Στοιχεία Αρχιτεκτονικής Παράλληλων Υπολογιστών... 45

2. Στοιχεία Αρχιτεκτονικής Παράλληλων Υπολογιστών... 45 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος... 9 1. Εισαγωγή... 13 1.1 Οι Μεγάλες Σύγχρονες Επιστημονικές Προκλήσεις... 13 1.2 Εξέλιξη της Παράλληλης Επεξεργασίας Δεδομένων... 14 1.3 Οι Έννοιες της Σωλήνωσης, του Παραλληλισμού

Διαβάστε περισσότερα

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:20 OpenMP Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων

Διαβάστε περισσότερα

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών. OpenMP. Συστήματα Παράλληλης Επεξεργασίας 9 ο Εξάμηνο

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών. OpenMP. Συστήματα Παράλληλης Επεξεργασίας 9 ο Εξάμηνο Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων OpenMP 9 ο Εξάμηνο Προγραμματισμός σε μοιραζόμενη μνήμη void thread1(int *shared_var) void

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP ΕΡΓΑΛΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP Νίκος Τρυφωνίδης Μέρος 1 ο : Η ΑΝΑΓΚΗ ΓΙΑ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Γιατί Παράλληλος Προγραμματισμός; Οι επιστημονικές υπολογιστικές

Διαβάστε περισσότερα

Συστήµατα Παράλληλης Επεξεργασίας. OpenMP

Συστήµατα Παράλληλης Επεξεργασίας. OpenMP OpenMP Προγραµµατισµός σε µοιραζόµενη µνήµη void thread1(int *shared_var) int i; for (i=0; i

Διαβάστε περισσότερα

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1 13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1 ΓΛΩΣΣΑΡΙ Αµοιβαίος αποκλεισµός (mutual exclusion) Στο µοντέλο κοινού χώρου διευθύνσεων, ο αµοιβαίος αποκλεισµός είναι ο περιορισµός του αριθµού των διεργασιών

Διαβάστε περισσότερα

Κατανεμημένος και Παράλληλος Προγραμματισμός

Κατανεμημένος και Παράλληλος Προγραμματισμός Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Παράλληλος προγραμματισμός OpenMP (3) Critical vs. Single Η

Διαβάστε περισσότερα

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Ενότητα 2: Αρχιτεκτονικές Von Neuman, Harvard. Κατηγοριοποίηση κατά Flynn. Υπολογισμός απόδοσης Συστημάτων

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Γ ) Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών

Διαβάστε περισσότερα

OpenMP. Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ. OpenMP p.

OpenMP. Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ. OpenMP p. OpenMP Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ OpenMP p. 1 Αρχιτεκτονικές Κατανεµηµένης Μνήµης Node Node L2 Memory L2

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Γιώργος Δημητρίου Ενότητα 11 η : Εισαγωγή σε Παράλληλες Αρχιτεκτονικές Παράλληλη Επεξεργασία Επίπεδο Παραλληλισμού Από εντολές έως ανεξάρτητες διεργασίες Οργανώσεις Παράλληλων Αρχιτεκτονικών Συμμετρικοί,

Διαβάστε περισσότερα

ΥΛΟΠΟΙΗΣΗ ΣΥΝΤΑΚΤΙΚΟΥ ΑΝΑΛΥΤΗ ΓΙΑ ΤΟΝ ΠΑΡΑΛΛΗΛΟΠΟΙΗΤΙΚΟ ΜΕΤΑΦΡΑΣΤΗ OMPI Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙ ΙΚΕΥΣΗΣ. Υποβάλλεται στην

ΥΛΟΠΟΙΗΣΗ ΣΥΝΤΑΚΤΙΚΟΥ ΑΝΑΛΥΤΗ ΓΙΑ ΤΟΝ ΠΑΡΑΛΛΗΛΟΠΟΙΗΤΙΚΟ ΜΕΤΑΦΡΑΣΤΗ OMPI Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙ ΙΚΕΥΣΗΣ. Υποβάλλεται στην ΥΛΟΠΟΙΗΣΗ ΣΥΝΤΑΚΤΙΚΟΥ ΑΝΑΛΥΤΗ ΓΙΑ ΤΟΝ ΠΑΡΑΛΛΗΛΟΠΟΙΗΤΙΚΟ ΜΕΤΑΦΡΑΣΤΗ OMPI Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙ ΙΚΕΥΣΗΣ Υποβάλλεται στην ορισθείσα από την Γενική Συνέλευση Ειδικής Σύνθεσης του Τµήµατος Πληροφορικής

Διαβάστε περισσότερα

Προγραμματισμός με το OpenMP Β. Δημακόπουλος

Προγραμματισμός με το OpenMP Β. Δημακόπουλος ΠΛE006 Παράλληλη Επεξεργασία Προγραμματισμός με το OpenMP Β. Δημακόπουλος Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε αυτό το μοντέλο: Οντότητες εκτέλεσης (νήματα,

Διαβάστε περισσότερα

i Throughput: Ο ρυθμός ολοκλήρωσης έργου σε συγκεκριμένο χρόνο

i Throughput: Ο ρυθμός ολοκλήρωσης έργου σε συγκεκριμένο χρόνο Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 6-7 Απόδοση ΚΜΕ (Μέτρηση και τεχνικές βελτίωσης απόδοσης) http://mixstef.github.io/courses/comparch/ Μ.Στεφανιδάκης Κεντρική Μονάδα Επεξεργασίας

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ 2.3.1.1. Παπαγιάννη Νάσια Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών ΕΜΠ 1 περιλαμβάνει: Η έννοια του προγράμματος Επίλυση προβλήματος 1. Ακριβή προσδιορισμό

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

Διαφορές single-processor αρχιτεκτονικών και SoCs

Διαφορές single-processor αρχιτεκτονικών και SoCs 13.1 Τα συστήματα και η επικοινωνία μεταξύ τους γίνονται όλο και περισσότερο πολύπλοκα. Δεν μπορούν να περιγραφούνε επαρκώς στο επίπεδο RTL καθώς αυτή η διαδικασία γίνεται πλέον αρκετά χρονοβόρα. Για αυτό

Διαβάστε περισσότερα

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed

Διαβάστε περισσότερα

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι Λειτουργικά Συστήματα 1 Λογισμικό του Υπολογιστή Για να λειτουργήσει ένας Η/Υ εκτός από το υλικό του, είναι απαραίτητο και το λογισμικό Το σύνολο των προγραμμάτων που συντονίζουν τις λειτουργίες του υλικού

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Η/Υ Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 4 «Αρχιτεκτονικές ΛΣ» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας 1 1. Μονολιθικά συστήματα Αρχιτεκτονικές ΛΣ 2. Στρωματοποιημένη αρχιτεκτονική 3. Αρχιτεκτονική

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

Διαβάστε περισσότερα

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης)

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2016-17 Απόδοση ΚΜΕ (Μέτρηση και τεχνικές βελτίωσης απόδοσης) http://mixstef.github.io/courses/comparch/ Μ.Στεφανιδάκης Κεντρική Μονάδα Επεξεργασίας

Διαβάστε περισσότερα

Πολυπύρηνοι επεξεργαστές Multicore processors

Πολυπύρηνοι επεξεργαστές Multicore processors Πολυπύρηνοι επεξεργαστές Multicore processors 1 Μετάβαση στους πολυπύρηνους(1) Απόδοση των µονοεπεξεργαστών 25% ετήσια βελτίωση της απόδοσης από το 1978 έως το 1986 Κυρίως από την εξέλιξη της τεχνολογίας

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών Κεφ. 2 Θεωρητική Επιστήμη Υπολογιστών 2.3.1.1 Έννοια προγράμματος Τι είναι πρόγραμμα και τι προγραμματισμός; Πρόγραμμα είναι το σύνολο εντολών που χρειάζεται

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή

ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή Οι σηµερινές δραστηριότητες των επιχειρήσεων δηµιουργούν την ανάγκη για όσο το δυνατό µεγαλύτερη υποστήριξη από τα πληροφοριακά τους

Διαβάστε περισσότερα

Αποδοτική εκτέλεση προγραμμάτων OpenMP σε συστάδες Η/Υ

Αποδοτική εκτέλεση προγραμμάτων OpenMP σε συστάδες Η/Υ Πτυχιακή Εργασία Σιταράς Φώτιος Αύγουστος 2009 Αποδοτική εκτέλεση προγραμμάτων OpenMP σε συστάδες Η/Υ Επιβλέπων: Βασίλειος Δημακόπουλος 1 2 Περιεχόμενα Κεφάλαιο 1: Εισαγωγή...6 1.1 Η εξέλιξη των Η/Υ...6

Διαβάστε περισσότερα

Κεφάλαιο 3. Διδακτικοί Στόχοι

Κεφάλαιο 3. Διδακτικοί Στόχοι Κεφάλαιο 3 Σε ένα υπολογιστικό σύστημα η Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) εκτελεί τις εντολές που βρίσκονται στην κύρια μνήμη του. Οι εντολές αυτές ανήκουν σε προγράμματα τα οποία, όταν εκτελούνται,

Διαβάστε περισσότερα

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

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 3 η : Παράλληλη Επεξεργασία. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 3 η : Παράλληλη Επεξεργασία. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Ενότητα 3 η : Παράλληλη Επεξεργασία Παράλληλες Αρχιτεκτονικές Παράλληλο σύστημα είναι ένα σύνολο από επεξεργαστικά στοιχεία (processing elements) τα οποία: συνεργάζονται για γρήγορη επίλυση

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής)

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής) ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α Γενικού Λυκείου (Μάθημα Επιλογής) Σύγχρονα Υπολογιστικά Συστήματα τους υπερυπολογιστές (supercomputers) που χρησιμοποιούν ερευνητικά εργαστήρια τα μεγάλα συστήματα (mainframes)

Διαβάστε περισσότερα

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp Γκόγκος Χρήστος Παράδειγμα

Διαβάστε περισσότερα

Παραλληλισμός σε επίπεδο εντολών

Παραλληλισμός σε επίπεδο εντολών Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2015-16 Παραλληλισμός σε επίπεδο εντολών (Pipelining και άλλες τεχνικές αύξησης απόδοσης) http://di.ionio.gr/~mistral/tp/comparch/ Μ.Στεφανιδάκης

Διαβάστε περισσότερα

Κεντρική Μονάδα Επεξεργασίας. Επανάληψη: Απόδοση ΚΜΕ. ΚΜΕ ενός κύκλου (single-cycle) Παραλληλισμός σε επίπεδο εντολών. Υπολογιστικό σύστημα

Κεντρική Μονάδα Επεξεργασίας. Επανάληψη: Απόδοση ΚΜΕ. ΚΜΕ ενός κύκλου (single-cycle) Παραλληλισμός σε επίπεδο εντολών. Υπολογιστικό σύστημα Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2016-17 Παραλληλισμός σε επίπεδο εντολών (Pipelining και άλλες τεχνικές αύξησης απόδοσης) http://mixstef.github.io/courses/comparch/ Μ.Στεφανιδάκης

Διαβάστε περισσότερα

Δομή Ηλεκτρονικού υπολογιστή

Δομή Ηλεκτρονικού υπολογιστή Δομή Ηλεκτρονικού υπολογιστή Η κλασσική δομή του μοντέλου που πρότεινε το 1948 ο Von Neumann Κεντρική Μονάδα Επεξεργασίας Είσοδος Αποθήκη Αποθήκη - Έξοδος Εντολών Δεδομένων Κλασσικό μοντέλο Von Neumann

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

Διαβάστε περισσότερα

METROPOLIS. Ένα περιβάλλον σχεδιασμού για ετερογενή συστήματα

METROPOLIS. Ένα περιβάλλον σχεδιασμού για ετερογενή συστήματα METROPOLIS Ένα περιβάλλον σχεδιασμού για ετερογενή συστήματα Ενσωματωμένα συστήματα Ορίζονται ως ηλεκτρονικά συστήματα τα οποία χρησιμοποιούν υπολογιστές και ηλεκτρονικά υποσυστήματα για να εκτελέσουν

Διαβάστε περισσότερα

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Γιώργος Δημητρίου Ενότητα 1 η : Βασικές Αρχές Αρχιτεκτονικής Η/Υ Σύγχρονοι Μικροεπεξεργαστές Intel 6-core i7 (Gulftown) 2010, >1 billion transistors Απόδοση Μικροεπεξεργαστών V Μετρήσεις με μετροπρογράμματα

Διαβάστε περισσότερα

Κατανεμημένος και Παράλληλος Προγραμματισμός

Κατανεμημένος και Παράλληλος Προγραμματισμός Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Παράλληλος προγραμματισμός OpenMP (2) Παραλληλοποίηση των βρόγχων

Διαβάστε περισσότερα

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

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

1. Οργάνωση της CPU 2. Εκτέλεση εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο επίπεδο των επεξεργαστών

1. Οργάνωση της CPU 2. Εκτέλεση εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο επίπεδο των επεξεργαστών ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ ΟΡΓΑΝΩΣΗ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Ι Γ. Τσιατούχας 2 ο Κεφάλαιο ιάρθρωση 1. Οργάνωση της 2. εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

Διαβάστε περισσότερα

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

Κατανεμημένα Συστήματα Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,

Διαβάστε περισσότερα

Η ΤΑΞΙΝΟΜΗΣΗ ΤΟΥ FLYNN!!! 1 ο ΕΠΑΛ ΡΟΔΟΥ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ!!!! Χατζηνικόλας Κώστας www.costaschatzinikolas.gr

Η ΤΑΞΙΝΟΜΗΣΗ ΤΟΥ FLYNN!!! 1 ο ΕΠΑΛ ΡΟΔΟΥ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ!!!! Χατζηνικόλας Κώστας www.costaschatzinikolas.gr Η ΤΑΞΙΝΟΜΗΣΗ ΤΟΥ FLYNN 1 ο ΕΠΑΛ ΡΟΔΟΥ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Χατζηνικόλας Κώστας www.costaschatzinikolas.gr Τα 4 Είδη Των Αρχιτεκτονικών Των Σύγχρονων Η/Υ Ο Michael J. Flynn 1 το 1966 πρότεινε τον χωρισμό

Διαβάστε περισσότερα

Εισαγωγή στη Σχεδίαση Λογισμικού

Εισαγωγή στη Σχεδίαση Λογισμικού Εισαγωγή στη Σχεδίαση Λογισμικού περιεχόμενα παρουσίασης Τι είναι η σχεδίαση λογισμικού Έννοιες σχεδίασης Δραστηριότητες σχεδίασης Σχεδίαση και υποδείγματα ανάπτυξης λογισμικού σχεδίαση Η σχεδίαση του

Διαβάστε περισσότερα

Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο)

Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο) ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κοινόχρηστος χώρος διευθύνσεων Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο) Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε αυτό το μοντέλο: Οντότητες

Διαβάστε περισσότερα

EM 361: Παράλληλοι Υπολογισμοί

EM 361: Παράλληλοι Υπολογισμοί ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ EM 361: Παράλληλοι Υπολογισμοί Ενότητα #2: Αρχιτεκτονική Διδάσκων: Χαρμανδάρης Ευάγγελος ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΩΝ ΜΑΘΗΜΑΤΙΚΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΠΙΣΤΗΜΩΝ

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Αρχιτεκτονική Υπολογιστών Άσκηση 6: Ασκήσεις Εξαμήνου Μέρος Β Νοέμβριος 2016 Στην άσκηση αυτή θα μελετήσουμε την εκτέλεση ενός

Διαβάστε περισσότερα

2/4/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (ΙΙ) OpenMP Β. Δημακόπουλος

2/4/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (ΙΙ) OpenMP Β. Δημακόπουλος Υ07 Παράλληλα Συστήματα 2011-12 2/4/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (ΙΙ) OpenMP Β. Δημακόπουλος Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε

Διαβάστε περισσότερα

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης Κεφάλαιο 7 1. Σε τι διαφέρει ο Η/Υ από τις υπόλοιπες ηλεκτρικές και ηλεκτρονικές συσκευές; Που οφείλεται η δυνατότητά του να κάνει τόσο διαφορετικές

Διαβάστε περισσότερα

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2 Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου Ενότητα 2 Τι είναι το PLC ΠΕΡΙΕΧΟΜΕΝΑ 2 Τι είναι το PLC. 2.1 Πλεονεκτήματα των PLC. 2.2 Η δομή ενός PLC. 2.3 Τα PLC της αγοράς. 2.4 Αρχή λειτουργίας ενός PLC.

Διαβάστε περισσότερα

Υλοποίηση cancellation στον παραλληλοποιητικό μεταφραστή OMPi. Εμμανουήλ Φελουτζή. με Α.Μ: 1579 ΔΙΠΛΩΜΑΤΟΣ

Υλοποίηση cancellation στον παραλληλοποιητικό μεταφραστή OMPi. Εμμανουήλ Φελουτζή. με Α.Μ: 1579 ΔΙΠΛΩΜΑΤΟΣ Υλοποίηση cancellation στον παραλληλοποιητικό μεταφραστή OMPi από τον Εμμανουήλ Φελουτζή με Α.Μ: 1579 ως μέρος των Υποχρεώσεων για τη λήψη του ΔΙΠΛΩΜΑΤΟΣ ΤΟΥ ΤΜΗΜΑΤΟΣ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΡΤΙΟΣ

Διαβάστε περισσότερα

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

Διαβάστε περισσότερα

Κατανεμημένος και Παράλληλος Προγραμματισμός

Κατανεμημένος και Παράλληλος Προγραμματισμός Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Παράλληλος προγραμματισμός - OpenMP Παράλληλες αρχιτεκτονικές

Διαβάστε περισσότερα

Διδάσκων:Μ.Χατζόπουλος, Παραδόσεις:Τρίτη 4-6, Τετάρτη 1-3; (Αμφιθέατρο Α15) Πληροφορίες στην ιστοσελίδα του μαθήματος http://www.di.uoa.

Διδάσκων:Μ.Χατζόπουλος, Παραδόσεις:Τρίτη 4-6, Τετάρτη 1-3; (Αμφιθέατρο Α15) Πληροφορίες στην ιστοσελίδα του μαθήματος http://www.di.uoa. Πληροφορική 1 Διδάσκων:Μ.Χατζόπουλος, Παραδόσεις:Τρίτη 4-6, Τετάρτη 1-3; (Αμφιθέατρο Α15) Πληροφορίες στην ιστοσελίδα του μαθήματος http://www.di.uoa.gr/~organosi/ 2 Η δομή του μαθήματος Εισαγωγή στην

Διαβάστε περισσότερα

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Δομή Επανάληψης Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Δομή Επανάληψης Επανάληψη με αρίθμηση DO = ,

Διαβάστε περισσότερα

Κατανεμημένος και. Ηλίας Κ. Σάββας Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας

Κατανεμημένος και. Ηλίας Κ. Σάββας Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Παράλληλος προγραμματισμός - OpenMP Παράλληλες

Διαβάστε περισσότερα

ΕΠΙΣΤΗΜΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΜΟΙ: Μια ενδιαφέρουσα σταδιοδρομία

ΕΠΙΣΤΗΜΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΜΟΙ: Μια ενδιαφέρουσα σταδιοδρομία ΕΠΙΣΤΗΜΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΜΟΙ: Μια ενδιαφέρουσα σταδιοδρομία N. Μισυρλής (e-mail: nmis@di.uoa.gr) Τμήμα Πληροφορικής και Τηλεπικοινωνιών Πανεπιστήμιο Αθηνών Parallel Scientific Computing Laboratory (PSCL)

Διαβάστε περισσότερα

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

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 10 η : Βελτιστοποιήσεις Τοπικότητας και Παραλληλισμού: Εξαρτήσεις και Μετασχηματισμοί Βρόχων Επεξεργασία Πινάκων Παραλληλισμός επιπέδου βρόχου Λόγω παραλληλισμού δεδομένων Επιτυγχάνεται

Διαβάστε περισσότερα

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES) Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES) Εισαγωγή H κεντρική μονάδα επεξεργασίας (ΚΜΕ) και η κύρια μνήμη αποτελούν τα βασικά δομικά στοιχεία ενός υπολογιστικού συστήματος. Η πρώτη εκτελεί εντολές χειρισμού δεδομένων

Διαβάστε περισσότερα

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ ΜΕΡΛΙΑΟΥΝΤΑΣ ΣΤΕΦΑΝΟΣ, ΠΕ19 ΚΕΦΑΛΑΙΟ 3 Αλγόριθμοι 3. Αλγόριθμοι 2 3. Αλγόριθμοι 3.1 Η έννοια του αλγορίθμου 3.2 Χαρακτηριστικά αλγορίθμου 3.3 Ανάλυση αλγορίθμων

Διαβάστε περισσότερα

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Μάθημα 3: Αρχιτεκτονική Υπολογιστών Μάθημα 3: Αρχιτεκτονική Υπολογιστών 3.1 Περιφερειακές μονάδες και τμήμα επεξεργασίας Στην καθημερινή μας ζωή ερχόμαστε συνέχεια σε επαφή με υπολογιστές. Ο υπολογιστής είναι μια συσκευή που επεξεργάζεται

Διαβάστε περισσότερα

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ << ΜΕΛΕΤΗ ΤΗΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ CUDA ΚΑΙ ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΡΤΩΝ GPU ΤΗΣ NVIDIA >> Αρ. Μητρώου: 04/2519

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ << ΜΕΛΕΤΗ ΤΗΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ CUDA ΚΑΙ ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΡΤΩΝ GPU ΤΗΣ NVIDIA >> Αρ. Μητρώου: 04/2519 ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ > Της φοιτήτριας ΚΕΛΑΪΔΗ ΑΙΜΙΛΙΑ Επιβλέπων καθηγητής ΔΙΑΜΑΝΤΑΡΑΣ ΚΩΝ/ΝΟΣ Αρ. Μητρώου: 04/2519 Θεσσαλονίκη

Διαβάστε περισσότερα

Μετρικές & Επιδόσεις. Κεφάλαιο V

Μετρικές & Επιδόσεις. Κεφάλαιο V Μετρικές & Επιδόσεις Κεφάλαιο V Χρόνος εκτέλεσης & επιτάχυνση Σειριακός χρόνος εκτέλεσης: Τ (για τον καλύτερο σειριακό αλγόριθμο) Παράλληλος χρόνος εκτέλεσης: (με επεξεργαστές) Επιτάχυνση (speedup): S

Διαβάστε περισσότερα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

Διαβάστε περισσότερα

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 1ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Ορισμός Wikipedia.org 2 Δομημένος προγραμματισμός (structured programming) ή διαδικαστικός προγραμματισμός (procedural

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Β ) Λειτουργικό Σύστημα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται

Διαβάστε περισσότερα

Τεχνολογικά Επιτεύγµατα. Πλεονεκτήµατα. Ορισµός Κατανεµηµένου Συστήµατος. Μειονεκτήµατα. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο 2005-06

Τεχνολογικά Επιτεύγµατα. Πλεονεκτήµατα. Ορισµός Κατανεµηµένου Συστήµατος. Μειονεκτήµατα. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο 2005-06 Τεχνολογικά Επιτεύγµατα Ε-03: Λειτουργικά Συστήµατα ΙΙ Εαρινό Εξάµηνο 2005-06 Ανάπτυξη ισχυρών µικροεπεξεργαστών ηµιουργία τοπικών δικτύων υψηλών ταχυτήτων «Εισαγωγή στα Κατανεµηµένα Λειτουργικά Συστήµατα»

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων 2.1 Αρχιτεκτονική Υπολογιστών 2.1 Αρχιτεκτονική Υπολογιστών 2.2 Γλώσσα Μηχανής 2.3 Εκτέλεση προγράµµατος 2.4 Αριθµητικές και λογικές εντολές 2.5 Επικοινωνία µε άλλες συσκευές

Διαβάστε περισσότερα

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB)

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB) ΣΧΟΛΗ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΕΜΠ ΜΕΘΟΔΟΙ ΕΠΙΛΥΣΗΣ ΜΕ Η/Υ 1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB) Ν.Δ. Λαγαρός Μ. Φραγκιαδάκης Α. Στάμος Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12 Αρχιτεκτονικές κατανεμημένων συστημάτων Στόχοι Εξήγηση των πλεονεκτημάτων και των μειονεκτημάτων των αρχιτεκτονικών κατανεμημένων συστημάτων Εξέταση των αρχιτεκτονικών συστημάτων πελάτηδιακομιστή και των

Διαβάστε περισσότερα

Σχεδιασµός βασισµένος σε συνιστώσες

Σχεδιασµός βασισµένος σε συνιστώσες Σχεδιασµός βασισµένος σε συνιστώσες 1 Ενδεικτικά περιεχόµενα του κεφαλαίου Ποια είναι τα "άτοµα", από τα οποία κατασκευάζονται οι υπηρεσίες; Πώς οργανώνουµε τις συνιστώσες σε ένα αρµονικό σύνολο; Τι είναι

Διαβάστε περισσότερα

QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009)

QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009) Quake I QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009) Είναι όντως χρήσιμη η transactional memory σε μεγάλες εφαρμογές; Παράλληλη υλοποίηση μιας

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #2 2 Γενικά Στο Εργαστήριο αυτό θα αναλύσουμε τη χρήση της βασικής εντολής ελέγχου ροής

Διαβάστε περισσότερα

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

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα