Hardware-Software-Kompromisse
Es gibt viele Methoden, um die Hardwarekosten zu senken. Eine Methode besteht darin, die Kommunikationsunterstützung und das Netzwerk weniger eng in den Verarbeitungsknoten zu integrieren und die Kommunikationslatenz und -belegung zu erhöhen.
Eine andere Methode besteht darin, eine automatische Replikation und Kohärenz in Software und nicht in Hardware bereitzustellen. Die letztere Methode bietet Replikation und Kohärenz im Hauptspeicher und kann mit einer Vielzahl von Granularitäten ausgeführt werden. Es ermöglicht die Verwendung von Standard-Standardteilen für die Knoten und die Verbindung, wodurch die Hardwarekosten minimiert werden. Dies setzt den Programmierer unter Druck, um eine gute Leistung zu erzielen.
Modelle zur entspannten Speicherkonsistenz
Das Speicherkonsistenzmodell für einen gemeinsam genutzten Adressraum definiert die Einschränkungen in der Reihenfolge, in der die Speicheroperationen an denselben oder an verschiedenen Orten in Bezug aufeinander ausgeführt zu werden scheinen. Tatsächlich muss jede Systemschicht, die ein Namensmodell für gemeinsam genutzte Adressräume unterstützt, über ein Speicherkonsistenzmodell verfügen, das die Programmierschnittstelle, die Benutzer-System-Schnittstelle und die Hardware-Software-Schnittstelle umfasst. Software, die mit dieser Schicht interagiert, muss ihr eigenes Speicherkonsistenzmodell kennen.
Systemspezifikationen
Die Systemspezifikation einer Architektur gibt die Reihenfolge und Neuordnung der Speicheroperationen an und wie viel Leistung tatsächlich daraus erzielt werden kann.
Im Folgenden sind die wenigen Spezifikationsmodelle aufgeführt, bei denen die Relaxationen in der Programmreihenfolge verwendet werden.
Relaxing the Write-to-Read Program Order- Mit dieser Modellklasse kann die Hardware die Latenz von Schreibvorgängen unterdrücken, die im Cache-Speicher der ersten Ebene übersehen wurden. Wenn sich der Schreibfehler im Schreibpuffer befindet und für andere Prozessoren nicht sichtbar ist, kann der Prozessor Lesevorgänge ausführen, die in seinem Cache-Speicher getroffen wurden, oder sogar einen einzelnen Lesevorgang, der in seinem Cache-Speicher fehlschlägt.
Relaxing the Write-to-Read and Write-to-Write Program Orders- Wenn Sie zulassen, dass Schreibvorgänge frühere ausstehende Schreibvorgänge an verschiedenen Speicherorten umgehen, können mehrere Schreibvorgänge im Schreibpuffer zusammengeführt werden, bevor der Hauptspeicher aktualisiert wird. Somit überlappen sich mehrere Schreibfehler und werden in unregelmäßiger Reihenfolge sichtbar. Die Motivation besteht darin, den Einfluss der Schreiblatenz auf die Prozessorunterbrechungszeit weiter zu minimieren und die Kommunikationseffizienz zwischen den Prozessoren zu erhöhen, indem neue Datenwerte für andere Prozessoren sichtbar gemacht werden.
Relaxing All Program Orders- Standardmäßig werden keine Programmaufträge außer Daten- und Steuerungsabhängigkeiten innerhalb eines Prozesses sichergestellt. Der Vorteil besteht somit darin, dass die mehreren Leseanforderungen gleichzeitig ausstehen können und in Programmreihenfolge von späteren Schreibvorgängen umgangen werden können und selbst nicht in der richtigen Reihenfolge ausgeführt werden können, sodass wir die Leselatenz verbergen können. Diese Art von Modellen ist besonders nützlich für dynamisch geplante Prozessoren, die Lesefehler nach anderen Speicherreferenzen fortsetzen können. Sie ermöglichen viele Nachbestellungen, sogar die Eliminierung von Zugriffen, die durch Compiler-Optimierungen vorgenommen werden.
Die Programmierschnittstelle
Die Programmierschnittstellen gehen davon aus, dass Programmaufträge bei Synchronisationsvorgängen überhaupt nicht gepflegt werden müssen. Es wird sichergestellt, dass alle Synchronisationsvorgänge explizit als solche gekennzeichnet oder gekennzeichnet sind. Die Laufzeitbibliothek oder der Compiler übersetzt diese Synchronisationsoperationen in die geeigneten auftragserhaltenden Operationen, die in der Systemspezifikation gefordert werden.
Das System stellt dann sequentiell konsistente Ausführungen sicher, obwohl es Operationen unter den Synchronisationsoperationen auf jede gewünschte Weise neu anordnen kann, ohne die Abhängigkeiten von einem Ort innerhalb eines Prozesses zu stören. Dies ermöglicht dem Compiler eine ausreichende Flexibilität zwischen den Synchronisationspunkten für die gewünschten Neuordnungen und gewährt dem Prozessor außerdem die Möglichkeit, so viele Neuordnungen durchzuführen, wie es sein Speichermodell zulässt. An der Schnittstelle des Programmiergeräts sollte das Konsistenzmodell mindestens so schwach sein wie das der Hardwareschnittstelle, muss jedoch nicht dasselbe sein.
Übersetzungsmechanismen
In den meisten Mikroprozessoren bedeutet das Übersetzen von Etiketten in Ordnungserhaltungsmechanismen das Einfügen eines geeigneten Speicherbarrierebefehls vor und / oder nach jeder als Synchronisation gekennzeichneten Operation. Es würde Anweisungen mit einzelnen Ladungen / Speichern speichern, die angeben, welche Anweisungen durchgesetzt werden sollen, und zusätzliche Anweisungen vermeiden. Da die Operationen jedoch normalerweise selten sind, ist dies nicht der Weg, den die meisten Mikroprozessoren bisher eingeschlagen haben.
Kapazitätsbeschränkungen überwinden
Wir haben die Systeme besprochen, die eine automatische Replikation und Kohärenz der Hardware nur im Prozessor-Cache-Speicher bieten. Ein Prozessor-Cache repliziert remote zugewiesene Daten direkt nach der Referenz, ohne dass sie zuerst im lokalen Hauptspeicher repliziert werden.
Ein Problem bei diesen Systemen besteht darin, dass der Bereich für die lokale Replikation auf den Hardware-Cache beschränkt ist. Wenn ein Block aus dem Cache-Speicher ersetzt wird, muss er bei Bedarf erneut aus dem Remote-Speicher abgerufen werden. Der Hauptzweck der in diesem Abschnitt diskutierten Systeme besteht darin, das Problem der Replikationskapazität zu lösen, aber dennoch Kohärenz in der Hardware und bei feiner Granularität der Cache-Blöcke für Effizienz bereitzustellen.
Tertiäre Caches
Um das Problem der Replikationskapazität zu lösen, besteht eine Methode darin, einen großen, aber langsameren RAS-Cache zu verwenden. Dies ist für die Funktionalität erforderlich, wenn die Knoten der Maschine selbst kleine Multiprozessoren sind und für die Leistung einfach vergrößert werden können. Es enthält auch replizierte Remote-Blöcke, die aus dem Cache-Speicher des lokalen Prozessors ersetzt wurden.
Nur-Cache-Speicherarchitekturen (COMA)
In COMA-Maschinen ist jedem Speicherblock im gesamten Hauptspeicher ein Hardware-Tag zugeordnet. Es gibt keinen festen Knoten, bei dem immer sichergestellt ist, dass Platz für einen Speicherblock zugewiesen wird. Daten werden dynamisch zu den Hauptspeichern der Knoten migriert oder in diesen repliziert, die auf sie zugreifen bzw. sie anziehen. Wenn auf einen Remote-Block zugegriffen wird, wird dieser im Attraktionsspeicher repliziert und in den Cache gebracht. Die Hardware hält ihn an beiden Stellen konsistent. Ein Datenblock kann sich in einem beliebigen Anziehungsspeicher befinden und sich leicht von einem zum anderen bewegen.
Reduzierung der Hardwarekosten
Um die Kosten zu senken, müssen einige Funktionen spezialisierter Hardware auf Software übertragen werden, die auf der vorhandenen Hardware ausgeführt wird. Für Software ist es viel einfacher, Replikation und Kohärenz im Hauptspeicher zu verwalten als im Hardware-Cache. Die kostengünstigen Methoden sorgen in der Regel für Replikation und Kohärenz im Hauptspeicher. Damit die Kohärenz effizient gesteuert werden kann, kann jede der anderen Funktionskomponenten des Assistenten von der Hardwarespezialisierung und -integration profitiert werden.
Die Forschungsanstrengungen zielen darauf ab, die Kosten mit verschiedenen Ansätzen zu senken, z. B. indem die Zugriffskontrolle in spezialisierter Hardware durchgeführt wird, aber Software und Standardhardware andere Aktivitäten zugewiesen werden. Ein anderer Ansatz besteht darin, eine Zugriffskontrolle in Software durchzuführen, und wurde entwickelt, um eine kohärente gemeinsame Adressraumabstraktion auf Warenknoten und Netzwerken ohne spezielle Hardwareunterstützung zuzuweisen.
Implikationen für parallele Software
Das Modell der entspannten Speicherkonsistenz erfordert, dass parallele Programme die gewünschten widersprüchlichen Zugriffe als Synchronisationspunkte kennzeichnen. Eine Programmiersprache bietet Unterstützung, um einige Variablen als Synchronisation zu kennzeichnen, die dann vom Compiler in die geeignete Anweisung zur Aufrechterhaltung der Reihenfolge übersetzt werden. Um die eigene Neuordnung der Zugriffe auf den gemeinsam genutzten Speicher durch den Compiler einzuschränken, kann der Compiler selbst Beschriftungen verwenden.