Μοντέλα - Αλγόριθμοι – Ταξινόμηση Advanced Data Indexing (Προηγμένη ευρετηρίαση δεδομένων)
Μοντέλα Δευτερεύουσας Μνήμης
I/O Αποδοτικοί Αλγόριθμοι Οι εσωτερικές τεχνικές caching και prefetching των Η / Υ είναι γενικού - σκοπού και δεν εκμεταλλεύονται πλήρως την τοπικότητα ( δεδομένων και εντολών ). Ορισμένοι υπολογισμοί μπορεί να μην συμφωνούν με τις τεχνικές αυτές και να απαιτούν μεγάλο I/O κόστος. Ειδικά όταν πρόκειται να διαχειριστούμε μεγάλα σύνολα δεδομένων ( πολύ μεγαλύτερα της μνήμης ) οι τεχνικές γενικού - σκοπού δεν αποδίδουν. Οι αλγόριθμοι που σχεδιάζονται ώστε να κάνουν το I/O κόστος όσο το δυνατόν μικρότερο αποδίδουν καλύτερα (external memory algorithms, I/O algorithms). Οι αλγόριθμοι αυτοί είναι βασισμένοι σε απλοποιημένα μοντέλα που ρίχνουν το βάρος στο I/O κόστος.
I/O Αποδοτικοί Αλγόριθμοι Διότι : η μεγαλύτερη βελτιστοποίηση της απόδοσης ενός αλγορίθμου προέρχεται από την ελαχιστοποίηση του κόστους της επικοινωνίας I/O μεταξύ της εσωτερικής μνήμης και της εξωτερικής ( δίσκος / δίσκοι ). Αυτό το I/O κόστος είναι και το πιο ακριβό σε σύγκριση με τις εσωτερικές μετακινήσεις (CPU L1-cache L2-cache RAM).
Η Ανάγκη για Μοντέλα Ένα μοντέλο μας επιτρέπει : Ευκολία ανάλυσης - σχεδίασης αλγορίθμων χωρίς ενοχλητικές λεπτομέρειες. Εμπεριέχει τα κρίσιμα χαρακτηριστικά του πραγματικού συστήματος ώστε εκεί να δώσουμε βάρος καθώς σχεδιάζουμε τον αλγόριθμο. Όμως : Ένα μοντέλο είναι πάντα λάθος ! Το θέμα είναι πόσο λάθος είναι.
Απλό Μοντέλο Δευτερεύουσας Μνήμης Μέτρηση πλήθους μεταφορών μπλοκ μεταξύ των 2 επιπέδων μνήμης (κόστος) Μοντελοποιεί το κύριο πρόβλημα Πολύ πετυχημένο (απλότητα) Μ → μέγεθος εσωτερικής μνήμης Β → μέγεθος μπλοκ δίσκου Περιορισμοί Οι παράμετροι B και M πρέπει να είναι γνωστοί Δεν αντιμετωπίζει πολλαπλά επίπεδα μνημών Δεν αντιμετωπίζει δυναμική μεταβολή του M CPU ΜνήμηΜνήμη Δίσκος Δίσκος I/O M B Aggarwal and Vitter 1988
D → πλήθος δίσκων P → πλήθος επεξεργαστών Το πλήθος των δίσκων μπορεί να είναι ίσο, μικρότερο ή μεγαλύτερο σε σχέση με το πλήθος των επεξεργαστών. Αν D<P τότε κάθε δίσκος διαμοιράζεται σε P/D επεξεργαστές, ενώ αν P D κάθε επεξεργαστής είναι υπεύθυνος για D/P δίσκους περίπου. Το Μοντέλο Παράλληλων Δίσκων (PDM – Parallel Disk Model) P … Vitter and Shriver 1994
Το Μοντέλο PDM – Ειδικές Περιπτώσεις P=1 P=DP=D
Άλλες Βασικές Παράμετροι του PDM Βασικές παράμετροι που εκφράζονται σε πλήθος αντικειμένων (# of data items): Ν → μέγεθος του προβλήματος Μ → μέγεθος εσωτερικής μνήμης Β → μέγεθος μπλοκ δίσκου Περιορισμοί: Τα Ν αντικείμενα είναι σταθερού μεγέθους Ισχύει M < Ν και 1 DB M/2 To M μοιράζεται στα CPU ισοδύναμα: M/P
Άλλες Βασικές Παράμετροι του PDM Η σχέση M < Ν εκφράζει ότι δεν χωράει όλο το πλήθος των αντικειμένων στην κύρια μνήμη (αν χωράει τότε δεν υπάρχει λόγος για σχεδιασμό I/O αποδοτικού αλγορίθμου). Η σχέση 1 DB M/2 εκφράζει ότι από τον κάθε δίσκο πρέπει να χωράνε τουλάχιστον δύο μπλοκ στην κύρια μνήμη. Αν δεν συμβαίνει αυτό τότε ακόμα και οι πιο απλοί αλγόριθμοι δεν μπορούν να υλοποιηθούν (π.χ. ταξινόμηση).
Τύποι Ερωτημάτων Μαζικά Ερωτήματα (batched queries): Τα ερωτήματα για επεξεργασία δίνονται όλα ταυτόχρονα. Τα επεξεργαζόμαστε όλα μαζί και απαντάμε στο κάθε ερώτημα. Άμεσα Ερωτήματα (on-line queries): Τα ερωτήματα έρχονται ένα - ένα σε σειρά. Επεξεργαζόμαστε και απαντάμε το κάθε ένα χωριστά με τη σειρά που έρχονται.
Άλλες Παράμετροι του PDM Q → πλήθος ερωτημάτων (για μαζικά ερωτήματα) Ζ → μέγεθος απάντησης (σε πλήθος αντικειμένων) Πολλές φορές βοηθάει να χρησιμοποιούμε ως μονάδα μέτρησης τα μπλοκ δίσκου (I/O κόστος) και όχι το πλήθος αντικειμένων. Τότε συμβολίζουμε:
Μετρικές Απόδοσης του PDM Οι κυριότερες μετρικές απόδοσης στο PDM είναι : 1. Το πλήθος των μεταφορών ( Ι / Ος ) που εκτελούνται ( κόστος I/O σε # μπλοκ ) 2. Ο χώρος που χρησιμοποιείται 3. Ο χρόνος υπολογισμού των επεξεργαστών Το (3) πρακτικά είναι αμελητέο ( συνήθως ) σε σχέση με τις άλλες δύο μετρικές. Υλοποιήσεις του PDM: Συστήματα RAID κλπ.
Τοπικότητα του PDM Πώς γίνεται η εκμετάλλευση του παραλληλισμού των πολλών δίσκων στο PDM; Απλή ιδέα (λωριδοποίηση δίσκων): Μεταφέρουμε στην μνήμη μία ολόκληρη λωρίδα (ρίγα) τη φορά (σε ένα I/O) και όχι ένα μπλοκ. Τα μπλοκ των δεδομένων ομαδοποιούνται στις λωρίδες (ρίγες). Το αποτέλεσμα είναι ότι οι D δίσκοι συμπεριφέρονται σαν ένας μεγαλύτερος με μέγεθος λογικού μπλοκ όχι B αλλά DB. Προσοχή: Απαιτείται ο συγχρονισμός των δίσκων.
Παράδειγμα Λωρίδων σε PDM Τα δεδομένα είναι αποθηκευμένα και στους D δίσκους απλωμένα με την μορφή λωρίδας : D0D0 D1D1 D2D2 D3D3 D4D4 Ρίγα Ρίγα Ρίγα Ρίγα Τότε η εγγραφή ( ή η ανάγνωση ) όλων των δεδομένων στους D δίσκους απαιτεί Ο (N/DB)= Ο (n/D) Ι / Ος που είναι και το βέλτιστο δυνατό.
Οι Στοιχειώδεις Διαδικασίες Το πόσο αποδοτικός είναι ένας αλγόριθμος εκφράζεται από τα ανώτερα όρια κόστους I/O των εξής στοιχειωδών διαδικασιών που περιέχει: Scanning (Σάρωση-Διαπέραση) πλήθους N αντικειμένων (περιλαμβάνει την σειριακή ανάγνωση ή εγγραφή των αντικειμένων). Sorting (Ταξινόμηση) πλήθους N αντικειμένων σε καθορισμένη διατεταγμένη μορφή. Searching (Αναζήτηση) ενός αντικειμένου μέσα από N ταξινομημένα αντικείμενα.
Οι Στοιχειώδεις Διαδικασίες Output (Έξοδος) πλήθους Z αντικειμένων που αποτελούν απάντηση σε ένα συγκεκριμένο ερώτημα. Κάθε γνωστός αλγόριθμος αναλύεται σε ένα σύνολο στοιχειωδών διαδικασιών. Ανάλογα με το πόσες και σε ποιες από αυτές αναλύεται, προκύπτει και το συνολικό του I/O κόστος.
I/O Κόστος Στοιχειωδών Διαδικασιών
Παρατηρήστε ότι: Στα όρια εμφανίζεται η μέση πολυπλοκότητα Θ. Κάτω από προϋποθέσεις τα όρια αυτά γίνονται Ο. (I/O αποδοτικοί αλγόριθμοι). Στην περίπτωση των D δίσκων (PDM) έχουμε σε όλες τις περιπτώσεις στη θέση του B το DB, με εξαίρεση του κόστους της ταξινόμησης.
Σημαντικότητα των Ορίων Για να εκτιμήσουμε τα βασικά όρια του πίνακα των στοιχειωδών πράξεων ας δούμε τι γίνεται όταν ένας αλγόριθμος δεν εκμεταλλεύεται την τοπικότητα: Για λόγους απλότητας ας θεωρήσουμε ότι D=1. Πολλοί γνωστοί αλγόριθμοι όπως π.χ. sorting, FFT, triangulation, convex-hull, έχουν απόδοση O(Nlog 2 N) όταν εκτελούνται με όλα τα αντικείμενα μόνο στην κύρια μνήμη.
Σημαντικότητα των Ορίων Αν όμως εκτελέσουμε έναν από αυτούς σε δεδομένα που δεν χωρούν στην κύρια μνήμη, αφήνοντας την virtual memory να αναλάβει τη διαχείριση των memory pages, τότε το ελάχιστο κόστος γίνεται Ω(Nlog 2 n).
Αποδοτική Διαπέραση (scan) - 1 δίσκος sum = 0 for i = 1 to N do sum = sum + A[i] sum = 0 for i = 1 to N do sum = sum + A[i] N B A Ο δίσκος είναι χωρισμένος σε ίσα μπλοκ μεγέθους Β, οπότε η σειριακή ανάγνωση ή εγγραφή N αντικειμένων απαιτεί O(N/B) ή O(n) I/Oς.
Αποδοτική Διαπέραση (scan) - D δίσκοι sum = 0 for i = 1 to N do sum = sum + A[i] sum = 0 for i = 1 to N do sum = sum + A[i] N DBDB A Οι δίσκοι είναι χωρισμένοι σε ίσα μπλοκ μεγέθους Β και λωριδοποιημένοι (ισοδύναμο με έναν δίσκο με μπλοκ μεγέθους DB), οπότε η σειριακή ανάγνωση ή εγγραφή N αντικειμένων απαιτεί O(N/DB) ή O(n/D) I/Oς.
Απόδοση της Λωριδοποίησης Δίσκων Από τα βασικά προβλήματα: 3 στα 4 έχουν βέλτιστες λύσεις εφαρμόζοντας αυτή την τεχνική (εφόσον έχουμε μείωση του κόστους με αντικατάσταση του B με DB): Διαπέραση (scanning) Αναζήτηση (search) Έξοδος (output) Το πρόβλημα της ταξινόμησης δεν λύνεται βέλτιστα με αυτή την τεχνική (εφόσον το βέλτιστο κόστος είναι μικρότερο αυτού που προκύπτει με αντικατάσταση του B με DB). Ας το δούμε πιο αναλυτικά αυτό:
Απόδοση της Λωριδοποίησης Δίσκων Πολυπλοκότητα για ταξινόμηση με έναν δίσκο: H Πολυπλοκότητα για ταξινόμηση με D δίσκους και λωριδοποίηση είναι (όπου B DB): Όμως η βέλτιστη είναι: <
Παράδειγμα Έστω ότι έχουμε N=10 12, M=10 9, B=10 4. Τότε n= 10 8 και m=10 5. Ας πάρουμε αρχικά D=2. Η απόδοση με λωριδοποίηση είναι : Η βέλτιστη απόδοση είναι : Ας μεταβάλουμε τώρα το πλήθος των δίσκων :
Παράδειγμα DOptimalStriping , , , N=10 12, M=10 9, B=10 4 Θ Πλήθος δίσκων D
Απόδοση της Λωριδοποίησης Δίσκων Για μικρό πλήθος δίσκων το χάσιμο που έχουμε από την λωριδοποίηση δεν είναι πολύ σημαντικό. Αν όμως έχουμε μικρότερη διαθέσιμη μνήμη η μεγάλο πλήθος δίσκων η διαφορά μεγαλώνει σημαντικά. Συνεπώς χρειαζόμαστε I/O αποδοτικούς αλγορίθμους που πετυχαίνουν το βέλτιστο όριο. Ο μόνος τρόπος για να γίνει αυτό είναι να απομονώσουμε τους δίσκους ώστε να λειτουργούν ανεξάρτητα ο ένας από τον άλλο. Η ανεξαρτησία αυτή μπορεί να γίνει είτε για την ανάγνωση είτε για την εγγραφή των δεδομένων.
Γιατί επιμένουμε με την ταξινόμηση ; Η ταξινόμηση στη δευτερεύουσα μνήμη (external sorting) είναι ένα κεντρικό πρόβλημα στο πεδίο των I/O αποδοτικών αλγορίθμων. Πολλά προβλήματα που λύνονται στην κεντρική μνήμη σε γραμμικό χρόνο, στην δευτερεύουσα μνήμη απαιτούν τον ίδιο χρόνο που απαιτεί στο μοντέλο PDM η διαδικασία της ταξινόμησης. Π.χ. finding connected components, triangulation, convex hull, FFT, permuting, list ranking, expression tree evaluation, κλπ.
Αποδοτική Ταξινόμηση
Μέθοδοι Αποδοτικής Ταξινόμησης Η μέση και η χειρότερη πολυπλοκότητα στο I/O κόστος της ταξινόμησης N αντικειμένων χρησιμοποιώντας D δίσκους είναι: Δύο βασικοί αλγόριθμοι την επιτυγχάνουν, οι οποίοι χρησιμοποιούν τους δίσκους ανεξάρτητα: Ταξινόμηση Διαχωρισμού (Distribution Sort) Ταξινόμηση Συγχώνευσης (Merge Sort)
Ταξινόμηση Διαχωρισμού Αναδρομικός αλγόριθμος (διαίρει και βασίλευε) Επιλέγονται S-1 στοιχεία διαχωρισμού με τα οποία χωρίζονται τα αντικείμενα σε S υποσύνολα δεδομένων, έτσι ώστε: Τα αντικείμενα κάθε υποσυνόλου (bucket) να είναι όλα μικρότερα από τα αντικείμενα του επόμενου bucket. Ταξινομούνται αναδρομικά όλα τα ανεξάρτητα buckets. Στο τέλος, συγχωνεύονται όλα τα ταξινομημένα buckets σε μία πλήρη ταξινομημένη λίστα.
Ταξινόμηση Διαχωρισμού Προϋπόθεση για να δουλέψει αποδοτικά ο αλγόριθμος αυτός είναι ο διαχωρισμός να γίνεται σε περίπου ίσου μεγέθους buckets. Τότε σε κάθε αναδρομή ο σχετικός παράγοντας διαμέρισης είναι Θ(S), οπότε θα υπάρχουν O(log S n) επίπεδα αναδρομής. Μετά από κάθε επίπεδο αναδρομής διατρέχουμε όλα τα αντικείμενα (scan σε O(n)), ώστε να επιλέξουμε τα νέα στοιχεία διαχωρισμού. Συνολικό Κόστος: O(nlog S n)
Παράδειγμα Ταξινόμησης Διαχωρισμού με 1 στοιχείο Σε κάθε πέρασμα διαχωρίζουμε με βάση 1 στοιχείο (S=2). Συνολικό πλήθος αναδρομών: Συνολικό κόστος: 3,46,29,48,75,63,12 5 3,42,43,125,69,87,6 37 2,123,44,35,667,
Ταξινόμηση Διαχωρισμού στον δίσκο Όλα τα δεδομένα είναι στον δίσκο. Για να χωρέσουν τα buckets στην κύρια μνήμη πρέπει να επιλέξουμε S Θ(M/B)= Θ(m) στοιχεία διαχωρισμού. Σύνολο Αναδρομών : Συνολικό Κόστος I/O: Βέλτιστο (D=1)
Ταξινόμηση Διαχωρισμού στον δίσκο Καθώς σαρώνονται τα δεδομένα σε κάθε επίπεδο, τα buckets στέλνονται στην κύρια μνήμη ένα - ένα για επεξεργασία Εκεί όμως ομαδοποιούνται σε buffers (μεγέθους ενός μπλοκ Β ) Κάθε φορά που γεμίζει ένας buffer ( μετά από ταξινόμηση ) γράφεται με ένα I/O στον δίσκο πάλι :
Ταξινόμηση Διαχωρισμού (D δίσκοι ) Με λωριδοποίηση έχουμε κόστος : Δεν είναι όμως το βέλτιστο ( για μικρό D είναι επαρκές ). Για να έχουμε το βέλτιστο : πρέπει να διαμορφώνονται τα buckets σε κάθε επίπεδο αναδρομής με κόστος O(n/D) I/O ς. Για να γίνει αυτό πρέπει να διαβάζονται και να γράφονται μαζικά Θ (D) μπλοκ, αλλά και να διασκορπιστούν ομοιόμορφα στους δίσκους ώστε να μην επιβαρύνονται κάποιοι περισσότερο. Πιο πολύπλοκοι αλγόριθμοι, π. χ. Partial Striping.
Επιλογή Στοιχείων Διαχωρισμού (S) Το μέγιστο πλήθος στοιχείων διαχωρισμού είναι max S=Θ(M/B)= Θ(m). Στο τελευταίο όμως επίπεδο αναδρομής δεν έχει νόημα να έχουμε λιγότερα από Θ(M) αντικείμενα. Άρα μπορούμε να περιορίσουμε το S σε O(N/M)=O(n/m). Τελικά μας συμφέρει να επιλέξουμε: S=Θ(min{m,n/m}). Είναι όμως δύσκολο να επιλέξουμε ντετερμινιστικά Θ(min{m,n/m}) στοιχεία διαχωρισμού, ώστε τα buckets να έχουν το ίδιο περίπου μέγεθος.
Μέθοδοι Επιλογής Στοιχείων S=Θ(min{m,n/m}): Άμεση επιλογή των πρώτων S στοιχείων από τη λίστα που ταξινομούμε (σε αναλογία με την μέθοδο quicksort) και ευχόμαστε να δουλέψει! Τυχαία δειγματοληψία (πιθανοτική μέθοδος): 1. Επιλέγουμε τυχαία SlogS στοιχεία από τη λίστα. 2. Τα ταξινομούμε και έπειτα επιλέγουμε κάθε logS- οστό στοιχείο για διαχωρισμό.
Τυχαία Δειγματοληψία Το κόστος Ι/Ο για την εκλογή των στοιχείων διαχωρισμού είναι: Ο(SlogS+Sort(SlogS)). Το S μπορεί να είναι το πολύ n ½. Οπότε κόστος: Κάθε καινούργια λίστα θα έχει μέσο μέγεθος Ο(Ν/S): Η πιθανότητα κάθε στοιχείου να πέσει σε μία υπολίστα είναι: 1/S Άρα το μέσο μέγεθος θα είναι: O(N/S) N SlogS... S
Ταξινόμηση Συγχώνευσης (2- δρόμων ) Αντίστροφη λογική από ταξινόμηση διαχωρισμού: Πέρασμα 1: Διάβασε ένα μπλοκ, ταξινόμηση και έπειτα αποθήκευση. Πέρασμα 2, 3, …, κτλ: Διάβασε 2 προηγούμενα περάσματα, ταξινόμηση, αποθήκευση. Κύρια Μνήμη ΕΙΣΟΔΟΣ 1 ΕΙΣΟΔΟΣ 2 ΕΞΟΔΟΣ Δίσκος
Παράδειγμα Merge Sort (2- δρόμων ) Σε κάθε πέρασμα διαβάζουμε και γράφουμε στον δίσκο κάθε ομάδα μπλοκ. n μπλοκ στο αρχείο ⇒ πλήθος περασμάτων: Συνολικό κόστος: Αρχείο Εισόδου 3,4 6,2 9,48,75,63,1 2 Ταξ. 1 μπλοκ ΠΕΡΑΣΜΑ 0 3,45,62,64,97,8 1,32 Ταξ. 2 μπλοκ ΠΕΡΑΣΜΑ 1 2,3 4,6 4,7 8,9 1,3 5,62 Ταξ. 4 μπλοκ ΠΕΡΑΣΜΑ 2 2,3 4,4 6,7 8,9 1,2 3,5 6 Ταξ. 8 μπλοκ ΠΕΡΑΣΜΑ 3 9 1,2 2,3 3,4 4,5 6,6 7,8
Ταξινόμηση Συγχώνευσης (R δρόμων ) εγγραφή ανάγνωση Συγχωνευτής 4-δρόμων Γενίκευση της συγχώνευσης δύο δρόμων: Η συγχώνευση R ακολουθιών με N στοιχεία απαιτεί O(N/B) I/Oς (δεδομένου ότι R ≤ M/B – 1). Συνολικό κόστος: O(nlog m n) επειδή έχουμε R=Θ(m).
Λειτουργία Αλγόριθμου Η MergeSort απαιτεί O(N/B·log M/B (N/B)) I/Oς Στην πράξη τα Ι/Ος είναι: 4-6 x διαπέραση εισόδου M M Διαχωρισμός σε διαστήματα Ταξινόμησε κάθε διάστημα Συγχώνευση 1... Διάστημα 1 Διάστημα 2 Διάστημα N/M N Ταξινομημένο Αταξινόμητη Είσοδος Ταξινομημένο Ταξινομημένη Έξοδος Συγχώνευση 2
Ανάλυση της Απόδοσης Κτίζονται N/M ταξινομημένες λίστες μεγέθους Μ Επαναληπτικά συγχωνεύονται οι λίστες φάσεις με I/Oς η κάθε μία συνολικό κόστος:
Single Buffering στην Merge Sort Συμφέρει η είσοδος να γίνεται από έναν ή περισσότερους δίσκους και η έξοδος σε άλλον δίσκο.
Γενική Τεχνική – Double Buffering Για να μειώσουμε το χρόνο αναμονής για την ολοκλήρωση των Ι/Ο χρησιμοποιούμε διπλούς buffers. Καθώς γεμίζει ο 1 ος εμείς χρησιμοποιούμε τον έτοιμο (2 ο ). ΕΞΟΔΟΣ ΕΞΟΔΟΣ΄ Δίσκος ΕΙΣΟΔΟΣ1 ΕΙΣΟΔΟΣ R ΕΙΣΟΔΟΣ 2 ΕΙΣΟΔΟΣ 1΄ ΕΙΣΟΔΟΣ 2΄ ΕΙΣΟΔΟΣ R΄ Μέγεθος μπλοκ B Προφανώς θα πρέπει να ισχύει: R<m/2-1.
Μεταθέσεις Η μετάθεση είναι μία ειδική περίπτωση ταξινόμησης Ν στοιχείων με βάση μία αναδιάταξή τους. Η μέση και χειρότερη πολυπλοκότητα κόστους I/O για να μεταθέσουμε N στοιχεία χρησιμοποιώντας D δίσκους είναι: Στην περίπτωση που έχουμε Βlogm=ο(logn), είναι πιο γρήγορο να μετακινούμε τα στοιχεία ένα-ένα χωρίς μπλοκ, οπότε έχουμε:
Μοντέλα Εσωτερικής Μνήμης
Cache Memory Model N: μέγεθος προβλήματος Β : μέγεθος cache line M: Μέγεθος cache α : συσχετισιμότητα cache Μοντέλο κόστους : Πλήθος από cache αποτυχίες Πλήθος εντολών
Internal Memory Model Όπως στο Cache Memory Model (CMM) συν : Β΄ : το πλήθος των δεδομένων σε μία σελίδα μνήμης (Memory Page) Τ : το πλήθος των μεταφράσεων στον TLB (Translation Look-aside Buffer) Μοντέλο Κόστους όπως στο CMM συν : TLB αποτυχίες
ΤΕΛΟΣ