AlphaSort: A Cache-Sensitive Parallel External Sort Chris Nyberg, Tom Barclay, Zarka Cvetanovic, Jim Gray and David Lomet
Χαρακτηριστικά AlphaSort O Alphasort αλγόριθμος χρησιμοποιεί Clustered data structures File striping Quicksort Shared memory multiprocessors
Benchmark (1) Είσοδος: αρχείο από bytes records Πεδίο κλειδιού 10 bytes Είσοδος σε τυχαία σειρά Είσοδος δεν συμπιέζεται Έξοδος: ταξινομημένη η είσoδος με αύξουσα σειρά
Benchmark (2) 1.Έναρξη προγράμματος 2.Άνοιγμα αρχείου εισόδου και δημιουργία αρχείου εξόδου 3.Διάβασμα αρχείου εισόδου 4.Ταξινόμηση αρχείου 5.Εργαφή αρχείου εξόδου 6.Κλείσιμο αρχείων 7.Τερματισμός προγράμματος
Σύγκριση αποδόσεων (1)
Σύγκριση αποδόσεων (2)
Πλεονεκτήματα AlphaSort Προσπάθεια μείωσης των cache-misses. Mε την μείωση των καθυστερήσεων λόγω cache- misses πετύχαμε 4:1 βελτίωση της ταχύτητας, ενώ αν είχαμε εξαλείψει τελείως τα cache-misses θα είχαμε πετύχει επιπλέον 3:1 επιτάχυνση.
Μείωση cache-misses Επιλογή αλγορίθμου ταξινόμησης Quicksort Ταξινόμηση με χρήση πίνακα pointer ή key-prefix Οι εκτελέσεις που πραγματοποιούνται με τον αλγόριθμο Quicksort συνχωνεύονται με την χρήση replacement-selection tree
Eπιλογή Quicksort αλγορίθμου Ο αλγόριθμός Quicksort επιλέκτηκε εξαιτίας της πολύ καλής cache συμπεριφοράς του
Σύγκριση 4 τύπων Quicksort αλγορίθμου(1) Ταξινόμηση με χρήση Pointer Key/Pointer Key-Prefix/Pointer Record
Σύγκριση 4 τύπων Quicksort αλγορίθμου(2)
Σύμπεράσματα αποτελεσμάτων Για μεγάλα records η χρήση ταξινόμησης με Key/Pointer, Key-Prefix/Pointer είναι προτιμότερη Για μικρά records (<16 bytes) είναι βέλτιστη η χρήση ταξινόμησης με record Ο AlphaSort χρησιμοποιεί Key-Prefix Quicksort
Το σύστημα των multiprocessors με μοιραζόμενη μνήμη (1) Συστήματα Dec AXP μπορούν να έχουν πάνω απο 6 processors σε μια κατανεμημένη μνήμη. Ο Αlphasort δημιουργεί μια διεργασία για κάθε processor. H πρώτη διεργασία λέγετε root και οι άλλες workers
Το σύστημα των multiprocessors με μοιραζόμενης μνήμη (2) Η διεργασία root δημιουργεί ένα χώρο μοιραζόμενων διευθύνσεων, ανοίγει το input αρχείο, δημιουργεί το output αρχείο, εκτελεί ΙΟ διαδικασίες, αρχικοποιεί τις workers και κατευθύνει τις δραστηριότητες τους Οι διεργασίες workers εκτελούν την ταξινόμηση
Disk bottleneck προβλήμα Ανεξάρτητα πόσο γρήγορος είναι ο processor χρειαζόμαστε σίγουρα 1min για ΙΟ δραστηριότητες αφού έχουμε ταχύτητα 4.5MB/s για ανάγνωση και 3.5MB/s για εγραφή. Συνεπώς για 100MB record θα χρειαστούμε 25seconds για ανάγνωση και 35seconds για εγραφή.
Επίλυση του disk bottleneck προβλήματος Μοιράζουμε τα δεδομένα σε περισσότερους από ένα δίσκους (data striping) με την χρήση ενός Genroco disk array controller. Χωρίζοντας τα δεδομένα σε 8 δίσκους πετύχαμε ταχύτητα 27MB/s για ανάγνωση και 22MB/s για εγραφή, ενώ το overhead είναι ελάχιστο.
Οverhead data striping
Ελαχιστοποίηση των cache misses σε γενικότερα προγράμματα Ο compiler θα μπορούσε να συστοιχίζει μαζί τα συχνότερα χρησιμοποιούμενα βασικά blocks. Η συστοίχηση αυτή θα γίνεται λαμβάνοντας υπόψην run-time στατιστικά Δόμηση των δεδομένων στην μορφή line-list που φαίνεται παρακάτω
Νέα προτεινόμενα benchmark MinuteSort PennySort