Frage

Was wird unter Verwendung eines expliziten Speicher Zaun gemeint?

War es hilfreich?

Lösung

Für die Leistung moderner CPUs oft gewinnt Befehle ausführen aus, um eine maximale Nutzung der verfügbaren Silizium zu machen (einschließlich Speicher-Lese / Schreibvorgänge). Da die Hardware-Anweisungen erzwingt Integrität Sie dies nicht bemerkt in einem einzigen Thread der Ausführung. Jedoch für mehrere Threads oder Umgebungen mit flüchtigen Speichern (Speicher abgebildeten E / A zum Beispiel), kann dies zu unvorhersehbarem Verhalten führen.

Ein Speicher Zaun / Barriere ist eine Klasse von Anweisungen, die in der Reihenfolge auftreten Speicher-Lese / Schreibvorgänge bedeuten Sie erwarten. Zum Beispiel kann ein ‚Voll Zaun‘ alle Lese- / schreiben, bevor der Zaun vor denen, die nach dem Zaun comitted werden.

Hinweis Speicher Zäune sind ein Hardware-Konzept. In höheren Sprachen sind wir für den Umgang mit mutexes und Semaphore verwendet - diese gut umgesetzt werden können Speicher Zäunen auf dem niedrigen Pegel und die explizite Verwendung von Speicherschranken sind nicht erforderlich. Die Verwendung von Speichern Barrieren erfordert eine sorgfältige Untersuchung der Hardware-Architektur und häufiger in Gerätetreiber als Anwendungscode gefunden.

Die CPU Neuordnungs unterscheidet sich von Compiler-Optimierungen - obwohl die Artefakte ähnlich sein können. Sie müssen gesonderte Maßnahmen ergreifen, um die Compiler-Neuordnungs Ihre Anweisungen zu stoppen, wenn der unerwünschte Verhalten verursachen kann (zum Beispiel Verwendung des flüchtigen Schlüsselwort in C).

Andere Tipps

Kopieren von auf eine andere Frage, Was sind einige Tricks dass ein Prozessor tut, um Code zu optimieren :

  

Das wichtigste wäre Speicherzugriff Neuordnungs sein.

     

Absent Speicher Zäunen oder Serialisierung Anweisungen ist der Prozessor freie Speicherzugriffe neu zu ordnen. Einige Prozessorarchitekturen haben Einschränkungen, wie viel sie neu anordnen können; Alpha ist bekannt, die schwächste für sein (das heißt die eine, die die meisten neu anordnen kann).

     

Eine sehr gute Behandlung des Themas in der Linux-Kernel-Source-Dokumentation zu finden, unter Dokumentation / Speicher-barriers.txt

.      

Die meiste Zeit ist es am besten Verriegelungs Primitiven von Ihrem Compiler oder Standardbibliothek zu verwenden; diese sind gut getestet, sollten alle erforderlichen Speicherbarrieren an der richtigen Stelle, und sind wahrscheinlich ziemlich optimiert (Sperr Primitiven Optimierung ist schwierig, selbst die Experten sie falsch manchmal).

Nach meiner Erfahrung bezieht er sich auf einen Speicherbarriere , die eine Anweisung (explizit oder implizite) Speicherzugriff zwischen mehreren Threads zu synchronisieren.

Das Problem tritt in der Kombination von moderner agressive Compiler (sie haben erstaunliche Freiheit Anweisungen neu zu ordnen, aber in der Regel wissen nichts von Threads) und modernem Multi-Core-CPUs.

Eine gute Einführung in das Problem ist das „ Das‚Double -Checked Locking ist gebrochen‘Erklärung “. Für viele war es der Weckruf, dass es Drachen sein.

Implicit volle Speicherbarrieren sind in der Regel in der Plattform Thread Synchronisationsroutinen enthält, die den Kern davon bedecken. Doch für die Lock-freie Programmierung und Implementierung von kundenspezifischen, leichten Synchronisationsmuster, müssen Sie oft nur die Barriere oder sogar eine Einweg-Schranke nur.

weiß Wikipedia alle ...

  

Speicherbarriere, die auch als Membar bekannt   oder Speicher Zaun, ist eine Klasse von   Anweisungen, die eine zentrale Ursache   Verarbeitungseinheit (CPU) erzwingen eine   Bestellung Beschränkung des Speichers   Operationen, bevor er ausgestellt und nach dem   Sperrbefehl.

     

CPUs beschäftigen Performance-Optimierungen   das kann zur Folge haben in Out-of-order   Ausführung, einschließlich Speicher laden und   Speicheroperationen. Speicherbetrieb   Neuordnen normalerweise unbemerkt   innerhalb eines einzigen Ausführungs-Thread,   sondern verursacht unvorhersehbares Verhalten in   gleichzeitige Programme und Gerätetreiber   es sei denn, sorgfältig kontrolliert werden. die genaue   Natur einer Bestellung Einschränkung ist   abhängige Hardware und durch die definierte   Architektur des Speichermodell. Etwas   Architekturen bieten mehrere   Hindernisse für die Durchsetzung verschiedener   Ordnungszwänge.

     

Speicher Barrieren typischerweise verwendet werden,   bei der Umsetzung von Low-Level-Maschine   Code, der gemeinsam genutzten auf Speicher arbeitet durch   mehrere Geräte. Ein solcher Code enthält   Synchronisations Primitiven und   Lock-freie Datenstrukturen auf   Multiprozessor-Systeme, und die Vorrichtung   Treiber, die mit dem Computer kommunizieren,   Hardware.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top