-
HINTERGRUND
-
Gebiet der Erfindung
-
Die hierin beschriebenen beispielhaften Ausführungsformen betreffen allgemein einen effizienten Speicherzugriff und insbesondere ein Verfahren zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist. Die beispielhaften Ausführungsformen betreffen ferner eine entsprechende Speicherzugriffseinheit zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist, und ein Computerprogrammprodukt.
-
Technisches Gebiet
-
Viele Betriebslasten und eine moderne Datenverarbeitung beruhen auf grundlegenden Verarbeitungsschritten, die auf große Datenmengen identische Operationen anwenden, bei denen es sich um Abfolgen von Operationen handelt. Die Hauptschwierigkeit beim Realisieren einer hohen Leistung bei diesen Arbeitslasten besteht in der Regel darin, die Daten auf effizienteste Weise vom Speichersystem zu den Ausführungseinheiten und die Verarbeitungsergebnisse von den Ausführungseinheiten zurück in das Speichersystem zu bringen.
-
Die Verarbeitung, die bei vielen dieser Betriebslasten erforderlich ist, ist oftmals eine Kombination aus Multiplikation und Additionen bei entweder Gleitkomma- oder Ganzzahlwerten. Zum Beispiel beruht das Herzstück der Verarbeitung von Deep-Learning-Betriebslasten (sowohl Trainings- als auch Störeinflussbetriebslasten) auf dem Anwenden gewaltiger Mengen von Matrix-Multiplikationsoperationen an Eingangs- und/oder Trainingsdaten. Schablonencodes bilden das Herzstück vieler Modelle, die bei Anwendungen wie beispielsweise Wettervorhersage, Suche nach Öl und Gas und so weiter verwendet werden. Diese Schablonencodes aktualisieren iterativ Fehlerratenelemente gemäß einem feststehenden Muster, das als Schablone bezeichnet wird, normalerweise unter Einschließen einer bestimmten gewichteten Menge der Werte der benachbarten Elemente. Die FFT (Fast Fourier Transformation, schnelle Fourier-Transformation) ist einer der in Wissenschaft und Technik am weitesten verbreiteten Algorithmen und beruht auf dem Berechnen sehr großer Anzahlen von sogenannten Schmetterlingsberechnungen, die jeweils auf Multiplikationen und Additionen beruhen. Sowohl Schablonenberechnung als auch FFTs werden außerdem bei bestimmten Deep-Learning-Algorithmen (z.B. faltende neuronalen Netzen (convolutional neural networks, CNN)) verwendet.
-
Um eine hohe Leistung zu erzielen, sind die Ausführungseinheiten (die in der Regel eine Kombination aus Multiplikationseinheiten und Addierern einschließen) oftmals als Vektoreinheiten (SIMD-Einheiten) (SIMD = single instruction, multiple data) organisiert, die dieselben Operationen oder Kombinationen von Operationen viele Male parallel auf Eingangsdaten anwenden, die als Strom aus umfangreichen Datenvektoren bereitgestellt werden.
-
Das Abrufen eines Daten Vektors aus dem Speichersystem, das alle erforderlichen Operandenwerte für die Verarbeitungselemente beinhalten, die die Vektoreinheit bilden, ist oftmals wegen sogenannter Zweierpotenz-Schrittgrößen in den Adressabfolgen nicht einfach, die zum Lesen dieser Operandenwerte benötigt werden. Diese Art von Zugriffsmustern tritt zum Beispiel bei Betriebslasten auf, die auf Datenstrukturen zugreifen, die in einem linearen virtuellen oder physischen Adressraum durch Adressen mit einer Schrittweite von 1 (z. B. 0, 1, 2, 3 usw.), 8 (z. B. 0, 8, 16, 24 usw.) oder 256 (z. B. 0, 256, 512, 768, 1024 usw.) und so weiter zugeordnet sind.
-
Es liegen mehrere Offenbarungen vor, die ein Verfahren zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit betreffen, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist.
-
Das Dokument
US 9 705 532 B2 offenbart ein Verfahren und ein System für eine parallele Akkumulation von Informationsbits als Teil der Erzeugung von Paritätsprüfcodes geringer Dichte. Dadurch können aufeinanderfolgende Informationsbits mit Hilfe von Vektoroperationen akkumuliert werden, wobei die für Akkumulationen verwendete Paritätsadresse mit Hilfe des Zuordnens virtueller und privater Paritätsadressen kontinuierlich erfolgen können.
-
Das Dokument
US 7 793 038 B2 offenbart das Zuordnen einer Adresse für einen Speicherzugriff in einem Speichersystem in eine Verknüpfungsadresse, die eine Speicherbankkennung und eine interne Adresse der Speicherbank beinhaltet. Die Adresse ist in einen ersten Abschnitt und in einem zweiten Abschnitt unterteilt. Darüber hinaus wird die Speicherbankkennung bestimmt, indem eine Nachschlageoperation in einer Nachschlagematrix durchgeführt wird.
-
Ein Nachteil bekannter Lösungen besteht jedoch nach wie vor in dem Problem, dass bei vielen Anwendungen Datenvektoren in einer Vielfalt von Arten aufgebaut werden müssen, die mehrere unterschiedliche Zweierpotenz-Schrittgrößen in den Adressabfolgen einschließen, die zum Zugreifen auf Datenvektorelemente verwendet werden. Zum Beispiel kann zu einem Zeitpunkt ein Datenvektor aus Datenelementen zusammengesetzt sein, die eine Adressabfolge betreffen, die eine Schrittgröße von 1 einschließen, zu anderen Zeitpunkten kann ein Datenvektor aus Datenelementen zusammengesetzt sein, die eine Adressabfolge betreffen, die eine Schrittgröße von 8 einschließen, und so weiter. Da dieselben Datenelemente in einer Vielfalt von Arten mit anderen Datenelementen verknüpft sein können, um Datenvektoren zu bilden, wird es viel schwieriger sicherzustellen, dass alle Datenelemente, die zum Bilden eines Datenvektors verwendet werden, in getrennten Bänken gespeichert werden, sodass alle Datenelemente, aus denen ein Datenvektor besteht, in einem Verfahrenszyklus der zugrundeliegenden Hardware parallel aus diesen Bänken gelesen werden können. Die hierin vorgeschlagenen Konzepte sind auf dieses Problem gerichtet.
-
Das Dokument
US 2016 / 0 275 013 A1 betrifft eine Zuordnung einer Adresse für den Speicherzugriff in einem Speichersystem. Die Zuordnung kann in einer Kombination aus einem Speicherbankbezeichner und einer internen Speicherbankadresse erfolgen, die eine Adresse innerhalb der Speicherbank angibt. Daten können in einer Vielzahl von Speicherbänken in einer verschachtelten Weise gespeichert werden. Die Adresse ist in einen ersten Teil, einen zweiten Teil und einen dritten Teil unterteilt. Der Speicherbankbezeichner wird als Ausgabe einer Operation in einer Nachschlagematrix ermittelt, indem als erste Eingabe der erste Teil verwendet wird und als mindestens zwei weitere Eingaben für die Nachschlageoperation in der Nachschlagematrix die Ergebnisse von Paritätsfunktionen verwendet werden, die auf den zweiten und den dritten Teil angewendet werden. Die interne Adresse der Speicherbank wird auf der Grundlage des zweiten Teils und des dritten Teils der Adresse für die Speicherzugriffsadresse abgeleitet.
-
KURZDARSTELLUNG
-
Gemäß einem Aspekt kann ein Verfahren zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit bereitgestellt werden, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist. Das Verfahren weist ein Empfangen einer Startadresse des binären Datenvektors und einer Zweierpotenz-Schrittgröße s für Elemente des binären Datenvektors und Bestimmen von n Offsets auf, einer für jede der Speicherbänke, wobei jeder der Offsets bestimmt wird, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse angewendet werden, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird und Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden.
-
Des Weiteren weist das Verfahren ein Bestimmen einer Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit von einem äquivalenten Binärwert des Z-Vektors durch Umstellen von Schreibdaten, um einen ersten Datenvektor des binären Datenvektors zu erhalten, und durch Umstellen (shuffling) von Lesedaten, um einen zweiten Datenvektor des binären Datenvektors zu erhalten und ein paralleles Zugreifen auf die Abfolge der Abschnitte des binären Datenvektors in den n Speicherbänken der Speichereinheit auf.
-
Gemäß einem weiteren Aspekt kann eine Speicherzugriffseinheit zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit bereitgestellt werden, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert sein kann. Die Speicherzugriffseinheit weist eine Empfangseinheit auf, die zum Empfangen einer Startadresse des binären Datenvektors und einer Zweierpotenz-Schrittgröße s für Elemente des binären Datenvektors ausgelegt ist, und ein erstes Bestimmungsmodul, das zum Bestimmen von n Offsets ausgelegt ist, einer für jede der Speicherbänke, wobei jeder der Offsets bestimmt wird, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse angewendet werden, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird, Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden und Schreibdaten umgestellt werden, um einen ersten Datenvektor des binären Datenvektors zu erhalten, und durch Umstellen von Lesedaten, um einen zweiten Datenvektor des binären Datenvektors zu erhalten.
-
Darüber hinaus weist die Speicherzugriffseinheit ein zweites Bestimmungsmodul auf, das zum Bestimmen einer Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit von einem äquivalenten Binärwert des Z-Vektors ausgelegt ist, und eine grundlegende Zugriffseinheit, die zum parallelen Zugreifen auf die Abfolge der Abschnitte des binären Datenvektors in den n Speicherbänken der Speichereinheit ausgelegt ist.
-
Das vorgeschlagene Verfahren zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist, kann mehrere Vorteile und technische Auswirkungen bieten:
-
Es kann hauptsächlich ermöglichen, auch große oder lange Datenvektoren - insbesondere bei Matrixoperationen wie beispielsweise Multiplikationen und dergleichen - „in einem Zuge“ zu adressieren, d.h. grundsätzlich in einem Operationszyklus des Speichersystems. Dies kann möglich werden, da unter Umständen keine überlappende Adressierung erforderlich ist. Die Datenwerte unterschiedlicher Dimensionen in einem mehrdimensionalen Vektor sind unter Umständen immer über unterschiedliche Speicherbänke eines Speichersystems oder einer Speichereinheit verteilt. Somit wird durch Adressieren der unterschiedlichen Speicherbänke und innerhalb einer Speicherbank eines bestimmten Datenwertes einer Dimension des mehrdimensionalen Vektors die kürzeste mögliche Zugriffszeit auf alle Werte eines Vektors möglich.
-
Somit kann die Situation vermieden werden, bei der unter Umständen zwei oder mehr Zugriffe auf dieselbe Speicherbank erforderlich sind, um unterschiedliche Datenwerte unterschiedlicher Dimensionen desselben hyperdimensionalen Vektors zu adressieren. Dadurch können deutlich Betriebszyklen der Speichereinheit und somit des zugehörigen Datenverarbeitungssystems gespart werden. Daher kann durch das hier vorgeschlagene Konzept im Vergleich zu den dem Stand der Technik entsprechenden Techniken zum Zugreifen auf Datenvektoren in einem Speichersystem/einer Speichereinheit ein erheblicher Leistungsvorteil erreicht werden.
-
Das vorgeschlagene Konzept ermöglicht außerdem eine Art des Umstellens (shuffling) der Datenelemente des Vektors beim Schreiben auf die Speicherbänke sowie ein Zurück-Umstellen (back-shuffling) der Datenelemente beim Lesen der Daten des Vektors. Somit sind die Datenelemente des Vektors nach einem Schreib-Lese-Zyklus wieder so gut wie vor der Schreiboperation in die Speichereinheit/das Speichersystem sortiert.
-
Des Weiteren werden aufgrund aktueller Trends bei der Gestaltung von Computersystemen der Zugriff auf Daten im Speicher und die entsprechende Übertragung zu beherrschenden Faktoren, die sich bei vielen Anwendungen auf die Leistung auf der Systemebene auswirken. Durch Verbessern der Geschwindigkeit, mit der auf Datenvektoren im Speicher zugegriffen werden kann, die durch modernste Vektoreinheiten sehr effizient verarbeitet werden können, können die hierin beschriebenen Ausführungsformen beträchtlich dazu beitragen, die Leistung von Computersystemen bei einer Reihe von Betriebslasten wesentlich zu verbessern.
-
Im Folgenden werden zusätzliche Ausführungsformen des erfindungsgemäßen Konzepts beschrieben.
-
Gemäß einer bevorzugten Ausführungsform des Verfahrens können das Anwenden einer Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse ein Auswählen aus der Startadresse - insbesondere der Adresse eines ersten Elements des Vektors in einem linearen Adressraum einer CPU - log2(n) Abschnitte und ein Y-Abschnitt mit einer Größe von log2(n) Bits, ein Bestimmen eines Paritätsbits für jeden der log2(n) Abschnitte, was zu einem Paritätsvektor X mit log2(n) Dimensionen - d.h. einer Gruppe einzelner Bits - führt, und ein Durchführen von Bitebenen-XODER-Operationen zwischen X und Y aufweisen, was zu einem Z-Vektor führt. Es kann erwähnt werden, dass dadurch die log2(n) Abschnitte und der Y-Abschnitt durch Adressmasken auswählbar sein können - insbesondere durch log2(n) + 1] durch Adressmasken. Einzelheiten der Umstellungsoperation (shuffling operation) werden in Verbindung mit der nachfolgenden Beschreibung der Figuren deutlicher.
-
Gemäß einer nützlichen Ausführungsform des Verfahrens kann das Verwenden des Z-Vektors zum Zugreifen auf eine Zuordnungstabelle außerdem ein Auswählen einer Zeile in der Zuordnungstabelle aufweisen, die log2(n) Einträge aufweist, indem der Z-Vektor - insbesondere dessen äquivalenter Binärwert - als Index in der Zuordnungstabelle verwendet wird und die Ergebnisse von Zuordnungstabellenzugriffen mit einem Abschnitt der Startadresse verknüpft - das auch als „Zusammenführen‟ bezeichnet werden kann - werden, um die n Offsets zu erhalten. Einzelheiten werden nachstehend im Kontext der Figuren erläutert.
-
Gemäß einer vorteilhaften Ausführungsform des Verfahrens kann das Verknüpfen aufweisen, dass log2(n) Bits, die sich an einem Bit-Offset log2(s) der Startadresse befinden, durch die bestimmten log2(n) Zuordnungstabelleneinträge ersetzt werden, was zu log2(n) Offsets führt. Dadurch kann jeder als Offset in einer jeweiligen der log2(n) Bänke verwendet werden. Dies kann eine einfache Bestimmung mit nur sehr begrenztem Aufwand ermöglichen.
-
Gemäß einer zusätzlich bevorzugten Ausführungsform des Verfahrens kann das Bestimmen der Abfolge von Abschnitten - ein Prozess, der auch als Umstellen (shuffling) bezeichnet werden kann - des binären Datenvektors in den n Speicherbänken ein Steuern von log2(n) aufeinanderfolgenden Multiplexerstufen aufweisen, von denen jede eine Mehrzahl von Multiplexern mit 2 Eingangsbits aufweist, um die Gesamtbreite des Datenvektors zu behandeln. Dies kann ein Positionieren einzelner Datenwerte eines mehrdimensionalen Vektors ermöglichen, sodass unter Umständen keine überlappenden Adressen erforderlich sind.
-
Insbesondere kann die erste Multiplexerstufe den höchstwertigen Teil des Datenvektors mit dem niedrigstwertigen Teil in dem Fall vertauschen, in dem das entsprechende Bit des Z-Vektors gleich eins ist. Die zweite Multiplexerstufe kann dieselbe Funktion parallel auf den unteren und oberen Teil des Datenvektors unter Steuerung des zweiten Bits des Z-Vektors anwenden und so weiter. Diese log2(n) Multiplexerstufen können verwendet werden, um die verschiedenen Datenelemente zu vertauschen, die an den korrekten Speicherstellen in die Speicherbänke geschrieben bzw. aus diesen gelesen werden.
-
Gemäß einer zulässigen Ausführungsform des Verfahrens kann es sich bei der Zugriffsoperation um eine Leseoperation handeln. Alternativ oder in Kombination kann es sich bei der Zugriffsoperation um eine Schreiboperation handeln. Somit sind auch Löschoperationen als Teil des erfindungsgemäßen Konzepts verwendbar. Somit können alle Operationen in einer Speichereinheit, einer Speichereinheit der einzelnen Speicherbänke, unter Verwendung des hierin vorgeschlagenen Konzepts durchgeführt werden. Ein Unterschied kann in der Abfolge der Adresserzeugung oder beim erneuten Umstellen (reshuffling) der identifizierten Datenelemente eines größeren - z.B. hyperdimensionalen - Vektors bestehen.
-
Gemäß einer praktischen Ausführungsform des Verfahrens können die ausgewählten log2(n) Abschnitte der Startadresse gleich groß sein. Dies kann gleichermaßen unter dem Konzept der Zweierpotenz-Schrittgröße durchgeführt werden.
-
Gemäß einer weiteren praktischen Ausführungsform des Verfahrens kann der binäre Datenvektor in gleich großen Abschnitten in der Mehrzahl der n Speicherbänke gespeichert sein. Folglich kann somit eine gleichmäßige Verteilung von Datenelementen erreicht werden.
-
Gemäß einer Ausführungsform des Verfahrens, bei der eine Schreiboperation in die Speicherbänke behandelt wird, können das Bereitstellen der Startadresse, das Bestimmen der Offsets und das Bestimmen einer Abfolge von Abschnitten des binären Datenvektors (d.h. Abschnitt des Hauptkonzepts) und das Bestimmen einer Abfolge von Abschnitten (d.h. das Umstellen) vor der Schreiboperation des binären Datenvektors in die n Speicherbänke durchgeführt werden. Dies kann ein Speichern der Dimensionswerte des Vektors für eine schnelle Schreiboperation garantieren, die im Grunde genommen nur einen Schreibzyklus der Speichereinheit erfordert, und eine „gespiegelte“ Schreiboperation in Bezug auf die Daten ermöglichen.
-
Gemäß einer folgerichtigen Ausführungsform des Verfahrens können das Bereitstellen der Startadresse, das Bestimmen der Offsets und das Bestimmen einer Abfolge von Abschnitten des binären Datenvektors (siehe das Hauptkonzept) vor der Leseoperation des binären Datenvektors in die n Speicherbänke durchgeführt werden, und wobei das Bestimmen einer Abfolge von Abschnitten (d.h. das Umstellen) nach der Leseoperation des binären Datenvektors in die n Speicherbänke durchgeführt werden kann. Dieser Schritt kann erforderlich sein, um die Datenwerte des großen oder hyperdimensionalen Vektors zurück in die ursprüngliche Abfolge zu bringen.
-
Des Weiteren können Ausführungsformen die Form eines zugehörigen Computerprogrammprodukts annehmen, das von einem durch einen Computer nutzbaren oder durch einen Computer lesbaren Medium aus zugänglich ist, das Programmcode zur Verwendung durch oder in Verbindung mit einem Computer oder einem beliebigen System zur Ausführung von Anweisungen bereitstellt. Im Sinne der vorliegenden Beschreibung kann es sich bei einem durch einen Computer nutzbaren oder durch einen Computer lesbares Medium um eine beliebige Vorrichtung handeln, die Mittel zum Speichern, Weitergeben, Verbreiten oder Transportieren des Programms enthalten kann, das durch oder in Verbindung mit dem System, der Vorrichtung oder der Einheit zur Ausführung von Anweisungen verwendet werden kann.
-
KURZBESCHREIBUNG DER VERSCHIEDENEN ANSICHTEN IN DEN ZEICHNUNGEN
-
Es sollte beachtet werden, dass Ausführungsformen der Erfindung unter Bezugnahme auf unterschiedliche Patentschriftgegenstände beschrieben werden. Insbesondere wurden einige Ausführungsformen unter Bezugnahme auf Ansprüche zur Art des Verfahrens beschrieben, während andere Ausführungsformen unter Bezugnahme auf Ansprüche zur Art der Vorrichtung beschrieben werden. Ein Fachmann kann jedoch aus der vorstehenden und der nachfolgenden Beschreibung entnehmen, dass, sofern nicht anderweitig angegeben, außer beliebigen Kombinationen von Merkmalen, die zu einer Art von Patentschriftgegenstand gehören, auch beliebige Kombinationen zwischen Merkmalen, die zu anderen Patentschriftgegenständen gehören, insbesondere zwischen Merkmalen der Ansprüche zur Art des Verfahrens und Merkmalen der Ansprüche zur Art der Vorrichtung, als im vorliegenden Dokument offenbart anzusehen sind.
-
Die vorstehend definierten Aspekte und weitere Aspekte werden aus den hierin nachfolgend zu beschreibenden Beispielen deutlich und unter Bezugnahme auf die Beispiele von Ausführungsformen erläutert, auf die die Ausführungsformen jedoch nicht beschränkt sind.
-
Bevorzugte Ausführungsformen der Erfindung werden lediglich beispielhaft und unter Bezugnahme auf die folgenden Zeichnungen beschrieben:
- 1 zeigt ein Blockschema einer grundlegenden Ausführungsform des erfindungsgemäßen Verfahrens zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist.
- 2 veranschaulicht ein kompliziertes Speicheradressierungsmodell, das bei typischen Matrixmodifikationen erforderlich ist.
- 3 zeigt ein weiteres Anwendungsgebiet für das vorgeschlagene Konzept.
- 4 zeigt eine Ausführungsform einer beispielhaften Zuordnung.
- 5 zeigt ein Beispiel für eine Startadresse für einen Datenvektor, der 9 Bitelemente aufweist.
- 6 zeigt eine Ausführungsform einer beispielhaften Zuordnungstabelle und einen nächsten Schritt beim Bestimmen der Offsets für die Speicherbänke in einer Speichereinheit.
- 7 zeigt, wie ein Umstellen der Einträge in den Speicherbänken bestimmt werden kann.
- 8 veranschaulicht beispielhaft 8 Bänke, die die Speichereinheit darstellen.
- 9 zeigt als Beispiel eine Vektorstartadresse 256, Schrittgröße 1.
- 10 zeigt als Beispiel eine Vektorstartadresse 3, Schrittgröße 8.
- 11 zeigt ein realisierungsformnäheres Flussdiagramm eines Schreibprozesses gemäß dem vorgeschlagenen Grundkonzept.
- 12 zeigt ein realisierungsformnäheres Flussdiagramm eines Schreibprozesses gemäß dem vorgeschlagenen Grundkonzept.
- 13 zeigt ein Blockschema einer Speicherzugriffseinheit für einen binären Vektor in einer Speichereinheit, die eine Mehrzahl von Bänken aufweist.
- 14 zeigt ein Blockschema eines Computersystems, in dem die Speicherzugriffseinheit verwendet werden kann.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Im Kontext dieser Beschreibung werden gegebenenfalls die folgenden Konventionen, Begriffe und/oder Ausdrücke verwendet:
-
Der Begriff „binärer Datenvektor‟ kann ein Feld mit Werten (z.B. Bitwerte, Ganzzahlwerte, Gleitkommawerte, ein Zeichenfeld oder dergleichen) bezeichnen, das als Wörter von Abfolgen von Bits in einem Speichersystem eines Computers adressiert werden soll. Bei derartigen Speichersystemen kann es sich in der Regel um den RAM (random access memory) handeln. Je nach der Wortlänge an einer bestimmten Adresse kann eine vorgegebene Anzahl von Bits in einem Wort des Speichersystems in der Speichereinheit (beide Formen können im gesamten Text als Synonyme verwendet werden) gespeichert sein.
-
Der Begriff „Speichereinheit‟ kann ein größeres Speichermodul eines Computersystems bezeichnen, das in eine Mehrzahl von Bänken unterteilt sein kann. Jede Bank kann eine vordefinierte Anzahl von Speicherzellen enthalten, die in einzeln adressierbaren Wörtern einer bestimmten Größe organisiert sind. Die Speicherbänke der Speichereinheitsbänke können einzeln adressierbar sein, und in jeder Speicherbank können einzelne Wörter adressiert werden.
-
Der Begriff„Speicherbänke‟ kann eine Gruppe von Speicherzellen bezeichnen, wobei die Mehrzahl eine größere Gruppe von Speicherzellen definiert, auf die über eine Bankadresse zugegriffen werden kann. Innerhalb jeder Bank kann eine Mehrzahl einzelner Speicherzellen, die als Wörter organisiert sind, einzeln adressiert werden. In der Regel weist eine Speichereinheit eine Mehrzahl von Speicherbänken auf.
-
Der Begriff Startadresse des binären Datenvektors' kann in der Regel die Adresse eines ersten (oder nullten) Elements eines langen binären Datenvektors bezeichnen.
-
Der Begriff „Zweierpotenz-Schrittgröße‟ kann eine Abfolge von Elementen bezeichnen, die durch 2n Elemente dazwischen getrennt sind. Wenn n = 0, können die folgenden Elemente adressiert werden: 0, 1, 2, 3, ..., da 2° = 1. Wenn n = 1, können die folgenden Elemente adressiert werden: 0, 2, 4, 6, ..., da 2n = 1, und so weiter.
-
Der Begriff „Z-Vektor‟ kann einen Vektor mit einer Größe von log2(n) Bits bezeichnen, der erhalten wird, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Adresse angewendet wird.
-
Der Begriff „Zuordnungstabelle‟ kann eine Tabelle bezeichnen, die so viele Spalten wie die Anzahl von Bänken aufweist, die in der Speichereinheit enthalten sind. Bei den Elementen in der Tabelle kann es sich um Ganzzahlwerte handeln, die von null bis zur Anzahl von Bänken minus 1 reichen.
-
Im Folgenden wird eine ausführliche Beschreibung der Figuren gegeben. Alle Anweisungen in den Figuren sind schematisch. Als Erstes ist ein Blockschema einer grundlegenden Ausführungsform des erfindungsgemäßen Verfahrens zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit angegeben, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist. Anschließend werden weitere Ausführungsformen sowie Ausführungsformen einer Speicherzugriffseinheit zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit beschrieben, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist.
-
1 zeigt ein Blockschema einer Ausführungsform des erfindungsgemäßen Verfahrens zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist. - Als gedankliches Bezugsmodell für die folgenden Beispiele kann die Vorstellung dienen, dass der binäre Datenvektor 256 Bit lang ist und dass die Speichereinheit acht Bänke bei einer Breite von 32 Bits für jede Bank und einer Bankgröße von 64 Speicherstellen enthält.
-
Das Verfahren weist ein Empfangen, 102, einer Startadresse des binären Datenvektors - insbesondere einer Startadresse eines Arrays im Adressraum der CPU - und eine Zweierpotenz-Schrittgröße s für die Elemente des binären Datenvektors auf.
-
Das Verfahren weist außerdem ein Bestimmen, 104, von n Offsets, einer für jede der Speicherbänke, auf. Dadurch wird jeder der Offsets bestimmt, 106, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse angewendet werden, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird, 108, und Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden, 110.
-
Darüber hinaus weist das Verfahren ein Bestimmen, 112, einer Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit von einem äquivalenten Binärwert des Z-Vektors und ein paralleles Zugreifen, 114, auf den binären Datenvektor in den n Speicherbänken der Speichereinheit auf - insbesondere in einem Operationszyklus oder gleichzeitig.
-
2 veranschaulicht bei 200 ein kompliziertes Speicheradressierungsmodell, das bei typischen Matrixmodifikationen erforderlich ist. Die Figur zeigt ein einfaches Beispiel einer Matrixmultiplikation, bei der die Zeilen einer Matrix A elementweise mit den Spalten einer Matrix B angewendet werden. In dem Fall, in dem Elemente beider Matrizen in aufeinanderfolgende Adressspeicherstellen im linearen Adressraum geschrieben wären, würde auf jede Zeile in der Matrix A unter Verwendung einer Adressschrittgröße 1 und auf jede Spalte in der Matrix B unter Verwendung einer Adressschrittgröße zugegriffen werden, die gleich der Größe der Zeile ist. Da die letztgenannte Schrittgröße bei vielen Speichersystemen problematisch sein kann, wird in der Regel eine sogenannte Matrixtransponierungsoperation angewendet, die ein Umdrehen der Matrixwerte „über die Matrixdiagonale“ einschließt. Infolgedessen kann dann auf eine Spalte unter Verwendung eines Schrittgröße-1-Zugriffsmusters zugegriffen werden, um die resultierende Matrix C zu erzeugen. Dies erfolgt um den Preis, die gesamte Matrix lesen und neu schreiben zu müssen, was außerdem eine erhebliche Menge Speicherbandbreite und Zeit in Anspruch nehmen kann.
-
Ein weiteres Beispiel, das ein weiteres Anwendungsgebiet für das vorgeschlagene Konzept zeigt, ist bei 300 in 3 gezeigt. Es zeigt verschiedene Schablonen, die auf eine 2-D- oder 3-D-Struktur angewendet werden können. Aus den Veranschaulichungen ist ersichtlich, dass das Zugreifen auf alle Elemente, die durch eine einzige Schablone behandelt werden, zwei bzw. drei unterschiedliche Zweierpotenz-Schrittgrößen (für die 2-D- und die 3-D-Strukturen) einschließen würde.
-
Obwohl Zweierpotenz-Zugriffsmuster seit Langem untersucht werden, ist das Problem des ineffizienten Zugriffs noch nicht gelöst worden. Ein Problem besteht darin, dass diese Art des Zugriffs oftmals aufgrund der Organisation und der hervorragenden Adresszuordnung, die bei vielen Speichersystemen verwendeten werden, die oftmals unter Verwendung einer Zweierpotenz-Anzahl von Speicherbänken organisiert sind, zu einer verschlechterten Speicherleistung führt.
-
Bei speziellen Hochleistungs-Datenverarbeitungssystemen (HPC-Systemen) (HPC = high performance computing) können manchmal feststehende/hartverdrahtete Zuordnungen angewendet werden, die auf einem Durchführen einer Modulo-Operation an einer Primzahl oder ähnlichen Ansätzen beruhen, die spezifisch für eine bestimmte Betriebslast sind, da diese unter Umständen anders oder nicht programmierbar sind und daher nach wie vor in ungünstigeren/anormalen Fällen auftreten können. Der letztgenannte Mechanismus trägt außerdem zur Zugriffslatenz bei.
-
Vor dem Übergehen zur nächsten Figur sollten die folgenden Überlegungen zur Vektorverarbeitung und zum Vektorzugriff berücksichtigt werden:
-
Um parallel auf einen Datenvektor in n Bänken zuzugreifen (d.h., die Größe des Datenvektors ist gleich n * w, wobei w die Breite oder die Zugriffsfeinheit einer einzelnen Bank ist), müssen die korrekten Offsets für jede Bank erzeugt werden, was zu einer Gesamtzahl von n Offsets für jeden Datenvektor führt. Wenn zum Beispiel auf einen 8-Element-Datenvektor zugegriffen werden muss, der mit der Adressabfolge 0, 1, 2, 3, 4, 5, 6 und 7 (Schrittgröße 1) in Zusammenhang steht, die auf dem Zuordnungsbeispiel 400 in 4 beruht, muss auf die Speicherstellen an den folgenden Offsets in den 8 jeweiligen Speicherbänken zugegriffen werden: {0, 1, 2, 3, 4, 5, 6, 7}.
-
Die gezeigte Tabelle ist auf das vorstehend erwähnte Problem gerichtet, indem ein flexibles und programmierbares Adresszuordnungsmodell definiert wird, das perfekt zwischen den Zugriffsmustern mit einer Zweierpotenz-Schrittgröße-auf eine Datenstruktur verschachteln kann, die in einem Speichersystem gespeichert ist, das aus mehreren Speicherbänken besteht.
-
Dieses Zuordnungsmodell beruht auf einer kleinen 2-D-Nachschlagetabelle (nicht gezeigt), die durch zwei Werte indiziert wird, die aus der zuzuordnenden Adresse extrahiert wurden. Einer der beiden Indexwerte wird bestimmt, indem Paritätswerte ausgewählter Adressbits bitweise berechnet werden. Das zugrunde liegende Konzept muss jedoch nicht erläutert werden. Die Figur sollte lediglich zeigen, dass für ein perfektes Verschachteln mehrerer Zweierpotenz-Zugriffsmuster auch ein Umstellen der Abfolge von Speicherstellen erforderlich sein kann.
-
Die mit Schraffuren markierten „zugeordneten Adressen“ in 4 veranschaulichen, dass Datenvektoren mit einer Größe gleich der Anzahl von Speicherbänken (in dem Beispiel 8 Datenelemente), die mit ausgerichteten Adressabfolgen in Zusammenhang stehen, die eine Zweierpotenz-Schrittgröße einschließen, über alle Speicherbänke hinweg perfekt verschachtelt sind und auf diese somit als ein einziger Datenvektor zugegriffen werden kann (d.h. Lesen oder Schreiben), indem auf alle Speicherbänke parallel zugegriffen wird, wodurch genau ein Zugriff auf jede Bank erforderlich ist. Zum Beispiel kann in 4 parallel auf jeden Block ausgerichteter Adressen zugegriffen werden, der eine Schrittgröße 1 (z.B. Adressen 0, 1, 2, 3, 4, 5, 6, 7), eine Schrittgröße 2 (z.B. Adressen 0, 2, 4, 6, 8, 10, 12, 14), eine Schrittgröße 4 ((z.B. Adressen 0, 4, 8, 12, 16, 20, 24, 28), eine Schrittgröße 8 (z.B. Adressen 0, 8, 16, 24, 32, 40, 48, 56), eine Schrittgröße 16 (z.B. Adressen 0, 16, 32, 48, 64, 80, 96, 112), eine Schrittgröße 32 (z.B. Adressen 0, 32, 64, 96, 128, 160, 192, 224) einschließt, und so weiter. Kein erneuter Zugriff einer Bank ist erforderlich, da die Datenelemente, auf die zugegriffen werden soll, zwischen den Bänken gleichmäßig verteilt sind.
-
Im Falle einer Schreiboperation stellt Bank 0 das erste Element des Datenvektors (zugeordnete Adresse 0), Bank 1 das zweite (zugeordnete Adresse 1) bereit, und so weiter. In ähnlicher Weise werden im Falle einer Schreiboperation die Elemente des Datenvektors in sequenzieller Reihenfolge in die Bänke geschrieben. Wenn stattdessen auf einen 8-Element-Datenvektor zugegriffen wird, der mit der Adressabfolge 0, 2, 4, 6, 8, 10, 12 und 14 (Schrittgröße 2) in Zusammenhang steht, muss parallel auf die folgenden Offsets in den jeweiligen 8 Bänken zugegriffen werden: {0, 8, 2, 10, 4, 12, 6, 14}. In diesem Beispiel wird im Falle einer Leseoperation das erste Element des Datenvektors (zugeordnete Adresse 0) durch die Bank 0 bereitgestellt, das zweite Element (zugeordnete Adresse 2) wird durch die Bank 2 bereitgestellt, das fünfte Element (zugeordnete Adresse 8) wird durch die Bank 1 bereitgestellt und so weiter. Es wird klar sein, dass die Daten, die aus den Bänken gelesen werden, umgestellt werden müssen, um den gewünschten Datenvektor wiederherzustellen, der die Elemente in der Reihenfolge ihrer zugeordneten Adressen (0, 2, ..., 14) muss. Des Weiteren müssen beim Schreiben des Datenvektors die Elemente ebenfalls umgestellt werden, um jedes Element gemäß der Art und Weise korrekt zu schreiben, in der seine entsprechende Adresse in den Speicherbänken zugeordnet ist.
-
Je nach der Adressabfolge, die mit den Elementen des Datenvektors in Zusammenhang steht, kann ein Bereich unterschiedlicher Reihenfolgen bestehen, in denen die einzelnen Bank-Offsets erzeugt werden müssen und in denen die Lese- und Schreibdaten umgestellt werden müssen.
-
Ein Brute-Force-Ansatz würde verwendet werden, um die Adresse für jedes Element im Datenvektor unabhängig von den anderen Elementen zu erzeugen und es unabhängig einer Bankkennung und einem Bank-Offset zuzuordnen, was zu insgesamt n Adresserzeugungs- und Adresszuordnungsfunktionen führen würde. Die Ausgabe der Zuordnungsfunktionen (insbesondere die Bankkennungen) könnten dann verwendet werden, um zwei n-zu-n-Umstellungseinheiten (n-to-n shuffle units) zum Schreiben und Lesen der Datenvektoren zu steuern, was ermöglichen würde, die Elemente jedes Datenvektors in einer beliebigen möglichen Reihenfolge umzustellen.
-
Die Komplexität dieses Ansatzes nimmt jedoch sowohl in Bezug auf Leistung als auch auf Bereichskosten mit dem Wert von n schnell zu, was die Anwendung des Brute-Force-Ansatzes grundsätzlich auf kleine Werte von n beschränkt, zum Beispiel auf 4 oder 8.
-
Größere Datenvektoren sind jedoch sehr wichtig, da diese von ausschlaggebender Bedeutung sind, um die erforderliche Effizienz und Leistung bei der Berechnung zu erreichen. Dies wird durch die breiten Datenpfade noch verstärkt, die neuere Speichertechnologien bieten (z.B. HBM - high bandwidth memory).
-
Zu diesem Zweck werden die folgenden Innovationen behandelt:
- 1. auf Vektoren beruhende Offset-Erzeugung für einen ganzen Datenvektor, der alle Bänke parallel behandelt;
- 2. effizientes Umstellen der Datenelemente, um diese in die Speicherbänke zu schreiben;
- 3. effizientes Umstellen der Datenelemente, nachdem diese aus den Speicherbänken gelesen wurden;
- 4. Auswahl der Adressbits, die zum Berechnen eines jeden der Paritätsbits verwendet werden.
-
Bei der auf Vektoren beruhenden Offset-Erzeugung ist Folgendes zu beobachten: Bei einem beliebigen Datenvektor mit n Elementen, die mit einer ausgerichteten Adressabfolge mit einer beliebigen Zweierpotenz-Schrittgröße in Zusammenhang stehen, ist der Unterschied zwischen den n Adressen auf log2n benachbarte Bitpositionen in den Adressen beschränkt und behandelt alle n möglichen Werte dieser log2n Bitpositionen.
-
Wenn die Paritätsbits in einer bitverschachtelten Weise aus der Adresse extrahiert werden, werden die in eine beliebige ausgerichtete Adresssequenz mit einer Zweierpotenz-Schrittgröße eingeschlossenen n Adressen auf der Grundlage der Bankkennungen zugeordnet, die in einer einzelnen Zeile in der Nachschlagetabelle angegeben sind.
-
5 zeigt ein Beispiel 500 für eine Startadresse ,a' 502 für einen Datenvektor, der 9 Bitelemente a0, a1, ..., a8 enthält. Die MSB (most significant bits, höchstwertigen Bits) werden als Vektor Y verwendet, der später benötigt wird und eine Größe von log2(n) (n = 8) hat. Die Bits a0, a1, ..., a5 sind mit Maskenvektoren mo, m1 und m2 ((log2(n) = 3) UNDverknüpft, woraus sich die log2(n) Vektoren 504 auf der rechten Seite der Figur ergeben. Es kann angemerkt werden, dass die Maskenvektoren m0, m1 und m2 an Positionen des Y-Abschnitts der Startadresse a 502 „0“ enthalten.
-
Für jeden der Vektoren 504 wird ein Paritätsbit berechnet, was zu X0, X1, X2 führt; dies kann auch als Anwenden von XODER-Funktionen interpretiert werden. X0, X1, X2 werden als Dimensionen eines X-Vektors behandelt. Danach wird eine Bitebenen-XODER-Funktion auf X und Y angewendet, was zu einem Vektor Z derselben Größe oder Dimension (log2(n)) führt.
-
Hierfür zeigt 6 bei 600 einen nächsten Schritt beim Bestimmen der Offsets für die Speicherbänke in der Speichereinheit.
-
Es kann angemerkt werden, dass die Zuordnungstabelle die Eigenschaft hat, dass der Wert, der im Zusammenhang mit einer bestimmten Kombination aus den X- und Y-Werten gespeichert ist, dem XODER-Produkt dieser X- und Y-Werte gleicht. Dies führt wiederum zu der folgenden Eigenschaft: Wenn eine Bankkennung i in Spalte j einer bestimmten Zeile auftritt, tritt die Bankkennung j in Spalte i dieser Zeile ebenfalls auf (diese Werte können als vertauscht bezeichnet werden).
-
Zum Beispiel weist die Zeile, die Y = 6 in der Zuordnungstabelle 602 entspricht, eine Bankkennung 7 in Spalte 1 auf (was X = 1 entspricht). Dieselbe Zeile weist nun eine Bankkennung 1 in Spalte 7 auf (X = 7). Diese beiden Speicherstellen werden als Paar „Vertauschung“-Speicherstellen bezeichnet. Wegen der vorstehend erwähnten Eigenschaft „Vertauschen“ können, wie nun veranschaulicht wird, die Bank-Offsets direkt aus der Nachschlagetabellenzeile entnommen werden, wenn die aus den n Adressen extrahierten Paritätswerte in derselben Reihenfolge wie die Werte der log2(n) benachbarten Bitpositionen vorliegen würden, an denen sich die n Adressen unterscheiden.
-
Das Binäräquivalent von Vektor Z wird als Zeilenindex zur Zuordnungstabelle 602 verwendet. Jeder Binärwert der Zeile der Zuordnungstabelle 602 wird an einer definierten Position verwendet und ersetzt log2(n) Bits der Startadresse. Dies ist im unteren Teil von 6 veranschaulicht. In der Adresse a (vergleiche 502/5; Abschnitt a0, a1, ..., a5) werden die bei Bit-Offset 3 beginnenden log2(n) Bits durch das Binäräquivalent eines jeweiligen Zeileneintrags ersetzt; „3“ ergibt z.B. 011 (binär), wie im unteren linken Teil von 6 zu sehen ist. Dieses Prinzip wird auf jedes Element in der ausgewählten Zeile der Zuordnungstabelle angewendet. Es kann angemerkt werden, dass aus Gründen der Verständlichkeit nur die ersten beiden und die achte Adresse/Zeileneintrag-Kombination gezeigt sind. An diesem Punkt wurden die Offset-Werte für die einzelnen Bänke bestimmt.
-
Es kann außerdem angemerkt werden, dass im Falle eines 8-Bit-Beispiels die Zuordnungstabelle - d.h. Nachschlagetabelle - nur 8 * 8 * 3 Bits = 24 Bytes erfordert. Ein Nachschlagen von Einträgen in einer derartigen winzigen Tabelle bildet nur eine vernachlässigbare Anforderung im Vergleich zu den enormen Vorteilen, die das vorgeschlagene Verfahren darstellt.
-
In einem nächsten Schritt - vergleiche 7 - muss ein Umstellen der Einträge in den Speicherbänken bestimmt werden. Hierzu wird ein erneuter Aufruf des Z-Vektors benötigt. Aufgrund der Tatsache, dass es sich bei Z um einen binären Vektor handelt, sind die Elemente des Z-Vektors entweder „0“ oder „1“. Somit ist die Vertauschung, die durch die Bits von Vektor Z gesteuert wird, wie folgt definiert: Bit = 1 bedeutet Vertauschung eines Paares von Einträgen in der Startadresse; Bit = 0 bedeutet „kein Vertauschen“.
-
Dies ist durch nach unten gerichtete Pfeile (keine Vertauschung) in 7 oder gekreuzte Pfeile (Vertauschen) gezeigt, was beginnend mit dem LSB (least significant Bit, niedrigstwertiges Bit) des Z-Vektors beginnend nacheinander in einer Abfolge von log2(n) Schritten angewendet wird, wie in 6 veranschaulicht.
-
Dies kann nun in einem Beispiel 800 von 8 Bänken veranschaulicht werden, die die Speichereinheit 802 in 8 darstellen. Zum Beispiel schließt eine Adressabfolge 64, 65, 66, 67, 68, 69, 70 und 71 (die eine Schrittgröße 1 einschließt) einen Y-Wert gleich 1 ein und wird daher gemäß der Zeile 1 (Y = 1) in der Zuordnungstabelle 804 zugeordnet: Adresse 64 (vergleiche 808) wird in Bank 1 zugeordnet (vergleiche 806), Adresse 65 in Bank 0, Adresse 66 in Bank 3, Adresse 67 in Bank 2, Adresse 68 in Bank 5, Adresse 69 in Bank 4, Adresse 70 in Bank 7 und Adresse 71 in Bank 6. Die jeweiligen Offsets gleichen den 6 niedrigstwertigen Adressbits, bei denen es sich handelt um: 0, 1, 2, 3, 4, 5, 6 und 7. Die log28 = 3 Bitpositionen, an denen sich diese acht Adressen unterscheiden (wie vorstehend erörtert), befinden sich an den Adressbitpositionen 0, 1 und 2, die ebenfalls den 3 niedrigstwertigen Bits der Bank-Offsets gleichen. Bei den vorhergehenden acht Offsets gleichen die Werte an diesen Bitpositionen 0, 1, 2,3, 4, 5, 6 und 7 (diese gleichen den Offset-Werten, da die anderen Offset-Bits in diesem Beispiel null betragen). Wegen der Art und Weise, in der die Nachschlagetabelleninhalte erzeugt werden, gleichen die Werte dieser sich unterscheidenden log2(n) Bitpositionen dem Wert der Paritätsbits.
-
Auf der Grundlage der vorstehend erwähnten Eigenschaft „Vertauschung“ der Nachschlagetabelleninhalte lässt sich ableiten, dass, wenn eine Adresse auf der Grundlage des entsprechenden Nachschlagetabellenelements einer bestimmten Bankkennung zugeordnet werden soll, die diesem Element entsprechende Vertauschungsspeicherstelle den Wert der Paritätsbits für diese Adresse enthält, die gleich dem Wert der sich unterscheidenden log2(n) Bitpositionen ist. Dies lässt darauf schließen, dass ein Offset-Vektor erzeugt werden kann, indem der Y-Wert für die erste Adresse in einer ausgerichteten Adressabfolge bestimmt wird und dann n Kopien des aus dieser ersten Adresse entnommenen Offsets erhalten werden (indem der niedrigstwertige Teil genommen wird, wie vorstehend beschrieben), indem die jeweiligen Zeilenwerte, die dem Y-Wert für die erste Adresse in der Abfolge entsprechen, an den sich unterscheidenden log2(n) Bitpositionen ersetzt werden.
-
Diese Eigenschaft gilt für eine beliebige ausgerichtete Abfolge von n Adressen, die eine beliebige Zweierpotenz-Schrittgröße einschließen. Sie ist nicht auf Zweierpotenz-Schrittgrößen beschränkt, bei denen die n sich unterscheidenden Bitpositionen - wie vorstehend erörtert - die Bits des X-Feldes in einer „ausgerichteten“ Weise behandeln (d.h. „Start“ bei Bitposition X0, gefolgt von Position X1 und so weiter). Dies liegt daran, dass die Werte beliebiger n aufeinanderfolgender Bitpositionen stets zum Indizieren unterschiedlicher Einträge in derselben Tabellenzeile führen.
-
Die beachtenswerte Folgerung besteht darin, dass auf der Grundlage dieser Eigenschaft die Werte der n Bank-Offsets direkt abgerufen werden können, indem die Werte aus der Zeile, die durch den aus der Adresse „a‟ abgeleiteten Y-Wert indiziert ist, gegen den Offset-Wert ausgetauscht werden, der aus der Adresse a an den n Bitpositionen abgeleitet wurde, die dem log2-Wert der Zweierpotenz-Schrittgröße entsprechen. Dies ist in dem Flussdiagramm in 11 dargestellt, das die Schritte zum effizienten Erzeugen der Offsets für alle Bänke zeigt, indem die folgenden Schritte angewendet werden: 1) nur die erste Adresse der Adressabfolge zuordnen, d.h. Parität berechnen, Y-Wert ableiten, Offset ableiten, 2) einen Tabellennachschlagevorgang entsprechend Y durchführen, 3) ein paralleles Verschieben und eine bitweise erfolgende ODER-Funktion durchführen, um die tatsächlichen Bank-Offsets zu erhalten.
-
Vor der Hinwendung zu den Flussdiagrammen sollen zwei zusätzliche Beispiele einer Zuordnung angegeben werden. 9 zeigt ein Beispiel 900 als Vektorstartadresse 256, Schrittgröße 1 (Adressen 256, 257, 258, ..., 263). Da 256 gleichbedeutend mit 100000000b ist, können der Y-, X- und Z-Vektor bestimmt werden als Y = 100b, X = 000b, Z = 100b, sodass Zeile 4 (100b) in der Zuordnungstabelle (vergleiche 602, 6) entspricht: 4 5 670 12 3. Somit lauten die Bank-Offsets: 4, 5, 6, 7, 0, 1, 2, 3 (jeweils, für Bank 0 bis 7). Das Datenvektor-Umstellen (data vector shuffling) bei Z = 100b setzt voraus, dass die ersten vier Einträge mit den zweiten vier Einträgen vertauscht werden.
-
10 zeigt ein Beispiel 1000 als Vektorstartadresse 3, Schrittgröße 8 (somit Adressen 3, 11, 19, ..., 59). Wegen der Startadresse = 3 = 000000011b ergibt sich Y = 000b, X = 011b, Z = 011b. Zeile 3 (011b) in der Zuordnungstabelle 602 entspricht: 3 2 1 0 7 6 5 4. Daher können die Bank-Offsets bestimmt werden als: 27(011011b), 19(010011b), 11, 3, 59, 51, 43, 35 (jeweils, für Bank 0 - 7).
-
Der Abschnitt für das Datenvektor-Umstellen wird bestimmt durch: Z = 011b setzt voraus, dass jedes Paar benachbarter Einträge in einem ersten Schritt zuerst vertauscht wird, gefolgt durch das Vertauschen des ersten Blocks aus zwei Einträgen mit dem zweiten und des dritten Blocks aus zwei Einträgen mit dem vierten. Die Ergebnisse sind in 8 mit Stielmarkierungen neben den jeweiligen Bankeinträgen gezeigt.
-
11 zeigt ein Flussdiagramm 1100 einer Erzeugung von Zugriffs-Offsets für einen Leseprozess in einer im Vergleich zu 1 realisierungsnäheren Form.
-
Kurz gesagt, Einzelheiten werden im Folgenden ebenfalls erläutert, der Ablauf von Aktionen geschieht wie folgt: Zuerst wird die Adresse „a‟ erhalten 1102. Danach werden die Parität, das Y-Feld und ein Anfangs-Offset für die Adresse „a‟ abgeleitet 1104. Ein Basis-Offset wird für alle Bänke erhalten 1106, indem auf der Grundlage des Y-Feldes (oder der Parität) auf eine Zeile in der Zuordnungstabelle zugegriffen wird. Als Nächstes wird der Basis-Offset für alle Bänke auf Bitpositionen verschoben 1108, die der Ziel-Zweierpotenz-Schrittgröße entsprechen. Schließlich wird der Anfangs-Offset zusammengeführt 1110, der für die Adresse „a‟ mit verschobenen Basis-Offsets bestimmt wurde, die aus der Zuordnungstabelle erhalten wurden, um Offsets für alle Speicherbänke zu erhalten.
-
Diese kompakte Flussdiagrammdarstellung wird in den folgenden Absätzen erneut erörtert:
-
Ein effizientes Umstellen der Datenvektorelemente, um diese in die Speicherbänke der Adressen in einer Adressabfolge zu schreiben, könnte in einer beliebigen Weise über n Speicherbänke hinweg zugeordnet werden, dann würde eine Gesamtmenge von n! Möglichkeiten bestehen, in denen die entsprechenden Schreibdaten umgestellt werden müssen, um jedes Datenelement in die korrekte Bank zu schreiben. Bei größeren Werten von n nimmt dies schnell zu und würde sehr große n-zu-n Umstellungseinheiten erfordern.
-
Bei den vorstehend erörterten Zuordnungsmodellen kann das Schieben jedoch wesentlich vereinfacht werden. Dies wird nun unter Verwendung der vorstehend erwähnten beispielhaften Zuordnungsmodelle veranschaulicht.
-
Im Folgenden wird angenommen, dass die Paritätswerte (d.h. X) und die Offset-Werte identisch geordnet sind. Dies ist der Fall, wenn das niedrigstwertige, sich unterscheidende Adressbit durch das niedrigstwertige (X)-Paritätsbit, das zweite, sich unterscheidende Adressbit durch das nächste Paritätsbit behandelt wird und so weiter. Wie diese Einschränkung bei Zugriffen mit zufälliger Zweierpotenz-Schrittgröße eingehalten werden kann, wird nachstehend in dem Absatz weiter beschrieben, in dem die Auswahl von Adress-/Paritätsbits behandelt wird.
-
Wegen der Art, in der die Zuordnungstabellen ausgelöst werden (Eigenschaft „Vertauschen“), wird das Umstellen ähnlich wie die Erzeugung des Offset-Vektors der Bank durch eine einzige Zeile in der Nachschlagetabelle bestimmt. Eine interessante Eigenschaft der Zuordnung ist aus der Zuordnungstabelle in 6 direkt ersichtlich: jede Zeile in der Zuordnungstabelle kann aus der ersten Zeile (die Y = 0 entspricht) abgeleitet werden, indem die Zeilenelemente in einer „ausgerichteten Weise“ vertauscht werden, wobei Blöcke verwendet werden, die k aufeinanderfolgende Zeilenelemente behandeln, wobei keine Zweierpotenz mit einem Wert im Bereich von 2 bis zur Zeilengröße n/2 ist.
-
Zum Beispiel kann in 6 die Y = 1 entsprechende Zeile aus der ersten Zeile abgeleitet werden, die Y = 0 entspricht, indem vier Blöcke mit jeweils 2 Elementen {0, 1}, {2, 3}, {4, 5}, {6, 7} identifiziert und alle Elemente in jedem Block vertauscht werden. Die nächste Zeile, die Y = 2 entspricht, kann abgeleitet werden, in dem zunächst zwei Blöcke mit jeweils 4 Elementen, {0, 1, 2, 3} und {4, 5, 6, 7}, abgeleitet werden und dann zwei Blöcke mit einer Größe von 2 Elementen in jedem dieser Blöcke, {0, 1} und {2, 3} bzw. {4, 5} und {6, 7}, identifiziert und jeder dieser beiden 2-Element-Blöcke innerhalb eines 4-Element-Blocks vertauscht wird. In 6 ist ersichtlich, dass alle verbleibenden Zeilen durch Vertauschen auf der Ebene von 4-Element-Blöcken oder auf der Ebene von 2-Element-Blöcken innerhalb eines 4-Element-Blocks oder durch Kombinationen aus beidem aus der ersten Zeile abgeleitet werden können.
-
Eine weitere wichtige Eigenschaft, die aus den Beispielen in den 6 und 8 ersichtlich ist, besteht darin, dass das höchstwertige Bit des Z-Vektors zum Bestimmen verwendet werden kann, ob Vertauschungsoperationen auf der Ebene der größten Blockgröße bei dieser Zuordnungstabelle durchgeführt werden müssen, der nächste Z-Vektor verwendet werden kann, um dies bei der Ebene der zweitgrößten Blockgröße zu bestimmen und so weiter.
-
Wegen der Eigenschaft „Vertauschung“ können die vorstehend erörterten Eigenschaften nun direkt zum Umstellen der Schreibdaten verwendet werden, indem dasselbe Blockvertauschungskonzept in der folgenden Weise verwendet wird: 1) der Z-Wert wird für die Startadresse einer Abfolge aus n Adressen bestimmt (wie vorstehend beschrieben), 2) wenn das höchstwertige Bit des Z-Wertes gesetzt ist, werden die n Schreibdatenelemente auf der Ebene der größten Blockgröße vertauscht, die n/2 beträgt, 3) wenn das nächstwertige Bit des Z-Wertes gesetzt ist, werden die n Schreibdatenelemente auf der Ebene der nächsten Blockgröße vertauscht, die n/4 beträgt, 4) und so weiter. Dies ist durch das Flussdiagramm in 12 veranschaulicht. Bei einem Speichersystem mit 4, 8 oder 16 Bänken bedeutet dies, dass nur 2, 3 bzw. 4 unterschiedliche 2-Wege-Umstellungsfunktionen (2-way shuffle functions) erforderlich sind, was im Vergleich zu einer vollen n-zu-n-Umstellungseinheit eine enorme Vereinfachung ist.
-
Infolgedessen und ebenfalls kurz gesagt, die Schreiboperation kann im Flussdiagramm 1200 von 12 zusammengefasst werden. Als Erstes wird die Adresse „a‟ erhalten 1202. Bei Schritt 1204 werden zur Parität und das Z-Feld abgeleitet. Als Nächstes werden rechte Datenelemente mit einer Feinheit von n/2 Blockgröße auf der Grundlage der Bitposition (log2(n))-1 des Z-Feldes umgestellt 1206. Bei Schritt 1208 geschieht erneut dasselbe, jedoch mit einer Feinheit von n/4 Blockgröße auf der Grundlage der Bitposition (log2(n))-2 des Z-Feldes und so weiter. Dieser Prozess wird wiederholt - angezeigt durch die Strichlinienpfeile - Antwortschritt 1210: Umstellen der rechten Datenelemente mit einer Feinheit der Blockgröße von 2 auf der Grundlage der Bitposition 0 des Z-Feldes.
-
Die wesentlichen Eigenschaften der neuen Umstellungsfunktion (shuffle function) sind:
- 1. Sie kann unter Verwendung von lediglich log2(n) Umstellungsfunktionen realisiert werden, wobei jeweils nur 2 Eingänge umgestellt werden (die jeweils höchstens n * w Multiplexer mit 2 Eingängen erfordern, wobei w die Breite jedes Datenelements ist).
- 2. Jede Umstellungsfunktion wird durch ein Bit des Z-Vektors oder der Paritätsfunktion gesteuert (die jeweils log2(n) Bits breit sind).
-
Wenn für jedes Schreibdatenelement einzelne Schreibaktivierungssignale verwendet werden, müssen diese Schreibaktivierungssignale in derselben Weise umgestellt werden, um das korrekte Schreibsignal bei jedem Schreibdatenelement anzuwenden.
-
3. Effizientes Umstellen der Datenelemente, nachdem diese aus den Speicherbänken gelesen wurden: Wegen der „Vertauschung“-Eigenschaften der zuvor erörterten Zuordnungsmodelle kann dasselbe Umstellungskonzept (shuffle concept) zum Umstellen der Lesedaten verwendet werden, wie vorstehend bei den Schreibdaten beschrieben wurde.
-
Wenn Chipfläche oder FPGA-Ressourcen stark eingeschränkt sind, ist es außerdem möglich, einen Satz von log2(n) Umstellungseinheiten für Speicher-Ports zu verwenden, die entweder zum Lesen oder Großschreibung von Daten verwendet werden. Offensichtlich erfordert dies einen Eingangsmultiplexer vor den Umstellungsstufen (shuffle stages), um zwischen den Lese- oder Schreibdatenelementen auszuwählen, die umgestellt werden müssen.
-
4. Auswahl der Adressbits, die zum Berechnen eines jeden der Paritätsbits verwendet werden:
- Wie vorstehend angegeben, wird bei den Umstellungskonzepten für Schreib- und Lesedaten angenommen, dass die Paritätswerte (X) und die Offset-Werte identisch geordnet sind. Dies erfordert, dass das niedrigstwertige, sich unterscheidende Adressbit in einer ausgerichteten Adressabfolge durch das niedrigstwertige (X)-Paritätsbit, das zweite, sich unterscheidende Adressbit durch das nächste Paritätsbit behandelt wird und so weiter.
-
Ein Beispiel, für das dies nicht gilt, wäre eine Adressabfolge 0, 2, 4, 6, 8, 10, 12 und 14, die eine Schrittgröße von 2 einschließt, für das in 8 veranschaulichte Modell. In diesem Fall handelt es sich bei den log2(n) = log28 = 3 sich unterscheidenden Bitpositionen zwischen den acht Adressen um die Bitpositionen 1, 2 und 3. Da diese Bitpositionen nicht den X-Bitpositionen in derselben Reihenfolge entsprechen, sind die sich ergebenden X-Werte nicht in derselben Weise wie die Adressen geordnet: X = 0 für Adresse 0, X = 2 für Adresse 2, X = 4 für Adresse 4, X = 6 für Adresse 6, X = 1 für Adresse 8, X = 3 für Adresse 10, X = 5 für Adresse 12 und X = 7 für Adresse 14. Obwohl die Adressen über alle Speicherbänke hinweg ohne Konflikt perfekt verschachtelt sind, reichen die vorstehend erwähnten vereinfachten Umstellungsoperationen nicht aus.
-
Dies kann behoben werden durch entweder 1) Hinzufügen von zusätzlichen Umstellungsschichten (shuffle layers) oder durch 2) Anwenden einer anderen Auswahl der Adressbits, die zum Erzeugen des Paritätsvektors X verwendet werden. Die erste Option würde die Hinzufügung von (log2(n))-1 zusätzlichen Schichten erfordern, da (log2(n))-1 Arten vorliegen können, in denen die log2(n) sich unterscheidenden Bitpositionen in einer Adressabfolge mit einer Zweierpotenz-Schrittgröße nicht „mit“ der Art ausgerichtet sind, in der die X-Feldbits erzeugt werden. Bei dem Beispiel in 8 würden dies (log2(n)) - 1 = 1 zusätzliche Umstellungsschicht erfordern.
-
Die zweite Option würde darin bestehen, die Art zu ändern, in der die X-Bits aus der Adresse abgeleitet werden.
-
Bei dem vorstehend erwähnten Beispiel kann die Position der beiden X-Bits, X0 und X1, umgekehrt werden, um dieselben Ergebnisse zu erhalten. Alternativ können die X-Bits nur aus Adressbitpositionen abgeleitet werden, die mit Zweierpotenz-Schrittgrößen in Zusammenhang stehen, die relevant sind. Dadurch können dieselben Schreib- und Umstellungskonzepte von Lesedaten wie vorstehend erörtert verwendet werden. Diese Auswahl kann getroffen werden, indem der Maskenvektor entsprechend für jede X-Bitposition ausgewählt wird, die auf die Adresse angewendet wird, um die Adressbits auszuwählen, über die hinweg die Parität berechnet wird (ein maskiertes Adressbit liefert null, was die auf XODER beruhende Paritätsberechnung nicht verändert).
-
Außerdem müssen zu diesem Zweck alle anderen Adressbitpositionen, die nicht in Zusammenhang mit den sich unterscheidenden Bits in einer ausgerichteten Adressabfolge stehen, nicht Teil der Paritätsberechnung sein (ausgenommen beim tabellenlosen Ansatz: Alle Bits, die nicht Teil des Bank-Offsets sind, müssen durch die Paritätsberechnung behandelt werden).
-
Aus Gründen der Vollständigkeit zeigt 13 eine schematische Blockdarstellung der Speicherzugriffseinheit 1400 zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist. Die Speicherzugriffseinheit 1400 weist eine Empfangseinheit 1402 auf, die so gestaltet ist, dass eine Startadresse des binären Datenvektors und eine Zweierpotenz-Schrittgröße s für die Elemente des binären Datenvektors empfangen werden.
-
Die Speicherzugriffseinheit 1400 weist zusätzlich ein erstes Bestimmungsmodul 1404 auf, das zum Bestimmen von n Offsets ausgelegt ist, einer für jede der Speicherbänke, wobei jeder der Offsets bestimmt wird, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse angewendet werden, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird und Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden.
-
Die Speicherzugriffseinheit 1400 weist außerdem ein zweites Bestimmungsmodul 1406 auf, das zum Bestimmen einer Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit von einem äquivalenten Binärwert des Z-Vektors ausgelegt ist, und eine grundlegende Zugriffseinheit 1408, die zum parallelen Zugreifen auf den binären Datenvektor in den n Speicherbänken der Speichereinheit ausgelegt ist.
-
Ausführungsformen der Erfindung können unabhängig von der Plattform, die zum Speichern und/oder Ausführen von Programmcode geeignet ist, zusammen mit praktisch jeder Art von Computer realisiert werden. 14 zeigt als Beispiel ein Datenverarbeitungssystem 1500, das zum Ausführen von Programmcode im Zusammenhang mit dem vorgeschlagenen Verfahren geeignet ist, und/oder in dem die hierin vorgeschlagenen Adressierungsmodelle für Speichereinheiten realisiert werden können.
-
Das Datenverarbeitungssystem 1500 ist lediglich ein Beispiel eines geeigneten Computersystems, und es ist nicht beabsichtigt, eine beliebige Einschränkung hinsichtlich des Verwendungsumfangs oder der Funktionalität von hierin beschriebenen Ausführungsformen der Erfindung anzudeuten, unabhängig davon, ob das Computersystem 1500 realisierbar ist und/oder eine beliebige der hierin vorstehend dargelegten Funktionalitäten durchführen kann. Bei dem Computersystem 1500 liegen Komponenten vor, die in Verbindung mit zahlreichen anderen Universal- oder Spezial-Datenverarbeitungssystemumgebungen oder -konfigurationen betriebsfähig sind. Zu Beispielen wohlbekannter Datenverarbeitungssysteme, -umgebungen und/oder - konfigurationen, die zur Verwendung in Verbindung mit dem Computersystem/Server 1500 geeignet sind, gehören, ohne auf diese beschränkt zu sein, Personal-Computer-Systeme, Server-Computersysteme, Thin-Clients, Thick-Clients, Thick-Clients, handgehaltene Einheiten oder Notebook-Einheiten, Multiprozessorsysteme, auf Mikroprozessoren beruhende Systeme, Set-Top-Boxen, programmierbare Einheiten der Konsumgüterelektronik, Netzwerk-PCs, Minicomputersysteme, Großrechnersysteme und verteilte Cloud-Computing-Umgebungen, zu denen beliebige der oben erwähnten Systeme oder Einheiten gehören, und dergleichen. Das Computersystem/der Server 1500 kann im allgemeinen Kontext von auf einem Computersystem - ausführbaren Anweisungen beschrieben werden, wie zum Beispiel von Programmmodulen, die durch ein Computersystem 1500 ausgeführt werden. Programmmodule können im Allgemeinen Routinen, Programme, Objekte, Komponenten, Logik und Datenstrukturen usw. beinhalten, die bestimmte Aufgaben durchführen oder bestimmte abstrakte Datentypen realisieren. Das Computersystem/der Server 1500 kann in verteilten Cloud-Computing-Umgebungen praktisch realisiert sein, in denen Aufgaben durch entfernt angeordnete Verarbeitungseinheiten durchgeführt werden, die über ein Datenübertragungsnetzwerk verbunden sind. Bei einer verteilten Cloud-Computing-Umgebung können sich Programmmodule sowohl auf lokal als auch auf entfernt angeordneten Computersystem-Speichermedien befinden, unter anderem auf Hauptspeichereinheiten.
-
Wie in der Figur gezeigt, ist der Computer/Server 1500 in Form einer Universal-Datenverarbeitungseinheit gezeigt. Zu den Komponenten des Computersystems/des Servers 1500 können, ohne auf diese beschränkt zu sein, ein oder mehrere Prozessoren oder Verarbeitungseinheiten 1502, ein Systemspeicher 1504 und ein Bus 1506 gehören, der verschiedene Systemkomponenten einschließlich des Systemspeichers 1504 mit dem Prozessor 1502 verbindet. Der Bus 1506 stellt eine oder mehrere beliebiger verschiedener Arten von Busstrukturen dar, zu denen ein Speicherbus oder eine Speichersteuereinheit, ein Peripheriebus, ein Accelerated Graphics Port und ein Prozessorbus oder ein lokaler Bus gehören, die eine beliebige einer Vielfalt von Busarchitekturen nutzen. Als Beispiel und nicht als Einschränkung gedacht gehören zu derartigen Architekturen ein ISA-Bus (ISA = Industry Standard Architecture), ein MCA-Bus (MCA = Micro Channel Architecture), der EISA-Bus (EISA = Enhanced ISA), ein lokaler VESA-Bus (VESA = Video Electronics Standards Association) und ein PCI-Bus (PCI = Peripheral Component Interconnects). Das Computersystem/der Server 1500 beinhaltet in der Regel eine Vielfalt von Medien, die durch Computersysteme gelesen werden können. Bei derartigen Medien kann es sich um beliebige verfügbarer Medien handeln, auf die das Computersystem/der Server 1500 zugreifen kann, und zu diesen Medien gehören sowohl flüchtige als auch nicht-flüchtige Medien, Wechselmedien und nicht-wechselbare Medien.
-
Zu dem Systemspeicher 1504 können durch Computersysteme lesbare Medien in Form von flüchtigem Speicher wie zum Beispiel Direktzugriffsspeicher (Random Access Memory, RAM) 1508 und/oder Cache 1510 gehören. Das Computersystem/der Server 1500 kann ferner andere wechselbare/nicht-wechselbare, flüchtige/nicht-flüchtige Computersystemspeichermedien beinhalten. Lediglich als Beispiel kann ein Speichersystem 1512 zum Lesen von einem und Schreiben auf ein nicht-wechselbares, nichtflüchtiges magnetisches Medium (nicht dargestellt und in der Regel als „Festplatte‟ bezeichnet) bereitgestellt sein. Obwohl nicht gezeigt, können ein Magnetplattenlaufwerk zum Lesen von einer und Schreiben auf eine wechselbare nicht-flüchtige Magnetplatte (z.B. eine „Diskette‟) und ein optisches Plattenlaufwerk zum Lesen von einer oder Schreiben auf eine wechselbare. nicht-flüchtige optische Platte wie zum Beispiel ein CD-ROM, DVD-ROM oder ein anderes optisches Medium bereitgestellt sein. In derartigen Fällen kann jede dieser Einheiten durch eine oder mehrere Datenmedienschnittstellen mit dem Bus 1506 verbunden sein. Wie ferner abgebildet und nachfolgend beschrieben ist, kann der Speicher 1504 mindestens ein Programmprodukt beinhalten, das eine Gruppe (z.B. mindestens eines) von Programmmodulen enthält, die so konfiguriert sind, dass die Funktionen von Ausführungsformen der Erfindung ausgeführt werden.
-
Das Programm/Dienstprogramm, das eine Gruppe (mindestens eines) von Programmmodulen 1516 enthält, kann als Beispiel und nicht als Einschränkung im Speicher 1504 sowie in einem Betriebssystem, in einem oder mehreren Anwendungsprogrammen oder in anderen Programmmodulen und Programmdaten gespeichert sein. Jedes der Betriebssysteme, ein oder mehrere Anwendungsprogramme, andere Programmmodule und Programmdaten oder eine bestimmten Kombination davon kann bzw. können eine Realisierungsform einer Vernetzungsumgebung beinhalten. Die Programmmodule 1516 führen im Allgemeinen die Funktionen und/oder Methodiken von Ausführungsformen der Erfindung aus, wie hierin beschrieben.
-
Das Computersystem/der Server 1500 kann außerdem mit einer oder mehreren externen Einheiten 1518 Daten austauschen, zum Beispiel mit einer Tastatur, einer Zeigeeinheit, einer Anzeigeeinheit 1520 usw.; mit einer oder mehreren Einheiten, die es einem Benutzer ermöglichen, mit dem Computersystem/Server 1500 zu interagieren; und/oder mit beliebigen Einheiten (z.B. Netzwerkkarte, Modem usw.), die es dem Computersystem/Server 1500 ermöglichen, mit einer oder mehreren anderen Datenverarbeitungseinheiten Daten auszutauschen. Ein derartiger Datenaustausch kann über Eingabe/Ausgabe-Schnittstellen (E/A-Schnittstellen) 1514 stattfinden. Darüber hinaus kann das Computersystem/der Server 1500 über einen Netzwerkadapter 1522 mit einem oder mehreren Netzwerken Daten austauschen, zum Beispiel mit einem lokalen Netzwerk (Local Area Network, LAN), mit einem allgemeinen Weitverkehrsnetzwerk (Wide Area Network, WAN) und oder mit einem öffentlichen Netzwerk (z.B. dem Internet). Wie abgebildet tauscht der Netzwerkadapter 1522 über den Bus 1506 Daten mit den anderen Komponenten des Computersystems/Servers 1500 aus. Es sollte klar sein, dass, obwohl nicht abgebildet, andere Hardware- und/oder Softwarekomponenten in Verbindung mit dem Computersystem/Server 1500 verwendet werden könnten. Zu Beispielen gehören, ohne auf diese beschränkt zu sein: Mikrocode, Einheitentreiber, redundante Verarbeitungseinheiten, externe Festplattenlaufwerksanordnungen, RAID-Systeme (RAID = Redundant Array of Independent Disks), Bandlaufwerke, Speichersysteme zur Datenarchivierung usw.
-
Darüber hinaus kann die Speicherzugriffseinheit 1400 zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist, mit dem Bussystem 1506 verbunden sein.
-
Die vorliegende Erfindung kann als System, Verfahren und/oder Computerprogrammprodukt verkörpert sein. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) beinhalten, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert sind, um einen Prozessor zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
-
Bei dem Medium kann es sich um ein elektrisches, ein magnetisches, ein optisches, ein elektromagnetisches System, ein Infrarot- oder ein Halbleitersystem eines Verbreitungsmediums handeln. Zu Beispielen eines computerlesbaren Mediums können ein Halbleiter- oder Festkörperspeicher, ein Magnetband, eine austauschbare Computerdiskette, ein Direktzugriffspeicher (RAM), ein Nur-Lese-Speicher (ROM), eine magnetische Festplatte und eine optische Platte gehören. Zu aktuellen Beispielen optischer Platten gehören Nur-Lese-Speicher in Form einer Compact Disc (CD-ROM), einer wiederbeschreibbaren Compact Disc (CR-R/W), einer DVD und einer Blue-ray-Disc.
-
Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, auf der Anweisungen zur Verwendung durch eine Einheit zur Ausführung von Anweisungen aufbewahrt und gespeichert sein können. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel, ohne auf diese beschränkt zu sein, um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder eine beliebige geeignete Kombination des Vorstehenden handeln. Eine nicht erschöpfende Liste genauerer Beispiele des durch einen Computer lesbaren Speichermediums beinhaltet Folgendes: eine transportable Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Nur-Lese-Speicher (ROM), einen löschbaren programmierbaren Nur-Lese-Speicher (EPROM oder Flash-Speicher), einen statischen Direktzugriffsspeicher (SRAM), einen transportablen Nur-Lese-Speicher in Form einer Compact Disc (CD-ROM), eine Digital Versatile Disc (DVD), einen Speicherstick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhöhte Strukturen in einer Rille mit darauf aufgezeichneten Anweisungen oder beliebige geeignete Kombinationen des Vorstehenden. Ein durch einen Computer lesbares Speichermedium im hierin verwendeten Sinne ist nicht so auszulegen, dass es sich dabei um flüchtige Signale an sich handelt, beispielsweise um Funkwellen oder sich frei ausbreitende elektromagnetische Wellen, um elektromagnetische Wellen, die sich durch einen Hohlleiter oder andere Übertragungsmedien ausbreiten (z.B. Lichtimpulse, die ein Lichtwellenleiterkabel durchlaufen) oder um elektrische Signale, die über ein Kabel übertragen werden.
-
Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können über ein Netzwerk, zum Beispiel das Internet, ein lokales Netzwerk ein Weitverkehrsnetzwerk und/oder ein Drahtlosnetzwerk von einem durch einen Computer lesbaren Speichermedium auf betreffende Datenverarbeitungs-/Verarbeitungs-Einheiten oder auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenleiter, Drahtlosübertragung, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder eine Netzwerkschnittstelle bei jeder Datenverarbeitungs-/Verarbeitungs-Einheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der jeweiligen Datenverarbeitungs-/Verarbeitungs-Einheit weiter.
-
Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembleranweisungen, ISA-Anweisungen (ISA = Instruction Set Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, Daten zum Setzen von Zuständen oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sind, zu denen eine objektorientierte Programmiersprache wie beispielsweise Smalltalk, C++ oder Ähnliches und herkömmliche prozedurale Programmiersprachen wie beispielsweise die Programmiersprache „C“ oder ähnliche Programmiersprachen gehören. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers' teilweise auf dem Computer des Benutzers als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. Beim letztgenannten Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über eine beliebige Art von Netzwerk verbunden sein, unter anderem über ein lokales Netzwerk (Local Area Network, LAN) oder über ein Weitverkehrsnetzwerk (Wide Area Network, WAN), oder die Verbindung kann zu einem externen Computer hergestellt sein (beispielsweise über das Internet unter Nutzung eines Internet-Dienstanbieters (Internet Service Provider)). Bei einigen Ausführungsformen können elektronische Schaltungen, zu denen beispielsweise programmierbare Logikschaltungen, vor Ort programmierbare Schaltungen (Field-Programmable Gate Arrays, FPGA) oder programmierbare logische Arrays (PLA) gehören, die durch einen Computer lesbaren Programmanweisungen ausführen, indem Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen genutzt werden, um die elektronische Schaltung zu personalisieren, sodass Aspekte der vorliegenden Erfindung durchgeführt werden.
-
Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Flussdiagrammdarstellungen und/oder Blockschemata von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird klar sein, dass jeder Block der Flussdiagramme und/oder der Blockschemata und Kombinationen von Blöcken in den Flussdiagrammen und/oder Blockschemata durch einen Computerprogrammanweisungen realisiert werden kann bzw. können.
-
Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder anderer programmierbaren Datenverarbeitungsvorrichtungen bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder anderer programmierbarer Datenverarbeitungsvorrichtungen ausgeführt werden, Mittel schaffen, um die in einem Block bzw. in den Blöcken des Flussdiagramms bzw. der Flussdiagramme und/oder des Blockschemas bzw. der Blockschemata angegebenen Funktionen/Aktionen zu realisieren. Diese durch einen Computer lesbaren Programmanweisungen können ebenfalls in einem durch einen Computer lesbaren Medium gespeichert sein, das einen Computer, andere programmierbare Datenverarbeitungsvorrichtungen oder andere Einheiten anweisen kann, in einer bestimmten Weise zu funktionieren, sodass das durch einen Computer lesbare Medium mit darauf gespeicherten Anweisungen ein Erzeugnis aufweist, das Anweisungen enthält, die die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebene Funktion/Aktion realisieren.
-
Die durch einen Computer lesbaren Programmanweisungen können auch in einen Computer, in andere programmierbare Datenverarbeitungsvorrichtungen oder in andere Einheiten geladen werden, um zu bewirken, dass auf dem Computer, auf anderen programmierbaren Vorrichtungen oder anderen Einheiten eine Reihe von Arbeitsschritten ausgeführt wird, um einen mittels Computer realisierten Prozess zu schaffen, sodass die Anweisungen, die auf dem Computer, auf anderen programmierbaren Vorrichtungen oder auf einer anderen Einheit ausgeführt werden, die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebenen Funktionen/Aktionen realisieren bzw. realisiert.
-
Die Flussdiagramme und/oder Blockschemata in den Figuren veranschaulichen die Architektur, Funktionalität und Wirkungsweise möglicher Realisierungsformen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Flussdiagrammen bzw. in den Blockschemata eine Modul, ein Segment oder einen Abschnitt von Anweisungen darstellen, das bzw. der eine oder mehrere ausführbare Anweisungen zur Realisierung der angegebenen Logikfunktion bzw. Logikfunktionen aufweist. Bei einigen alternativen Realisierungsformen können die im Block angegebenen Funktionen in einer anderen als in der Reihenfolge ausgeführt werden, die in den Figuren angegeben ist. Beispielsweise können zwei hintereinander aufgeführte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können je nach der mit den Blöcken verbundenen Funktionalität manchmal in umgekehrter Reihenfolge ausgeführt werden. Darüber hinaus ist anzumerken, dass jeder Block der Blockschemata und/oder Flussdiagrammveranschaulichungen sowie Kombinationen von Blöcken in den Blockschemata und/oder Flussdiagrammveranschaulichungen mit Hilfe zweckgebundener hardwaregestützter Systeme zum Ausführen der angegebenen Funktionen bzw. Aktionen oder mit Hilfe von Kombinationen aus zweckgebundener Hardware und zweckgebundenen Computeranweisungen realisiert werden kann bzw. können.
-
Die hierin verwendete Terminologie dient ausschließlich zur Beschreibung bestimmter Ausführungsformen und ist nicht Einschränkung der Erfindung gedacht. In dem hier verwendeten Sinne schließen die Einzahlformen „ein/eine“ und „der/die/das“ auch die Pluralformen ein, sofern im Kontext nicht ausdrücklich etwas anderes angegeben ist. Es versteht sich des Weiteren, dass die Begriffe „weist auf“ bzw. „aufweisen, aufweisend“ bei Verwendung in dieser Beschreibung das Vorhandensein angegebener Merkmale, Ganzzahlen, Schritte, Operationen, Elemente und/oder Komponenten bezeichnen, jedoch das Vorhandensein oder die Hinzufügung eines bzw. einer oder mehrerer anderer Merkmale, Ganzzahlen, Schritte, Operationen, Elemente, Komponenten und/oder Gruppen davon nicht ausschließen.
-
Die entsprechenden Strukturen, Materialien, Aktionen und Äquivalente aller Mittel bzw. Schritt-plus-Funktion-Elemente (steps plus function elements) in den folgenden Ansprüchen sollen alle Strukturen, Materialien oder Aktionen zur Ausführung der Funktion in Verbindung mit anderen ausdrücklich beanspruchten Elementen mit einschließen. Die Beschreibung der vorliegenden Erfindung soll der Veranschaulichung und Beschreibung dienen, ist jedoch nicht als erschöpfend gedacht oder auf die Erfindung in der offenbarten Form beschränkt. Für den Fachmann sind viele Modifikationen und Variationen denkbar, ohne dass diese eine Abweichung vom Schutzbereich und Grundgedanken der Erfindung darstellen würden. Die Ausführungsformen wurden ausgewählt und beschrieben, um die Grundgedanken und die praktische Anwendung der Erfindung auf bestmögliche Weise zu erklären und anderen Fachleuten das Verständnis für verschiedene Ausführungsformen mit verschiedenen Abänderungen für die betreffende betrachtete Verwendung zu ermöglichen.
-
Kurz gesagt, das erfindungsgemäße Konzept kann zusammengefasst werden als Verfahren zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist, wobei das Verfahren ein Empfangen einer Startadresse des binären Datenvektors und einer Zweierpotenz-Schrittgröße s für Elemente des binären Datenvektors, Bestimmen von n Offsets, einer für jede der Speicherbänke, wobei jeder der Offsets bestimmt wird, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse angewendet werden, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird und Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden, und ein Bestimmen einer Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit von einem äquivalenten Binärwert des Z-Vektors und ein paralleles Zugreifen auf den binären Datenvektor in den n Speicherbänken der Speichereinheit aufweist.
-
Bei dem Verfahren kann das Anwenden einer Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse ein Auswählen von log2(n) Abschnitten und eines Y-Abschnitts mit einer Größe von log2(n) Bits aus der Startadresse, ein Bestimmen eines Paritätsbits für jeden der log2(n) Abschnitte, was zu einem Paritätsvektor X mit log2(n) Dimensionen führt, und ein Durchführen von Bitebenen-XODER-Operationen zwischen X und Y aufweisen, was zu einem Z-Vektor führt.
-
Das Verwenden des Z-Vektors zum Zugreifen auf eine Zuordnungstabelle kann ein Auswählen einer Zeile in der Zuordnungstabelle aufweisen, die log2(n) Einträge aufweist, indem der Z-Vektor als Index in der Zuordnungstabelle verwendet wird und die Ergebnisse von Zuordnungstabellenzugriffen mit einem Abschnitt der Startadresse verknüpft werden, um die n Offsets zu erhalten.
-
Das Verknüpfen kann ein Ersetzen von log2(n) Bits, die sich am Bit-Offset log2(n) der Startadresse befinden, durch die bestimmten log2(n) Zuordnungstabelleneinträge aufweisen, was zu log2(n) Offsets führt, wobei jeder als Offset in einer jeweiligen der log2(n) Bänke verwendet wird.
-
Das Bestimmen der Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken kann ein Steuern von log2(n) aufeinanderfolgenden Multiplexerstufen aufweisen, von denen jede eine Mehrzahl von Multiplexern mit 2 Eingangsbits aufweisen kann, um die Gesamtbreite des Datenvektors zu behandeln.
-
Bei der Zugriffsoperation kann es sich um eine Schreiboperation handeln.
-
Bei der Zugriffsoperation kann es sich um eine Leseoperation handeln.
-
Die ausgewählten log2(n) Abschnitte der Startadresse können gleich groß sein.
-
Der binäre Datenvektor kann in gleich großen Abschnitten in der Mehrzahl der n Speicherbänke gespeichert sein.
-
Das Bereitstellen der Startadresse, das Bestimmen der Offsets und das Bestimmen einer Abfolge von Abschnitten des binären Datenvektors und das Bestimmen einer Abfolge von Abschnitten können vor der Schreiboperation des binären Datenvektors in die n Speicherbänke durchgeführt werden.
-
Das Bereitstellen der Startadresse, das Bestimmen der Offsets und das Bestimmen einer Abfolge von Abschnitten des binären Datenvektors können vor der Leseoperation des binären Datenvektors in die n Speicherbänke durchgeführt werden, und das Bestimmen einer Abfolge von Abschnitten kann nach der Leseoperation des binären Datenvektors in die n Speicherbänke durchgeführt werden.
-
Eine Speicherzugriffseinheit zum Zugreifen auf einen binären Datenvektor in einer Speichereinheit weist eine Mehrzahl von n Speicherbänken auf, in denen der binäre Datenvektor in Abschnitten gespeichert ist, wobei die Speicherzugriffseinheit eine Empfangseinheit aufweist, die zum Empfangen einer Startadresse des binären Datenvektors und einer Zweierpotenz-Schrittgröße s für die Elemente des binären Datenvektors ausgelegt ist, wobei das erste Bestimmungsmodul zum Bestimmen von n Offsets ausgelegt ist, einer für jede der Speicherbänke, wobei jeder der Offsets bestimmt wird, indem eine Mehrzahl von Bitebenen-XODER R-Funktionen auf die Startadresse angewendet wird, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird und Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden, und ein zweites Bestimmungsmodul, das ausgelegt ist zum Bestimmen einer Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit vom äquivalenten Binärwert des Z-Vektors und eine grundlegende Zugriffseinheit, die zum parallelen Zugreifen auf den binären Datenvektor in den n Speicherbänken der Speichereinheit ausgelegt ist.
-
Das Anwenden einer Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse durch das erste Bestimmungsmodul kann ein Auswählen von log2(n) Abschnitten und eines Y-Abschnitts mit einer Größe von log2(n) Bits aus der Startadresse ein Bestimmen eines Paritätsbits für jeden der log2(n) Abschnitte, was zu einem Paritätsvektor X mit log2(n) Dimensionen führt, und ein Durchführen von Bitebenen-XODER-Operationen zwischen X und Y aufweisen, was zu einem Z-Vektor führt.
-
Das Verwenden des Z-Vektors durch das erste Bestimmungsmodul zum Zugreifen auf eine Zuordnungstabelle durch das erste Bestimmungsmodul kann ein Auswählen einer Zeile in der Zuordnungstabelle aufweisen, die log2(n) Einträge aufweist, indem der Z-Vektor als Index in der Zuordnungstabelle verwendet wird und die Ergebnisse von Zuordnungstabellenzugriffen mit einem Abschnitt der Startadresse verknüpft werden, um die n Offsets zu erhalten.
-
Das Verknüpfen durch das erste Bestimmungsmodul kann außerdem ein Ersetzen von log2(n) Bits, die sich am Bit-Offset log2(n) der Startadresse befinden, durch die bestimmten log2(n) Zuordnungstabelleneinträge aufweisen, was zu log2(n) Offsets führt, wobei jeder als Offset in einer jeweiligen der log2(n) Bänke verwendet wird.
-
Das zweite Bestimmungsmodul kann außerdem ausgelegt sein zum: wenn die Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken bestimmt wird, Steuern von log2(n) aufeinanderfolgenden Multiplexerstufen, von denen jede eine Mehrzahl von Multiplexern mit 2 Eingangsbits aufweist, um die Gesamtbreite des Datenvektors zu behandeln.
-
Bei der Zugriffsoperation kann es sich um eine Schreiboperation handeln.
-
Bei der Zugriffsoperation kann es sich um eine Leseoperation handeln.
-
Die ausgewählten log2(n) Abschnitte der Startadresse können gleich groß sein.
-
Der binäre Datenvektor kann in gleich großen Abschnitten in der Mehrzahl der n Speicherbänke gespeichert sein.
-
Das Bereitstellen der Startadresse, das Bestimmen der Offsets und das Bestimmen einer Abfolge von Abschnitten des binären Datenvektors und das Bestimmen einer Abfolge von Abschnitten können vor der Schreiboperation des binären Datenvektors in die n Speicherbänke durchgeführt werden.
-
Das Bereitstellen der Startadresse, das Bestimmen der Offsets und das Bestimmen einer Abfolge von Abschnitten des binären Datenvektors können vor der Leseoperation des binären Datenvektors in die n Speicherbänke durchgeführt werden, und das Bestimmen einer Abfolge von Abschnitten kann nach der Leseoperation des binären Datenvektors in die n Speicherbänke durchgeführt werden.
-
Ein Computerprogrammprodukt, das auf einen Datenvektor in einer Speicherkomponente zugreift, die eine Mehrzahl von n Speicherbänken aufweist, in denen der binäre Datenvektor in Abschnitten gespeichert ist, wobei das Computerprogrammprodukt ein durch einen Computer lesbares Speichermedium aufweist, das darauf verkörperte Programmanweisungen enthält, wobei die Programmanweisungen durch ein oder mehrere Datenverarbeitungssysteme oder Steuereinheiten ausführbar sind, um das eine oder die mehreren Datenverarbeitungssysteme zu veranlassen, eine Startadresse des binären Datenvektors und eine Zweierpotenz-Schrittgröße s für die Elemente des binären Datenvektors zu empfangen, n Offsets zu bestimmen, einen für jede der Speicherbänke, wobei jeder der Offsets bestimmt wird, indem eine Mehrzahl von Bitebenen-XODER-Funktionen auf die Startadresse angewendet wird, was zu einem Z-Vektor führt, der Z-Vektor zum Zugreifen auf eine Zuordnungstabelle verwendet wird und Ergebnisse von Zuordnungstabellenzugriffen gemäß einer Zweierpotenz-Schrittgröße des binären Datenvektors verschoben werden und eine Abfolge von Abschnitten des binären Datenvektors in den n Speicherbänken in Abhängigkeit vom äquivalenten Binärwert des Z-Vektors bestimmt wird und auf den binären Datenvektor in den n Speicherbänken der Speichereinheit parallel zugegriffen wird.