Optimierung von Speicherbarrieren und atomaren CAS in C-Multithread-Queues: Inline-Assembler und Duff's Device?
Hallo zusammen,
ich arbeite an einem C-Projekt, welches komplexe Bitmasken-Operationen mit selbst implemntierten Speicherpools kombiniert. Ich benutze volatile Zeiger in einem Multithreading-Setup und versuche, die Performance durch Inline-Assembler und Register-Pinning zu optimieren. Wie kann ich am besten Speicherbarrieren in einer atomaren Compare-and-Swap Routine handeln, um Race Conditions in einem nicht-blockierenden Queue-Algorithmus zu vermeiden?
Zusätzlich würde ich gerne wissen, wie sich die Verwendung von Duff's Device auf die Pipeline-Prediction und Cache-Lokalität auswirkt.
Danke im Voraus!
1 Antwort
Wie kann ich am besten Speicherbarrieren in einer atomaren Compare-and-Swap Routine handeln, um Race Conditions in einem nicht-blockierenden Queue-Algorithmus zu vermeiden?
Du setzt die Barrieren da, wo du sie brauchst. Anders macht es keinen Sinn.
Zusätzlich würde ich gerne wissen, wie sich die Verwendung von Duff's Device auf die Pipeline-Prediction und Cache-Lokalität auswirkt.
Auf modernen Prozessoren im Zweifelsfalle negativ. Schleifen unrollen machen Prozessoren und Compiler heutzutage üblicherweise deutlich effizienter, als du das könntest. Insbesondere wenn du irgendwelche komischen Switch-Abfragen reinpackst.
Aber womöglich optimiert dir dein Compiler das auch einfach weg.