[Advcomparch] Υλοποίηση lock

Nikos Anastopoulos anastop at cslab.ece.ntua.gr
Mon Jul 1 18:03:09 EEST 2013


Καλησπέρα,

On 06/30/2013 11:51 AM, Lambros Flokas wrote:
> Έχω μια απορία για την υλοποίηση της lock.Δυστυχώς μετά από αρκετές
> προσομοιώσεις κατάλαβα ότι κάτι πήγαινε λάθος με την υλοποίηση μου και
> το επιβεβαίωσα με το DDEBUG του locks_scalability.Το πρόβλημα είναι ότι
> ακόμα δεν είμαι σίγουρος γιατί είναι λάθος η υλοποίηση και δεν μπορώ
> πλέον να αντιληφθώ πως θα κάνουμε χρήση της compare and swap (προσπάθησα
> να βρω εναλλακτικές εντολές του gcc αλλά αν και δούλευαν στο debug
> έλεγαν ότι έχουν κάποιους περιορισμούς οπότε τις άφησα)
> Η υλοποίηση μου βασιζόταν στο εξής : Η compare and swap κάνει swap μόνο
> όταν το lock είναι oldval αλλά εμείς στο test and set θέλουμε να κάνουμε
> set κάθε φορά έτσι κι αλλιώς οπότε σκέφτηκα να του δώσω σαν oldval την
> ίδια  την τιμή του lock δηλαδή *lock.

Παρόλο που δε φαίνεται από τα semantics της __sync_val_compare_and_swap 
στην εκφώνηση, η αλήθεια είναι ότι σε *κάθε* κλήση της, ανεξαρτήτως των 
τρεχόντων περιεχομένων του ptr, εκτελείται μια "ακριβή" ατομική εντολή 
που γράφει πάνω στο bus. Θεωρείτε δηλαδή ότι σε κάθε περίπτωση γίνεται 
εγγραφή της μνήμης, όπως κάνει και η test-and-set.

Όπως και να 'χει, η  TTAS υλοποίηση θα πρέπει να διαφοροποιηθεί από την 
TAS στο ότι κάνει απλά και "φθηνά" reads στην lock μεταβλητή μέσα σε ένα 
loop, και μόνο όταν αυτή *φανεί* ξεκλείδωτη επιχειρεί το "ακριβό" atomic 
operation.

Ελπίζω να βοήθησα.


N.


More information about the Advcomparch mailing list