Quake I
QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009) Είναι όντως χρήσιμη η transactional memory σε μεγάλες εφαρμογές; Παράλληλη υλοποίηση μιας περίπλοκης real life εφαρμογής όπως είναι το Quake. Σύγκριση δύο ειδών υλοποίησης coarse grained και fine grained Χρήσιμα συμπεράσματα και παρατηρήσεις
Περιγραφή του Quake Multi-player mode του Quake I Client -Server model O server υλοποιεί τον κόσμο του παιχνιδιού καθώς και συντονίζει την επικοινωνία μεταξύ των clients Οι clients προκαλούν συνεχή ανανέωση των γραφικών και είναι υπεύθυνοι για τις λειτουργίες διεπαφής (user-inteface)
Περιγραφή του Quake O server εκτελεί έναν ατέρμονο βρόχο
Περιγραφή του Quake Κατασκευή και ενημέρωση του BSP δέντρου
Παραλληλοποίηση του Quake Υπάρχει ήδη από το 2004 παράλληλη έκδοση του Quake (χρόνος υλοποιησ. 15 man months) H υλοποίηση αυτή είναι fined-grained lockbased Το Φεβρουάριο του 2009 η παραπάνω έκδοση ξαναγράφτηκε με την αντικατάσταση των locks με transactions (Atomic Quake) Αρκετά δύσκολη και χρονοβόρα εργασία
Παραλληλοποίηση του Quake Νέα στρατηγική παραλληλοποίησης Τώρα θα ξεκινήσουμε από την σειριακή έκδοση και θα προσπαθήσουμε να την παραλληλοποιήσουμε όσον το δυνατόν πιο εύκολα Επομένως έχουμε μια coarse-grained προσέγγιση Χρησιμοποιούμε OpenMP και transactional memory
QuakeTM Αναγνώριση κομματιών κώδικα που είναι κατάλληλα για παραλληλοποίηση (χρήση profiler και συστηματική εξέταση κώδικα) Μόλις τα κομμάτια αναγνωριστούν είναι εύκολη η διαδικασία του να προσθέσεις OpenMP pragmas και όρια transactional memory To δύσκολο είναι να αναγνωριστούν οι global data structures και ποιες μεταβλητές πρέπει να είναι τοπικές και ποιες διαμοιραζόμενες αναμέσα στα threads
QuakeTM parallization strategy Ανάλυση εκτέλεσης του σειριακού server
QuakeTM parallization strategy Επομένως όλη η προσπάθεια πηγαίνει στον παραλληλισμό του Request Processing
QuakeTM parallization strategy Συνολικά η coarse-grained προσέγγιση έχει 8 μεγάλα atomic blocks Τα 4 από αυτά τα πιο σημαντικά μιας και ευθύνονται για τον συγχρονισμό των εντολών κίνησης του client (η πιο συχνή ενέργεια που εκτελείται στο server) Κάθε μήνυμα από τον client αφαιρείται από τα πακέτα επικοινωνίας και μεταφράζεται σε μια ή περισσότερες εντολές Η εκτέλεση της εντολής κίνησης φαίνεται παρακάτω
QuakeTM parallization strategy
Θέματα παραλληλισμού και ReachPoints Σπαταλήθηκε πολύς χρόνος στο να αναγνωριστούν με το μάτι τα global από τα thread-specific δεδομένα Δεν είναι η ενδεδειγμένη λύση όταν έχεις να κάνεις με τόσο μεγάλα προγράμματα Υπάρχει ανάγκη για ανάπτυξη πιο αυτοματοποιημένων τρόπων αναγνώρισης τέτοιου είδους δεδομένων Η λύση που αναπτύχθηκε ονομάζεται ReachPoint
Θέματα παραλληλισμού και ReachPoints Η ιδέα προήλθε από την TM cache-line granularity conflict detection implementation H λύση των ReachPoints αποτελείται από έναν πίνακα με μετρητές για κάθε thread λαμβάνοντας υπόψην κάθε φορά την cache-line granularity (x*16 ακέραιοι για κάθε thread και μέγεθος cache-line 64 bytes) Παράδειγμα υλοποιησης φαίνεται παρακάτω
Θέματα παραλληλισμού και ReachPoints
Θέματα παραλληλισμού και ReachPoints Αν και απλοϊκή λύση βοήθησε πολύ στο ανακαλυφθούν κομμάτια κώδικα που είχαν διενέξεις Επιπλέον βρέθηκαν άλλα κομμάτια κώδικα που δεν θα έπρεπε να έχουν διενέξεις και παρόλα αυτά εμφάνιζαν aborts To πρόβλημα οφειλόταν στον μηχανισμό cashe-line granularity (πχ δύο εντελώς διαφορετικές μεταβητές βρίσκονταν στο ίδιο cache-line) H λύση ήταν να εφαρμόσουμε cache padding για αυτές τις περιπτώσεις Παρατηρήθηκε αύξηση της ταχύτητας μιας και ο αριθμός των aborts έπεσε αρκετά Ένας ΤΜ debugger θα βοηθούσε αρκετά
Μέθοδος αξιολόγησης Χρησιμοποιήθηκε ο υπάρχον κώδικας του Quake για την υλοποίηση ενός TraceBot του οποίου η συμπεριφορά ελεγχόταν από μια finite state machine Τροποποίηση του κώδικα του server για να γίνει δυνατός ο συχρονισμός με το Bot Χρήση της V3 έκδοσης του STM C/C++ compiler της Intel με Ο3 βελτιστοποιήσεις Η υλοποίηση της STM είναι μια βελτιωμένη έκδοση του McRT-STM
Αποτελέσματα Σύγκριση του QuakeTM με το σειριακό Quake (single-thread)
Αποτελέσματα Σύγκριση του QuakeTM με το global-lock version
Αποτελέσματα Σύγκριση του QuakeTM με το σειριακό Quake (parallel server running16 clients)
Αποτελέσματα Σύγκριση του QuakeTM με το global-lock version
Αποτελέσματα Σύγκριση του Atomic Quake (TM-fine) με το lock-fine
Αποτελέσματα Σύγκριση του Atomic Quake (TM-fine) με το lock-fine (parallel servers running16 clients)
Σύγκριση όλων των παράλληλων υλοποιήσεων
Συμπεράσματα - Ερωτήσεις