DE69816784T2 - Prozessorbefehl mit Hashcodierung - Google Patents

Prozessorbefehl mit Hashcodierung Download PDF

Info

Publication number
DE69816784T2
DE69816784T2 DE69816784T DE69816784T DE69816784T2 DE 69816784 T2 DE69816784 T2 DE 69816784T2 DE 69816784 T DE69816784 T DE 69816784T DE 69816784 T DE69816784 T DE 69816784T DE 69816784 T2 DE69816784 T2 DE 69816784T2
Authority
DE
Germany
Prior art keywords
instruction
value
hash
data
entered
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69816784T
Other languages
English (en)
Other versions
DE69816784D1 (de
Inventor
Costas Calamvokis
Aled Justin Edwards
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Co
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of DE69816784D1 publication Critical patent/DE69816784D1/de
Application granted granted Critical
Publication of DE69816784T2 publication Critical patent/DE69816784T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich allgemein auf ein Verarbeitungsverfahren und eine Vorrichtung, die eine Prozessorkonstruktion umfaßt, die eine Hashcodierung verwendet.
  • Hintergrund der Erfindung
  • Es sind Prozessoranweisungen bekannt, die eine Verzweigung in Abhängigkeit vom Wert eines gewissen Parameters, der an einer speziellen Position (häufig im Akkumulator der Prozessor-ALU) gespeichert ist, berücksichtigen. Es sind auch Prozessoranweisungen bekannt, die einen Grad einer Umleitung beim Zugreifen auf ein Element, das durch die Anweisung gehandhabt werden soll, berücksichtigen; damit ist gemeint, daß die Position des Zielelements nicht direkt in der Anweisung spezifiziert ist, sondern daß die Anweisung stattdessen eine Position spezifiziert, die die Adresse an der Position hält, die das Zielelement speichert. Eine höher entwickelte Umleitung umfaßt eine Vor- oder Nachindexierung basierend auf einem Wert, der in einem spezifischen Prozessorregister gehalten wird (eine Vorindexierung involviert ein Modifizieren der Adresse, die in der Anweisung spezifiziert ist, wohingegen ein Nachindexieren ein Modifizieren der Adresse involviert, die in der Position gespeichert ist, die in der Anweisung spezifiziert ist).
  • Gemäß der EP-A-0 387 008 ist beispielsweise bekannt, daß auf eine Tabelle in einem Speicher bei einem Versatz relativ zu der aktuellen Anweisung, die verarbeitet wird, zugegriffen wird, wobei der Versatz auf Grundlage eines eingegebenen Datenwerts bestimmt wird.
  • Bei einer Vorrichtung, wie z. B. einem Paketschalter, muß ein Steuerungsprozessor allgemein eine gewisse Aktion ba sierend auf dem Wert einer eingegebenen Größe, wie z. B. einer Paketdestinationsadresse, ausführen. Diese erwünschte Fähigkeit kann als eine Verzweigungsoperation betrachtet werden, bei der der Prozessor zu einer angeforderten Aktion abhängig vom Wert der eingegebenen Größe verzweigen muß. Alternativ kann die gewünschte Fähigkeit mit einer Operation verglichen werden, die eine Umleitung involviert, die durch den Wert der eingegebenen Größe nachindexiert wird. Bei Anwendungen, wie z. B. einem Steuern eines Paketschalters, kann jedoch der Bereich von möglichen Werten der eingegebenen Größe sehr groß sein, selbst wenn nur ein sehr begrenzter Teilsatz dieser Werte von Interesse sein mag. Die Standardverzweigungsanweisungen oder Anweisungen, die eine Umleitung involvieren, können diese Anforderung nicht in einer kompakten und einfachen Weise bewältigen und verwenden allgemein eine Anzahl von Speicherplätzen, die der Anzahl von möglichen Werten der eingegebenen Größe entspricht.
  • Es ist eine Aufgabe der vorliegenden Erfindung, eine kompakte und flexible Möglichkeit zum Steuern eines Prozessors zu liefern, um auf Elemente in Abhängigkeit von dem Wert einer eingegebenen Größe selektiv zuzugreifen.
  • Wie nachstehend offensichtlich wird, löst die vorliegenden Erfindung diese Aufgabe durch Verwenden einer Hashicodierung. Die Hashcodierung an sich ist eine hinreichend bekannte Technik, mit der eine relativ lange Eingabe in eine kürze Ausgabe umgewandelt wird. Die Hashcodierung wird für viele unterschiedliche Zwecke einschließlich eines Speichernachschlagens und zum Bilden von Nachrichtenauthentifizierungscodes verwendet. Eine große Anzahl von unterschiedlichen Hash-Codefunktionen sind bekannt.
  • Um das Verständnis für die vorliegende Erfindung zu vereinfachen, erfolgt eine kurze Beschreibung der Hashcodierung, das auf ein Speichernachschlagen angewendet wird, unter Bezugnahme auf 1 der beigefügten Zeichnungen. Spezieller soll in der Anordnung von 1 eine Eingabe 10 (z. B. eine 48-Bit-Eingabe) verwendet werden, um Daten wiederzugewinnen, die im Speicher 11 gehalten werden. Bei dem aktuellen Beispiel sind nur eine relativ kleine Anzahl von möglichen Werten der Eingabe 10 von Interesse (z. B. sieben Werte). Der Speicher ist mit einer Anzahl von Positionen 12, die gleich oder größer als die Anzahl von eingegebenen Werten von Interesse (jedoch kleiner als alle möglichen Eingabewerte) ist, versehen, und die Eingabe 10 wird auf eine Hashcodierungsfunktion 13 angewendet, die die Eingabe 10 in einen Index 14 einer kürzeren Länge umwandelt, der auf die Größe des Speichers angepaßt ist (bei dem aktuellen Beispiel könnte dies ein 3-Bit-Index sein). Die Hashcodierungsfunktion 14 ist so gewählt, daß jeder Eingabewert von Interesse einen eindeutigen Wert des Index 14 erzeugt und dieser spätere Wert dann verwendet wird, um auf eine entsprechende Position des Speichers 11 zuzugreifen – wobei diese Position so beschaffen ist, daß sie verwendet wird, um Daten zu speichern, die dem entsprechenden Eingabewert zuzuordnen sind.
  • Natürlich verursachen viele Werten der Eingabe 10 die gleichen Indexwerte, jedoch besteht lediglich der Wunsch, einen „Treffer" (bzw. „Hit") (eine gültige Ausgabe von Daten vom Speicher 11) für den Eingabewert von Interesse zu registrieren, der auf diesen Indexwert hash-codiert wird. Dementsprechend speichert jeder Speicherplatz, zusammen mit den Daten, die ausgegeben werden sollen, einen Überprüfungswert entsprechend dem Eingabewert, für die diese Daten gültig sind. Wenn auf einen Speicherplatz 12 zugegriffen wird, wird der Überprüfungswert im Komparator 15 mit dem aktuellen Wert der Eingabe 10 verglichen, und eine datengültiger Ausgabe 16 wird nur produziert, wenn eine Übereinstimmung vorliegt. Wenn der Überprüfungswert und der Eingabewert nicht miteinander übereinstimmen, tritt ein „Fehlschlag" (bzw. „Miss") ein. Bei einer sogenannten „perfekten" Hashcodierung, wo jeder Eingabewert von Interesse durch die Hashcodierungsfunktion 13 in seinen eigenen eindeutigen In dexwert abgebildet wird, ist dies das Ende des Prozesses. Häufig ist es jedoch effizienter, eine „nichtperfekte" Hashcodierung zu praktizieren, bei der zwischen den Werten von Interesse Konflikte bestehen. In solchen Fällen sind verschiedene Strategien ausgearbeitet worden, z. B. kann die indexierte Position einen Zugriff auf eine verknüpfte Liste von Werten von Interesse, die dieser Position zugeordnet sind, liefern. Eine weitere Strategie ist, eine erneute „Hashcodierung" auszuführen (d. h. einen Hashcodierungsneuversuch auszuführen), wobei allgemein eine andere Hash-Funktion als die ursprünglich verwendete verwendet wird. Neue Hashcodierungsstrategien können sich auf mehrere Neu-Hashcodierungsversuche ausdehen, die jeweils eine andere vorbestimmte Hash-Funktion aufweisen.
  • Die GB-A-2 148 562 offenbart ein Bestimmen einer Prozedur, die durch einen Computer ausgeführt werden soll, in dem die Zustandsregister des Computers hash-codiert werden, um eine Zahl zu bilden, die das Verfahren anzeigt.
  • Eine hash-basierte Beschleunigung von Leittabellenoperationen in einem ATM-Chipelement ist im Papier „An implementation of hash-based ATM router chip" (Raskovic u. a., 28. International Conference on System Sciences, Band 1, 3–6, Januar 1995, Seiten 32–40, XP002079415 Wailea, HI US) beschrieben.
  • Zusammenfassung der Erfindung
  • Gemäß der vorliegenden Erfindung wird ein Verarbeitungsverfahren geschaffen, bei dem eine programmgesteuerte Verarbeitungseinrichtung im Verlaufe des Ausführens einer Anweisung eines gegebenen Typs, der im Speicher gespeichert ist, dazu gebracht wird, ein Element vom Speicher abhängig vom Wert der Eingabedaten, die der Anweisung unterliegen, selektiv wiederzugewinnen. Diese Anweisung weist einen Anfangsblock auf, der die Anweisung des gegebenen Typs identifiziert, wobei das Verfahren folgende Schritte aufweist:
    • (a) Bestimmen, ob eine aktuelle Anweisung durch die Verarbeitungseinrichtung des gegebenen Typs ausgeführt werden soll;
    • (b) wenn Schritt (a) bestimmt, daß die Anweisung des gegebenen Typs ist, Verwenden der Eingabedaten, die der Anweisung unterliegen, um einen Versatzwert zu erzeugen; und
    • (c) Verwenden des Versatzwerts, der bei Schritt (b) erzeugt wurde, um auf ein Element im Speicher zuzugreifen, relativ zu der Position im Speicher der aktuellen Anweisung, dadurch gekennzeichnet daß:
    • – die Anweisung des gegebenen Typs einen Körper in der Form einer Hash-Tabelle aufweist, die zumindest einen Eintrag mit sowohl (i) einem Überprüfungswert entsprechend einem Wert von Interesse der Eingabedaten, die der Anweisung unterliegen, als auch (ii) einem Element, das verwendet werden soll, wenn die Eingabedaten den Wert von Interesse aufweisen;
    • – bei Schritt (b) diese Eingabe hash-codiert wird, um den Versatzwert zu erzeugen, der dann bei Schritt (c) verwendet wird, um auf einen entsprechenden Eintrag in der Hash-Tabelle der aktuellen Anweisung zuzugreifen; und
    • – wobei das Verfahren einen weiteren Schritt aufweist:
    • (d) Vergleichen des Werts der Eingabedaten mit dem Überprüfungswert, der in dem Eintrag gehalten wird, auf den bei Schritt (c) zugegriffen wurde, und Verfügbarmachen des zugeordneten Eintrageelements Für aus schließlich eine wirksame Verwendung, wenn die verglichenen Werte übereinstimmen.
  • In dieser Weise wird eine kompakte Anweisung, die im Speicher wieder lokaliserbar ist, geschaffen, die effektiv ist, um unterschiedliche Ergebnisse abhängig vom Wert der Eingabedaten, die der Anweisung unterliegen, zu erzeugen:
  • Das Element, auf das bei Schritt (d) zugegriffen wurde, kann durch die Verarbeitungseinrichtung auf mehrere verschiedene Weisen verwendet werden. Somit kann das Element als ein Steuerungswert ausgegeben werden und beispielsweise zum Steuern einer Paketleitungsführung in einem Paketschalter verwendet werden. Alternativ kann das Element, auf das zugegriffen wurde, als ein Indikator der Position einer nächsten Anweisung verwendet werden, die durch die Verarbeitungseinrichtung ausgeführt werden soll. Eine weitere Verwendung des Elements, auf das zugegriffen wurde, ist ein Rückgabewert, der an eine vorherige Anweisung, die für ein Aufrufen der Anweisung des gegebenen Typs verantwortlich ist, zurückgegeben wird, wobei der zurückgegebene Wert beispielsweise als ein Index in einer Tabelle, die der vorherigen Anweisung zugeordnet ist, verwendet wird.
  • Die Quelle der Eingabedaten, die der Anweisung unterliegen, kann implizit sein (z. B. können alle solchen Daten an der gleichen Quelle vorgesehen sein, wie allgemein der Fall ist, wenn die Anweisung durch eine andere Anweisung aufgerufen wird und die Eingabedaten als ein Aufrufparameter geleitet werden). Alternativ kann der Anweisungsanfangsblock einen Eingabeauswahlparameter umfassen, der einen Quellenindikator für die Eingabedaten 10 liefert. Dieser Quellenindikator kann eine Speicher-/Registerposition spezifizieren, die die Eingabedaten und/oder spezifischen Bits von Interesse von einer breiteren Eingabe hält.
  • Der Anfangsblock der Anweisung kann einen großen Parameter umfassen, der die Größe der Hash-Tabelle anzeigt, die im Körper der Anweisung enthalten ist, wobei der Parameter von dieser Größe verwendet wird, um die Größe und somit den Wertebereich des Versatzwerts zu begrenzen, der bei Schritt (b) produziert wurde, um diesen Wert an die Größe der Hash-Tabelle anzupassen.
  • Das Hash-Codieren der Eingabedaten bei Schritt (b) kann unter Verwendung einer feststehenden Hashcodierungsfunktion ausgeführt werden. Vorzugsweise umfaßt der Anfangsblock der Anweisung jedoch einen Hash-Steuerungscode, und die Hashcodierung der Eingabedaten wird in Abhängigkeit vom Wert dieses Hash-Steuerungscodes ausgeführt. Somit umfaßt Schritt (b) bei einem Ausführungsbeispiel:
    • – Bilden eines umgewandelten Werts durch Kombinieren von zumindest Abschnitten der unterschiedlichen Versionen der Eingabedaten, wobei der Hash-Steuerungscode dazu dient, spezifische Parameter dieses Bildens zu setzen, und
    • – Verwenden des umgewandelten Werts, um den Versatzwert zu liefern.
  • Vorteilhafterweise sind die unterschiedlichen Versionen der Eingabedaten bitverschobene Versionen der Eingabedaten, wobei die Anzahl dieser unterschiedlichen Versionen und ihrer jeweiligen Grade der Bitverschiebung durch den Hash-Steuerungscode bestimmt werden. Das Kombinieren von zumindest der Abschnitte der unterschiedlichen Eingabedatenversionen kann unter Verwendung einer exklusiven ODER-Operation ausgeführt werden.
  • Das Hash-Codieren in die Hash-Tabelle muß nicht perfekt sein, und eine beliebige Strategie, so wie z. B. eine neue Hashcodierung, kann in Fällen übernommen werden, wo mehr als ein Eingabedatenwert von Interesse auf den selben Versatzwert hash-codiert wird.
  • Gemäß einem weiteren Aspekt der vorliegenden Erfindung wird eine Vorrichtung geschaffen, die folgende Merkmale aufweist:
    • – eine Speichereinrichtung zum Speichern eines Programms, das eine Anweisung eines gegebenen Typs, die in einem Anfangsblock der Anweisung identifiziert ist, umfaßt;
    • – eine Verarbeitungseinrichtung zum Ausführen des Programms in der Speichereinrichtung;
    • – eine Einrichtung zum Liefern von Eingabedaten;
    • – eine Versatzbestimmungseinrichtung, die auf die Verarbeitungseinrichtung hin, die die Anweisung des gegebenen Typs verarbeitet, wirksam ist, um die Eingabedaten zu verwenden, um einen Versatzwert zu erzeugen, und
    • – eine Versatzzugriffseinrichtung zum Verwenden des Versatzwerts, um auf die Speichereinrichtung bei einem Versatz relativ zu der Position der aktuellen Anweisung zuzugreifen, die durch die Verarbeitungseinrichtung ausgeführt wird; dadurch gekennzeichnet, daß die Vorrichtung angepaßt ist, um die Anweisung des gegebenen Typs zu verarbeiten, wobei eine solche Anweisung einen Körper in der Form einer Hash-Tabelle aufweist, die zumindest einen Eintrag mit sowohl (i) einem Überprüfungswert entsprechend einem Wert von Interesse der Eingabedaten, die der Anweisung unterliegen, als auch (ii) einem Element aufweist, das durch die Anweisung verwendet werden soll, wenn die Eingabedaten den Wert von Interesse aufweisen, wobei die Vorrichtung angepaßt ist, um eine solche Anweisung zu verarbeiten durch:
    • – die Versatzbestimmungseinrichtung, die eine Hashcodierungseinrichtung zum Hash-Codieren der Eingabedaten aufweist, um den Versatzwert zu erzeugen,
    • – die Bereitstellung der Komparatoreinrichtung, die wirksam ist, um, nachdem auf einen Hash-Tabelleneintrag durch die Versatzzugriffseinrichtung während der Ausführung einer Anweisung des gegebenen Typs durch die Verarbeitungseinrichtung zugegriffen wurde, den Eingabedatenwert mit dem Überprüfungswert des Hash-Tabelleneintrags zu vergleichen und zu bewirken, daß die Ausgabe des entsprechenden Hash-Tabellenelements erfolgt, wenn der Wert der Eingabedaten und der Überprüfungswert übereinstimmen.
  • Vorteilhafterweise umfaßt die Anweisung des gegebenen Typs einen Hash-Steuerungscode, und das Hashcodierungseinrichtung weist folgende Merkmale auf:
    • – eine Einrichtung, die wirksam ist, um, nachdem die Anweisung durch die Verarbeitungseinrichtung ausgeführt worden ist, die Eingabedaten und den Hash-Steuerungscode zu empfangen,
    • – eine Einrichtung zum Bilden eines umgewandelten Werts durch Kombinieren von zumindest entsprechenden Abschnitten der mehreren bitverschobenen Versionen der Eingabedaten, wobei die Anzahl solcher Versionen und ihre jeweiligen Grade der Bitverschiebung durch den Hash-Steuerungscode bestimmt werden, und
    • – eine Einrichtung zum Verwenden des umgewandelten Werts, um den Versatzwert zu liefern.
  • Kurze Beschreibung der Zeichnungen
  • Die Ausführungsbeispiele der Erfindung werden nun mittels eines uneingeschränkten Beispiels unter Bezugnahme auf die beigefügten Diagrammzeichnungen beschrieben, wobei:
  • 1 ein Diagramm eines bekannten Speichernachschlagverfahrens unter Verwendung einer Hashcodierungsfunktion ist;
  • 2 ein Diagramm ist, das eine Verarbeitungseinrichtung, die die vorliegende Erfindung verkörpert, darstellt;
  • 3 ein Diagramm eines Paketschalters ist, der ein Verarbeitungssystem von 2 verwendet, um eine Paketleitungsführung zu steuern;
  • 4 ein Diagramm ist, das eine Sequenz von drei Anweisungen darstellt, die zwei Verzweigungsanweisungen mit Hash-Tabellenkörpern zur Ausführung durch das Verarbeitungssystem von 2 beim Bewirken einer Operation gemäß der vorliegenden Erfindung umfassen;
  • 5 ein Diagramm ist, das eine Sequenz von vier Anweisungen darstellt, die eine aufgerufene Verzweigungsanweisung mit einem Hash-Tabellenkörper zur Ausführung durch das Verarbeitungssystem von 2 beim Bewirken einer Operation gemäß der vorliegenden Erfindung umfassen;
  • 6 ein Diagramm ist, das eine zweite Form eines Verarbeitungssystems darstellt, das die vorliegende Erfindung verkörpert, wobei diese zweite Form ähnlich jener ist, die in 2 gezeigt ist, jedoch mit einem steuerbaren Hashcodierungfunktionsblock;
  • 7 ein Diagramm ist, das eine bevorzugte Form des steuerbaren Hashcodierungfunktionsblock von 6 darstellt;
  • 8 ein Diagramm ist, das einen Hash-Steuerungscode zeigt, der an den Hashcodierungfunktionsblock von 7 geliefert wird;
  • 9 ein Blockschaltschaltungsdiagramm ist, das die Ableitung von einem Bit eines umgewandelten Werts zeigt, der durch den Hashcodierungfunktionsblock von 7 gebildet wird; und
  • 10 ein Flußdiagramm ist, das ein Hashcodierungsverfahren zeigt, das ein Ausführen von Neuversuchen im Falle eines nicht validierten Speicherzugriffs involviert.
  • Beste Art und Weise zum Ausführen der Erfindung
  • 2 stellt ein Verarbeitungssystem dar, das eine Verarbeitungseinheit 55 aufweist, die angeordnet ist, um Anweisungen auszuführen, die im Speicher 49 gehalten werden. Diese Anweisungen umfassen eine Anweisung, um ein Element von einem Speicher in Abhängigkeit vom Wert einer Eingabe 10 wiederzugewinnen, wobei nur einige der Eingabewerte von Interesse sind – Anweisung 50 ist eine Anweisung dieses Typs.
  • Die Anweisung 50 umfaßt einen Anweisungsanfangsblock 51, der den Anweisungstyp (BRANCH (HASH BODY)) (bzw. Verzweigung (Hash-Körper)) identifiziert, und einen Anweisungskörper 52 in der Form einer Hash-Tabelle, die durch einen Satz von Überprüfungswert-/Elementpaaren, die den jeweiligen der unterschiedlichen Eingabewerte von Interesse entsprechen, gebildet ist. Diese überprüfungswert-/Elementpaare werden in den Speicherpositionen im Anschluß an den Anweisungsan fangsblock 51 gehalten. Die Wiedergewinnung des Elements, das einem Eingabewert von Interesse entspricht, wird unter Verwendung einer Hashcodierung, die nun beschrieben wird, erreicht.
  • Der Anweisungsanfangsblock 51 wird an ein Anweisungsregister 56 der Verarbeitungseinheit 55 geleitet, wenn die Anweisung durch die Einheit aufgerufen wird (ein Anweisungsadreßregister 57 in der Einheit 55 hält die Adresse der Anweisung, die geholt und ausgeführt werden soll). Der Anweisungsanfangsblock dient zum Identifizieren des Anweisungstyps bezüglich der Verarbeitungseinheit 55. Der Anweisungsanfangsblock 51 umfaßt auch ein Feld IN_SEL, das dazu dient, die Quelle der Eingabe 10 zu spezifizieren, und die Inhalte dieses Felds werden vom Anweisungsregister 56 an eine Eingabeauswahleinheit 58 geleitet, die die gewünschte Eingabe abholt. Der Anweisungsanfangsblock umfaßt ferner ein Feld, das eine Indexbreite (IND_W) spezifiziert, die an den Hashcodierungfunktionsblock 13 geleitet wird. Block 13 erzeugt einen Versatzindex 14, der in der Einheit 60 zu der Basisadresse hinzugefügt wird, die durch die Adresse im Speicher der Anweisung 50 dargestellt wird. Das Ergebnis wird dann verwendet, um auf die entsprechende Speicherposition zuzugreifen und das Überprüfungswert-/Elementpaar wiederzugewinnen, das darin gehalten wird. Wenn der wiedergewonnene Überprüfungswert und der aktuelle Eingabewert übereinstimmen, wird das entsprechende Element ausgegeben; ansonsten wird ein Fehlschlag gemeldet. Wie das Ausgabeelement verwendet wird, kann in dem Anweisungsanfangsblock spezifiziert sein oder kann in das Element an sich kodiert werden; typischerweise handelt es sich bei dem Element um eine Aktion, die ausgeführt werden soll, einen Rückgabewert, oder eine Sprunganweisung zur Verarbeitungseinheit 55.
  • Der Zweck des Indexbreitenparameters IND_W ist, die Größe des Index 14 (und somit die Anzahl von möglichen Speicherpositionen, auf die er zeigen kann) auf die Größe des Hash- Tabellenkörpers 51 der entsprechenden Anweisung 50 anzupassen.
  • Der Block 13, die Einheit 60 und der Komparator 15 können als eine Hashcodierungseinheit 59 des Verarbeitungssystems von 2 bildend betrachtet werden.
  • 3 stellt eine Anwendung des Verarbeitungssystems von 2 auf die Steuerung eines Paketschalters dar. Fachleute werden darauf hingewiesen, daß der dargestellte Schalter vereinfacht worden ist, wobei dies vorgenommen wird, um ein Verständnis der Operation des Verarbeitungssystems von 2 in Zusammenhang mit dem Schalter zu vereinfachen. Der Schalter weist zwei Ports A und B zum Empfangen und Senden von Paketen auf. Die Ports werden durch einen Bus 75 miteinander verbunden, über den die empfangenen Pakete zwischen den Ports geleitet werden können. Der Bus 75 ist ebenfalls mit einer Steuerung 70 verbunden. Die Rolle der Steuerung 70 ist es, die eingehenden Pakete, die an den Ports A und B empfangen werden, zu führen, indem jeder Port angewiesen wird, welche Pakete durch diesen Port auszugeben sind. Die Steuerung trifft ihre Leitungführungssentscheidung für ein Paket basierend auf der Paketdestinationsadresse, die im Paketanfangsblock enthalten ist (in dem vorliegendem Beispiel ist diese Destinationsadresse eine 16-Bit-Adresse), und einem Zwei-Bit-Port-Identifizierer, der den Port identifiziert, an dem das Paket empfangen wurde (z. B. kann Port A durch einen binären Wert von „01" bezeichnet sein und Port B durch einen binären Wert von „10"). Diese Informationen werden der Steuerung 70 zur Verfügung gestellt, in dem für jeden Port Vorkehrungen getroffen werden, den entsprechenden Portidentifizierer an jeden Paketanfangsblock im voraus anzuhängen, bevor das Paket auf den internen Bus 75 gesetzt wird, wobei der Paketanfangsblock und der im voraus angehängte Portidentifizierer dann außerhalb des Busses 75 durch die Steuerung empfangen und in einem Eingaberegister 71 gespeichert werden (in der Praxis würde dazu eine Warteschlangenanordnung verwendet wer den). Nachdem die Steuerung ihre Leitungsführungsentscheidung getroffen hat, plaziert sie das Ergebnis in einem Ausgaberegister 72, von wo aus es an die Ports geleitet wird, um zu bestimmen, welcher Port, wenn überhaupt, das Paket ausgeben wird.
  • Neben den Eingabe- und Ausgaberegistern 71, 72 weist die Steuerung 70 die Verarbeitungseinheit 55 von 2, den Anweisungsspeicher 49, das Hashcodierungseinheit 59 und die Eingabeauswahleinheit 58 auf.
  • Der Betrieb der Steuerung wird zuerst bezüglich der Sequenz von drei Anweisungen, die in 4 gezeigt sind, berücksichtigt, wobei diese Anweisungen im Speicher 49 gehalten werden. Alle drei Anweisungen weisen einen Anweisungsanfangsblock und einen Anweisungskörper auf, jedoch sind nur die zweite und die dritte Anweisung vom vorstehend beschriebenen BRANCH- (HASH-BODY-) Typ. Die erste Anweisung ist ebenfalls eine BRANCH-Anweisung, jedoch enthält ihr Körper eine einfache Nachschlagtabelle, in die direkt durch den Wert der Eingabegröße indexiert wird, die durch einen IN_SEL-Parameter, der im Anweisungsanfangsblock enthalten ist, spezifiziert ist. Diese Anweisung wird als eine Anweisung bezeichnet, die vom Typ BRANCH (TABLE BODY) ist. Der Anfangsblock der ersten Anweisung enthält auch einen IND_W-Parameter, der die gleiche Funktion wie für die BRANCH- (HASH-BODY) Anweisung 50 aufweist.
  • Die erste Anweisung wird verwendet, um auf die zwei Port-Identifiziererbits der Paketinformationen, die im Eingaberegister 71 (IN_SEL-Parameter, der auf PORT gesetzt ist) gehalten werden, einen Blick zu werfen. Im vorliegenden Fall weist der Portidentifizierer einen Wert von „1" oder „2" auf und führt dazu, daß auf eine entsprechende der Anweisungskörper-Speicherpositionen zugegriffen wird. Weil der Portidentifizierer zwei Bits beträgt, ist die Anweisungskörpertabelle dimensioniert, um vier Ergebnisse an entsprechenden Positionen {0} bis {3} zu speichern, obwohl bei dem vorliegenden Beispiel nur zwei tatsächlich bei dem vorliegenden Beispiel nur zwei tatsächlich erforderlich sind. Tatsächlich werden nur zwei Speicherworte für die vier möglichen Ergebnisse verwendet (somit weist der Parameter IND_W nur einen Wert von eins auf, was eine Tabellengröße von zwei Speicherworten anzeigt), weil in dem vorliegenden Fall jedes Speicherwort zwei Ergebnisse halten kann. Es wird ebenfalls darauf hingewiesen, daß die in den Anweisungsbeispielen von 5 und 4 angegebenen Zahlen in einer hexadezimalen Notierung erfolgen.
  • Die in dem Körper der ersten Anweisung gespeicherten Ergebnisse zeigen an, welche der zweiten und dritten Anweisung nun ausgeführt werden soll. Spezieller, wenn der Portidentifizierer einen Wert von „1" aufweist, dann wird das Ergebnis, auf das zugegriffen wurde, die Adresse <0007> der zweiten Anweisung sein, wohingegen, wenn der Portidentifizierer einen Wert „2" aufweist, das Ergebnis, auf das zugegriffen wurde, die Adresse <000F> der dritten Anweisung sein wird. Die Verarbeitungseinheit 55 nimmt die Adresse, auf die zugegriffen wurde, und gewinnt die entsprechende Anweisung wieder.
  • Die Anweisung von der zweiten und dritten Anweisung, auf die gesprungen wurde, richtet dann ihren Blick auf die sechzehn Destinationsadressenbits, die im Register 71 gehalten werden (IN_SEL, gesetzt auf DA) und hash-codiert dieselben (unter Verwendung einer Hashcodierungseinheit 59), um einen Versatzindex zum Zugreifen in den Hash-Tabellenkörper zu ermöglichen. Bei dem vorliegenden Beispiel sind nur zwei Destinationsadressen von Interesse, nämlich die Adresse <0002> für Pakete, die am Port A empfangen werden, und die Adresse <FFFI> für Pakete, die am Port B empfangen werden. Die Größe der Hash-Tabelle ist hier vier Worte (IND_W = 2), wobei jedes Wort einen Hash-Tabelleneintrag hält, Ein Hash-Tabellen-„Treffer" führt zur Ausgabe einer Portaktionsanweisung (ACTION 1 oder ACTION 2 in dem aktuellen Beispiel), die unter der Steuerung der Verarbeitungseinheit 55 im Ausgaberegister 72 gespeichert ist, um eine Leitungsführung des Pakets zu bestimmen. Wenn kein „Treffer" erreicht wurde, wird das Ausgaberegister nicht gesetzt und das Paket wird nicht weitergeleitet.
  • Die Anweisungssequenz von 4 verwendet eine jeweilige Hash-Tabelle für jeden Port. Obgleich BRANCH (HASH BODY) eine kompakte Möglichkeit zur Handhabung eines großen Bereichs von potentiellen Destinationsadreßwerten ist, wobei die Anzahl von Adressen von Interesse groß ist (Tausende und nicht die zwei vom Beispiel von 4), wird bevorzugt, die Adressen nur einmal aufzulisten, d. h. nur eine BRANCH- (HASH BODY-) Anweisung und nicht zwei aufzuweisen. Dies kann durch Behandeln der Anweisung als eine aufgerufene Funktion erreicht werden, die einen Nachschlagtabellenindex, wie nachstehend unter Bezugnahme auf die Anweisungssequenz von 5 beschrieben wird, zurückgibt.
  • In der Anweisungssequenz von 5 ist die erste Anweisung mit der Sequenz in 4 identisch, nämlich eine BRANCH- (TABLE BODY-) Anweisung, die einen Blick auf die Portidentifiziererbits wirft und einen Sprung zur zweiten oder dritten Anweisung in Abhängigkeit vom Wert des Portidentifizierers ausführt. Die zweite und dritte Anweisung sind ebenfalls BRANCH- (TABLE BODY-) Anweisungen – diese Anweisungen enthalten spezifische Aktionen, die am Ausgaberegister 72 für die spezifischen Destinationsadressen von Interesse hinterlegt werden sollen, die an den Port A bzw. B empfangen werden. Der Index im Tabellenkörper von jeweils der zweiten und dritten Anweisung wird durch die Eingabequelle, die durch den IN_SEL-Parameter angezeigt ist, geliefert. In diesem Fall ist der IN_SEL-Parameter auf CALL <000F> für beide Anweisungen gesetzt, um anzuzeigen, daß der Index, der verwendet werden soll, der Wert ist, der vom Aufrufen der Anweisung zurückgegeben wurde, die an der Adresse <000F> positioniert ist. Die aufgerufene Anweisung (die vierte Anweisung von 5) ist eine BRANCH- (HASH BODY-) Anweisung, die die Destinationsadressenbits hashcodiert, um einen Versatz in ihrem Hash-Tabellenkörper zu liefern. Der Hash-Tabellenkörper enthält die Rückgabewerte, die an die Aufrufanweisung zurückgegeben werden sollen. Unter Verwendung der selben zwei Destinationsadressen von Interesse wie im Beispiel von 4, resultiert die Adresse <0002> in einen Wert von „1", der zurückgegeben wird, während der Adreßwert <FFF1> in den Wert „2" resultiert, der zurückgegeben wird. Ein Hash-Tabellen-„Fehlschlag" führt dazu, daß ein Nullwert zurückgegeben wird. Wie aus einer Studie von 5 zu ersehen ist, wenn die aufrufende Anweisung die zweite Anweisung (Port A, der Empfangsport) war, führt nur ein Rückgabewert von „1" zur Ausgabe einer Aktion (ACTION 1). Wenn desgleichen die aufrufende Anweisung die dritte Anweisung (Port B, der Empfangsport) war, führt nun ein Rückgabewert von „2" zur Ausgabe einer Aktion (ACTION 2).
  • Der Prozeß des Aufhebens der Operation der aufrufenden Anweisung, während die aufgerufene Anweisung ausgeführt wird, wird in einer Standardweise unter Verwendung eines Stapels vorgenommen, auf dem und von dem entsprechende Parameter des Betriebs geschoben und entnommen werden.
  • 6 stellt eine Variante der Form des Verarbeitungssystems von 2 dar, bei dem die Hash-Funktion, die durch den Hashcodierungs-Funktionsblock 13 verwendet wird, durch einen Hash-Steuerungscode (HCC) 20 gesteuert wird, der im Anfangsblock 51 von jeder Verzweigungsanweisung umfaßt ist, deren Körper in der Form einer Hash-Tabelle ist. Nachdem eine solche Anweisung 50 in die Verarbeitungseinheit 55 vom Speicher 49 geladen worden ist, wird der Hash-Code an den Block 13 geleitet, um Parameter der Hash-Funktion zu bestimmen, die zur Hashcodierung der Eingabedaten, die der Anweisung unterliegen, verwendet werden sollen. Weil die Hashcodierungfunktion gesteuert werden kann, kann sie angepaßt werden, um für unterschiedliche Suchraumprobleme zu passen (d. h. um Situationen zu entsprechen, die sich voneinander bezüglich der Charakteristika der Eingabe relativ zur Anzahl und Identität der Eingabewerte von Interesse un terscheiden), wobei der durch den Block 13 erzeugte Index 14 auf einen entsprechend dimensionierten Speicherplatz, der für die aktuelle Eingabe relevant ist, angewendet wird.
  • 7 stellt das Prinzip der Operation von einer Form des Blocks 13 dar, der zur Verwendung im System von 6 geeignet ist. Der Block 13 von 7 weist einen Kombinationsblock 22 und einen Bitauswahlblock 23 auf. Der Kombinationsblock 22 dient dazu, einen Zwischenwert 27 zu bilden (der nachstehend als „umgewandelter Wert" bezeichnet wird), indem in einem Exklusiv-ODER-Block 26 unterschiedliche bitverschobene Versionen 25A, 25B und 25C der Eingabe 10 kombiniert werden. Die Anzahl und der Grad der Bitverschiebung dieser Eingabeversionen 25 wird durch den Hash-Steuerungscode 20 bestimmt. Der Bitauswahlblock bildet dann den Index 14, indem die Bits von dem umgewandelten Wert 27 ausgewählt werden, wobei die Anzahl dieser Bits durch einen Indexbreitenparameter 21 (der in effektiver Weise die Größe des Speicherplatzes spezifiziert, auf den durch den Index 14 zugegriffen wird) bestimmt wird.
  • Wie der Hash-Steuerungscode 20 verwendet wird, um zu steuern, welche Eingabeversionen zusammen kombiniert werden, ist in 8 diagrammatisch dargestellt. Der Kombinierungsblock 22 weist das Potential auf, um (zumindest begrifflich, wenn nicht ausdrücklich) P-Bit-verschobene Versionen der Eingabe zu erzeugen, wobei diese Versionen mit Version 0 bis Version (P-1) in 8 gekennzeichnet sind. Diese Versionen werden in progressiver Weise weiter nach rechts um Inkremente von einem Bit von Version 0 zu Version (P-1) bitverschoben, wobei die Version 0 relativ zur Originaleingabe 10 (d. h. um 1 linksverschoben) rechtsverschoben wird (–1). Bei dem vorliegenden Beispiel wird die Eingabe verschoben und nicht zirkuliert, um die eingegebenen Versionen 0 bis (P-1) mit Nullwerten zu bilden, die hinzugefügt werden, um ansonsten undefinierte Bitpositionen außerhalb der Eingabesequenz zu füllen.
  • Der Hash-Steuerungscode 20 weist P-Bits auf, die sich von Bitposition 0 zur Position P-01 erstrecken. Wenn der Code 20 in einer speziellen Bitposition eine „1" aufweist, dann wird die entsprechende Eingabeversion dem XOR-Block 26 zur Kombination mit anderen Versionen, die so präsentiert wurden, präsentiert. Wenn die Bitpositionen 2, 7 und 9 des Codes 20 beispielsweise Einsen sind und alle anderen Positionen null, dann werden die eingegebenen Versionen 2, 7 und 9 (entsprechend den Rechtsverschiebungen von 1 Bit, 6 Bits bzw. 8 Bits) im XOR-Block 26 kombiniert, um den umgewandelten Zwischenwert 27 zu bilden.
  • 9 stellt den Schaltungsaufbau zum Bewirken einer Versionsauswahl und Kombination zum Erzeugen eines Bit (dem Bit in Position „n") des umgewandelten Werts 27 dar. Spezieller wird der Hash-Steuerungscode im Register 32 gehalten, und jedes Bit wird verwendet, um ein entsprechendes Zwei-Eingabe-AND-Gatter 30 zu steuern. Die Ausgaben von allen Gattern 30 werden einem XOR-Gatter 31 zugeführt. Die andere Eingabe von jedem Gatter 30 empfängt das Bit „n" der eingegebenen Version, die dem Hash-Steuerungscode-Bit entspricht, das dieses Gatter steuert (wobei Bit 0 die erste Bitposition in jeder Version ist). Diese Bit-„n"-Werte für alle eingegebenen Versionen können einfach durch Abgreifen entsprechender Zellen eines Registers 33 abgeleitet werden, das die Eingabe 10 hält, die an jedem Ende mit Null-Bits aufgefüllt ist. Somit ist das Bit „n" der Eingabeversion „m" das Bit (m + n – 1) der Eingabe 10.
  • Wie offenbar wird, wird nur das Bit „n" der Eingabeversionen, die durch die entsprechenden Bits des Hash-Steuerungscodes 32 freigegeben werden, an das XOR-Gatter 31 geleitet. Dieses Gatter erzeugt eine Ausgabe „1", wenn es mit einer ungeraden Zahl von Einsen und Nullen, die ansonsten ausgegeben werden, versorgt wird.
  • Der Schaltungsaufbau von 9, mit Ausnahme der Register 32, 33, wird für jedes Bit des umgewandelten Werts wiederholt (der beispielsweise ein 16-Bit-Wert sein kann).
  • Bezüglich des Bitauswahlblocks 23 nimmt dieser bei dem vorliegenden Beispiel das Bit 1 bis Bit (Indexbreite) des umgewandelten Werts und gibt dieselben als den Index 14 aus. Komplexere Auswahlmuster können alternativ verwendet werden. Ein geeigneter Schaltungsaufbau zum Implementieren von Block 23 ist Fachleuten bekannt.
  • Mittels eines Beispiels unterscheiden ein Hash-Steuerungscode von h1dbb764747a (wobei h eine hexadezimale Notation anzeigt) und eine Indexbreite von 3 zwischen den nachfolgenden sechs 48-Bit-Eingabewerten:
    h080009732b60
    h080009732d68
    h080009732fd8
    h080009732de8
    h080009732cf8
    h0800097329d8
  • Aus dem Vorstehenden ist zu erkennen, daß der Hash-Steuerungscode eine praktische und flexible Möglichkeit zum Liefern einer sehr großen Anzahl von unterschiedlichen Hash-Funktionen ermöglicht. Die Bestimmung des Hash-Steuerungscodes, der notwendig ist, um die Hash-Funktion zu erzeugen, die für einen speziellen Zweck am besten geeignet ist (z. B. zum Erreichen einer perfekten Hashcodierung innerhalb eines minimalen Speicherplatzes), kann durch einen automatisierten Trial-Error-Prozeß bestimmt werden. Sobald der gewünschte Hash-Steuerungscode bestimmt worden ist, kann er dann auf den Hashcodierungsfunktionsblock 13 angewendet werden, immer wenn eine relevante Eingabe 10 empfangen wird. Gleichzeitig wird auch die entsprechende Indexbreiteneingabe 23 geliefert.
  • Tatsächlich könnte die Trial- und -Errorbestimmung eines geeigneten Hash-Steuerungscodes potentiell lange dauern, und es ist daher angemessen, Schritte zu unternehmen, um die Aussichten auf einen Erfolg zu verbessern, wenn Trial-und-Error kein erfolgreiches Ergebnis nach einer gegebenen Anzahl von Versuchen erzeugt. Speziell kann die Größe der Indexbreite erhöht werden, um ein größeres Ziel zu ergeben (wobei der Nachteil ist, daß mehr Speicher erforderlich ist). Ein weiterer Lösungsansatz ist, eine Neu-Hashcodierung zu ermöglichen – d. h. nicht immer zu versuchen, eine perfekte Hashcodierung zu erreichen, sondern zu ermöglichen, daß Eingabewerte von Interesse auf denselben Index hashcodiert werden können (und somit Speicherplatz) wobei nur einer dieser Werte validiert wird – wobei beliebige nichtvalidierte Zugriffe auf einen Speicherplatz zu einer neuen Hashcodierung unter Verwendung einer anderen Hash-Funktion Anlaß geben.
  • Dieser Lösungsansatz ist in 10 dargestellt, wo die Schritte 40 bis 46 im Feld 38 den gesamten Hashcodierungsprozeß darstellen. Spezieller wird bei Schritt 40 ein erster Speicherzugriffsversuch an der Eingabe 10 unter Verwendung des bereitgestellten Hash-Steuerungscodes 20 (und der Indexbreite, wobei letztere nicht dargestellt ist, da sie für den gesamten Hashcodierungsprozeß konstant ist) geliefert. Bei Schritt 41 wird die Validität des Speicherzugriffsversuchs geprüft, indem die Eingabe 10 mit dem Überprüfungswert, der in der Position, auf die zugegriffen wurde gespeichert ist, verglichen wird. Ist er validiert (ein „Treffer") wird der Hashcodierungsprozeß verlassen. Wenn jedoch kein „Treffer" erreicht wird, wird ein neuer Speicherzugriffsversuch unter Verwendung eines Hashsteuerungs-Steuerungscodes unternommen, der von einem Satz 47 von vorbestimmten Codes ausgewählt ist. Die Identität des gewählten Codes wird durch Bestimmen (Schritt 42) des Werts einer Index idx in den Satz 47 auf Grundlage der abschließenden Bits des bereitgestellten Hash-Steuerungscodes 20 gegeben. Unter Verwendung des ausgewählten vorbestimmten Hashsteuerungscodes wird ein neuer Zugriffsversuch unternommen (Schritt 43), und seine Validität wird überprüft (Schritt 44). Wenn ein „Treffer" erreicht wird, wird der Hashcodierungsprozeß verlassen, ansonsten wird der Wert von idx inkrementiert (Schritt 46) und ein weiterer Neuversuch mit dem neu vorbestimmten Hashsteuerungscode, auf den durch idx gezeigt wird, vorgenommen. Die Anzahl von Neuversuchen, die erlaubt ist, ist durch einen Neuversuchwert 39 begrenzt, wobei die aktuelle Anzahl von Neuversuchen gegenüber diesem Wert 39 bei Schritt 45 getestet wird (wobei darauf hingewiesen wird, daß ein Zählwert über die Anzahl von Neuversuchen gehalten wird). Wenn nach der maximalen Anzahl von zulässigen Neuversuchen „kein" Treffer erreicht wird, wird ein „Fehlschlag" ausgegeben, um anzuzeigen, daß der Eingabewert keiner von Interesse war, und der Hashcodierungsprozeß wird verlassen. Es wird darauf hingewiesen, daß der anfängliche Hashsteuerungscode 20, die Indexbreite und die Anzahl von zulässigen Neuversuchen gewählt sind, um sicherzustellen, daß alle Eingabewerte von Interesse zu einem „Treffer" führen.
  • Bezüglich der beschriebenen Ausführungsbeispiele der Erfindung ist natürlich eine Anzahl von Varianten möglich. Die Quelle von Eingabedaten für die BRANCH- (HASH BODY-) Anweisung kann beispielsweise vielmehr implizit und nicht explizit durch den IN_SEL-Parameter spezifiziert sein. Ferner, obgleich der Hash-Steuerungscode von 6 bis 10 als ein Code beschrieben worden ist, der die Anzahl und den Grad der Bitverschiebung der Eingabeversionen 25 steuert, könnten zusätzliche oder unterschiedliche Parameter der Hashcodierungfunktion gesteuert werden. Somit könnte der Hashcodierungssteuerungscode Bits zum Spezifizieren der Funktion, die zum Kombinieren der Eingabeversionen verwendet wird (Multiplizierungen der Versionen etc) und/oder zum Spezifizieren von vielmehr einer Zirkulation und keiner Verschiebung der Eingabe und/oder zum Spezifizieren der Richtung und der Größenordnung der Verschiebung/Zirkulation zwischen Versionen und/oder zum Ordnen der Bits umfassen, die durch den Bitauswahlblock 23 ausgewählt werden etc. Zusätzlich kann zumindest die Bitauswahlfunktion des Bitauswahlblocks 23 innerhalb der Form von 4 der Kombinierungseinheit 22 implementiert sein, in dem jene Instanzen des Gatterschaltungsaufbaus (Elemente 30, 31) die auf die Bits des umgewandelten Werts bezogen sind, gesperrt werden, die für den aktuellen Index nicht erforderlich sind.
  • Im Hinblick auf 10 könnte jeder Hash-Code vom aktuellen unter Verwendung einer gewissen Art einer XOR-Funktion berechnet werden, und nicht die Steuerungscodes, die für Hashcodierungsneuversuche verwendet werden, die von einem vorbestimmten Satz von Codes 47 ausgewählt werden.

Claims (18)

  1. Ein Verarbeitungsverfahren, bei dem eine programmgesteuerte Verarbeitungseinrichtung (59) im Verlaufe des Ausführens einer Anweisung (50) eines gegebenen Typs, die in einem Speicher (49) gespeichert ist, dazu gebracht wird, ein Element aus dem Speicher (49) abhängig vom Wert von eingegeben Daten (10) bezüglich der Anweisung selektiv wiederzugewinnen, wobei die Anweisung einen Anfangsblock (51) aufweist, der die Anweisung als von dem gegebenen Typ identifiziert, wobei das Verfahren folgende Schritte aufweist: (a) – Bestimmen, ob eine aktuelle Anweisung (50), die durch die Verarbeitungseinrichtung (59) ausgeführt werden soll, von dem gegebenen Typ ist; (b) – wenn Schritt (a) bestimmt, daß die Anweisung (50) von dem gegebenen Typ ist, Verwenden der eingegebenen Daten (10) bezüglich der Anweisung, um einen Versatzwert (14) zu erzeugen; und (c) – Verwenden des Versatzwertes (14), der im Schritt (b) erzeugt wurde, um auf ein Element im Speicher zuzugreifen relativ zur Position im Speicher der aktuellen Anweisung, dadurch gekennzeichnet, daß: – die Anweisung des gegebenen Typs einen Körper (52) in der Form einer Hash-Tabelle aufweist, die zumindest einen Eintrag aufweist mit sowohl (i) einem Überprüfungswert, der einem Wert von Interesse der eingegebenen Daten bezüglich der Anwei sung entspricht, als auch (ii) einem Element, das verwendet werden soll, wenn die eingegeben Daten den Wert von Interesse aufweisen; – bei Schritt (b) die eingegebenen Daten hashcodiert werden, um den Versatzwert zu erzeugen, der dann im Schritt (c) verwendet wird, um auf einen entsprechenden Eintrag in der Hash-Tabelle der aktuellen Anweisung zuzugreifen; und – das Verfahren einen weiteren Schritt umfaßt: (d) Vergleichen des Werts der eingegebenen Daten (10) mit dem Überprüfungswert, der in dem Eintrag gehalten wird, auf den im Schritt (c) zugegriffen wird, und Verfügbarmachen des zugeordneten Eintragselements zur wirksamen Verwendung nur, wenn die verglichenen Werte übereinstimmen.
  2. Ein Verfahren gemäß Anspruch 1, das ferner das Verwenden des Elements, das im Schritt (d) verfügbar gemacht wurde, zum Steuern einer Paketführung in einem Paketschalter umfaßt.
  3. Ein Verfahren gemäß Anspruch 1, das ferner das Verwenden des Elements umfaßt, das im Schritt (d) verfügbar gemacht wurde, als ein Hinweis auf die Position einer nächsten Anweisung, die durch die Verarbeitungseinrichtung (59) ausgeführt werden soll.
  4. Ein Verfahren gemäß Anspruch 1, das ferner das Verwenden des Elements umfaßt, das im Schritt (d) verfügbar gemacht wurde, als einen Rückgabewert, der an eine vorherige Anweisung, die für ein Aufrufen der Anweisung des gegebenen Typs verantwortlich ist, zurückgegeben wird.
  5. Ein Verfahren gemäß Anspruch 4, bei dem der Rückgabewert durch die vorherige Anweisung als ein Index in eine Tabelle, die der vorherigen Anweisung zugeordnet ist, verwendet wird.
  6. Ein Verfahren gemäß Anspruch 1, bei dem der Anfangsblock (51) der Anweisung (50) einen Eingabeauswahlparameter (IN_SEL) umfaßt, der einen Quellenhinweis für die eingegebenen Daten (10) liefert, wobei das Verfahren ein Verwenden des Eingabeauswahlparameters umfaßt, um auf die eingegebenen Daten, die im Schritt (b) hashcodiert werden sollen, zuzugreifen.
  7. Ein Verfahren gemäß Anspruch 1, bei dem der Anfangsblock (51) der Anweisung (50) einen Größenparameter (IND_W) umfaßt, der die Größe der Hash-Tabelle anzeigt, die im Körper (52) der Anweisung enthalten ist, wobei das Verfahren ein Verwenden des Größenparameters umfaßt, um die Größe und daher den Wertebereich des Versatzwerts (14) zu begrenzen, um die Größe der Hash-Tabelle anzupassen.
  8. Ein Verfahren gemäß Anspruch 1, bei dem die Hash-Codierung der eingegebenen Daten (10) im Schritt (b) unter Verwendung einer festgelegten Hash-Funktion ausgeführt wird.
  9. Ein Verfahren gemäß Anspruch 1, bei dem der Anfangsblock (51) der Anweisung (50) einen Hash-Steuerungscode (20) umfaßt und die Hash-Codierung der eingegeben Daten (10) im Schritt (b) in Abhängigkeit vom Wert des Hash-Steuerungscodes ausgeführt wird.
  10. Ein Verfahren gemäß Anspruch 9, bei dem Schritt (b) folgende Schritte aufweist: – Bilden eines transformierten Wertes (27) durch Kombinieren von zumindest Abschnitten der unter schiedlichen Versionen (25) der eingegebenen Daten, wobei der Hash-Steuerungscodes (20) dazu dient, spezifische Parameter dieses Bildens einzustellen, und – Verwenden des transformierten Wertes (27), um den Versatzwert (14) zu liefern.
  11. Ein Verfahren gemäß Anspruch 10, bei dem die unterschiedlichen Versionen (25) der eingegebenen Daten bitverschobene Versionen der eingegebenen Daten (10) sind, wobei die Anzahl der unterschiedlichen Versionen und ihre jeweiligen Grade einer Bitverschiebung durch den Hash-Steuerungscode (20) bestimmt werden.
  12. Ein Verfahren gemäß Anspruch 11, bei dem der Hash-Steuerungscode (20) ein Multi-Bit-Code ist, wobei der Zustand von jedem von zumindest einigen der Bits des Hash-Steuerungscodes das Vorhandensein oder das Nichtvorhandensein einer Version (25) der eingegebenen Daten bestimmt, die der Bitverschiebung der eingegebenen Daten um einen Betrag abhängig von der Position des relevanten Hash-Steuerungscodebits in diesem Code entsprechen.
  13. Ein Verfahren gemäß einem der vorhergehenden Ansprüche, bei dem zumindest die Abschnitte der unterschiedlichen Versionen der eingegebenen Daten durch eine Exklusiv-ODER-Verknüpfung (26) kombiniert werden.
  14. Ein Verfahren gemäß einem der vorhergehenden Ansprüche, bei dem in Fällen, wo ein Verwenden der anfänglichen Hash-Funktion, um die Hash-Codierung von Schritt (b) zu bewirken, mehr als einen Wert von Interesse der eingegebenen Daten (10), die auf den gleichen Versatzwert hash-codiert wird, zur Folge hat, dann, falls der entsprechende Hash-Tabelleneintrag einen Überprüfungswert enthält, der nicht mit dem eingegebenen Datenwert im Schritt (d) übereinstimmt, zumindest ein weiterer Hash-Versuch unter Verwendung einer anderen Hash-Funktion als der anfänglichen Hash-Funktion unternommen wird.
  15. Vorrichtung, die folgende Merkmale aufweist: – eine Speicherungseinrichtung (49) zum Speichern eines Programms, das eine Anweisung (50) eines gegebenen Typs umfasst, der in einem Anfangsblock (51) der Anweisung identifiziert ist; – eine Verarbeitungseinrichtung (55) zum Ausführen des Programms in der Speicherungseinrichtung (49); – eine Einrichtung (58) zum Liefern von eingegebenen Daten (10); – eine Versatzbestimmungseinrichtung, die daraufhin, daß die Verarbeitungseinrichtung die Anweisung des gegebenen Typs verarbeitet, wirksam ist, um die eingegebenen Daten (10) zu verwenden, um einen Versatzwert (14) zu erzeugen; und – eine Versatzzugriffseinrichtung (60) zum Verwenden des Versatzwertes, um auf die Speicherungseinrichtung bei einem Versatz relativ zur Position der aktuellen Anweisung, die durch die Verarbeitungseinrichtung ausgeführt wird, zuzugreifen; dadurch gekennzeichnet, daß die Vorrichtung angepaßt ist, um die Anweisung des gegebenen Typs zu verarbeiten, wobei eine solche Anweisung einen Körper (52) in der Form einer Hash-Tabelle mit zumindest einem Eintrag mit sowohl (i) einem Überprüfungswert, der einem Wert von Interesse der eingegebenen Daten bezüglich der Anweisung entspricht, als auch (ii) einem Element aufweist, das durch die Anweisung verwendet werden soll, wenn die eingegeben Daten den Wert von Interesse aufweise; wobei die Vorrichtung angepaßt ist, um eine solche Anweisung wie folgt zu verarbeiten: – die Versatzbestimmungseinrichtung, die eine Hash-Codierungs-Einrichtung (13) zum Hash-Codieren der eingegebenen Daten (10) aufweist, um den Versatzwert (14) zu erzeugen, – das Bereitstellen der Komparatoreinrichtung (15), die daraufhin, daß auf einen Hash-Tabelleneintrag durch die Versatzzugriffseinrichtung während des Ausführens einer Anweisung des gegebenen Typs durch die Verarbeitungseinrichtung (55) zugegriffen wird (55), wirksam ist, um den eingegebenen Datenwert mit dem Überprüfungswert des Hash-Tabelleneintrags zu vergleichen und um die Ausgabe des entsprechenden Hash-Tabellenelements zu bewirken, wenn der Wert der eingegebenen Daten und der Überprüfungswert übereinstimmen.
  16. Vorrichtung gemäß Anspruch 15, bei der zum Verarbeiten der Anweisung des gegebenen Typs, die einen Hash-Steuerungscode umfaßt, die Hash-Codierungs-Einrichtung (13) folgende Merkmale aufweist: – eine Einrichtung, die daraufhin, daß die Anweisung durch die Verarbeitungseinrichtung (55) ausgeführt wird, wirksam ist, um die eingegebenen Daten (10) und den Hash-Steuerungscode (20) zu empfangen, – eine Einrichtung (22) zum Bilden eines transformierten Wertes (27) durch Kombinieren von zumindest entsprechenden Abschnitten der mehrfach bitverschobenen Versionen (25) der eingegebenen Daten miteinander, wobei die Anzahl solcher Versio nen und ihre jeweiligen Grade einer Bitverschiebung durch den Hash-Steuerungscode (20) bestimmt werden, und – eine Einrichtung (23) zum Verwenden des transformierten Wertes (27), um den Versatzwert (14) zu liefern.
  17. Vorrichtung gemäß Anspruch 16, bei der die unterschiedlichen Versionen (25) der eingegebenen Daten bitverschobene Versionen der eingegebenen Daten (10) sind, wobei die Anzahl der unterschiedlichen Versionen und ihre jeweiligen Grade einer Bitverschiebung durch den Hash-Steuerungscode (20) bestimmt werden, wobei die Einrichtung zum Bilden eines transformierten Wertes folgende Merkmale aufweist: – eine erste Registereinrichtung (33) zum Speichern der eingegebenen Daten (10), wobei die erste Registereinrichtung über ihre Länge zugreifbar ist, um einen Zugriff auf die Versionen (25) durch einen entsprechend versetzten Zugriff in die erste Registereinrichtung zu erlauben; – eine zweite Registereinrichtung (32) zum Speichern des Hash-Steuerungscodes (20); – eine Exklusiv-ODER-Einrichtung (31); und – eine Gatter-Einrichtung (20), die mit der ersten und der zweiten Registereinrichtung (33, 32) verbunden ist, zum Steuern des Weiterleitens von Bits der unterschiedlichen Versionen (25) der Eingabe abhängig vom Wert des Hash-Steuerungscodes (20) zur Exklusiv-ODER-Einrichtung (31), wobei die Ausgabe der Exklusiv-ODER-Einrichtung (31) den transformierten Wert (27) darstellt.
  18. Vorrichtung gemäß einem der Ansprüche 15 bis 17, bei der das Programm, das die Anweisung (50) eines gegebenen Typs umfaßt, in der Speicherungseinrichtung (49) gespeichert ist.
DE69816784T 1998-05-01 1998-05-01 Prozessorbefehl mit Hashcodierung Expired - Lifetime DE69816784T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP98303431A EP0953897B1 (de) 1998-05-01 1998-05-01 Prozessorbefehl mit Hashcodierung

Publications (2)

Publication Number Publication Date
DE69816784D1 DE69816784D1 (de) 2003-09-04
DE69816784T2 true DE69816784T2 (de) 2004-04-15

Family

ID=8234805

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69816784T Expired - Lifetime DE69816784T2 (de) 1998-05-01 1998-05-01 Prozessorbefehl mit Hashcodierung

Country Status (3)

Country Link
US (1) US6272614B1 (de)
EP (1) EP0953897B1 (de)
DE (1) DE69816784T2 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE9904685D0 (sv) 1999-12-17 1999-12-17 Switchcore Ab A programmable packet decoder
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置
US6868476B2 (en) * 2001-08-27 2005-03-15 Intel Corporation Software controlled content addressable memory in a general purpose execution datapath
US7111305B2 (en) * 2002-10-31 2006-09-19 Sun Microsystems, Inc. Facilitating event notification through use of an inverse mapping structure for subset determination
US20040103399A1 (en) * 2002-11-22 2004-05-27 Manisha Agarwala Data trace compression map
US20080317245A1 (en) * 2007-06-20 2008-12-25 Franny Wei Hash function implemention with ROM and CSA
JP2021157604A (ja) * 2020-03-27 2021-10-07 株式会社村田製作所 データ通信装置、データ通信モジュール

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2148652B (en) 1983-09-15 1987-09-09 Sinclair Res Ltd Television receivers
GB8327567D0 (en) * 1983-10-14 1983-11-16 Gen Electric Co Plc Computers
US5170475A (en) * 1989-03-06 1992-12-08 Motorola, Inc. Data processor having instructions for interpolating between memory-resident data values respectively
US5333283A (en) * 1991-10-29 1994-07-26 International Business Machines Corporation Case block table for predicting the outcome of blocks of conditional branches having a common operand
US5754806A (en) * 1995-11-03 1998-05-19 Holtek Microelectronics, Inc. Memory table look-up device and method

Also Published As

Publication number Publication date
EP0953897A1 (de) 1999-11-03
DE69816784D1 (de) 2003-09-04
US6272614B1 (en) 2001-08-07
EP0953897B1 (de) 2003-07-30

Similar Documents

Publication Publication Date Title
DE60216938T2 (de) Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher
DE2230102C2 (de) Mikroprogrammierter Prozessor mit bitparalleler Datenübertragung
DE602004010922T2 (de) Speicher und stromeffizienter mechanismus für schnelles tabellennachschlagen
DE2523414C3 (de) Hierarchische Speicheranordnung mit mehr als zwei Speicherstufen
DE1218761B (de) Datenspeidbereinrichtung
DE2856680C2 (de)
DE2730328B2 (de) Schaltungsanordnung zur Feststellung des bestübereinstimmenden Datenworts von in einem Datenwort-Speicher gespeicherten Datenworten mit einem Suchwort
DE69816784T2 (de) Prozessorbefehl mit Hashcodierung
DE69811477T2 (de) Verfahren und Vorrichtung zur Hashkodierung
DE2647574C2 (de) Vorrichtung zum Verarbeiten von durch ein Anfangs- und Endzeichen begrenzten Datenfeldsegementen variabler Länge bei einem Umlaufspeicher
DE2054830A1 (de) Informationsverarbeitungssystem mit wortstrukturiertem Speicher und Verfahren fur einen Zugriff zu einem derar tigen Speicher
DE3043653A1 (de) Datenverarbeitungsanlage
DE2926322A1 (de) Speicher-subsystem
DE3900246C2 (de)
DE2758829A1 (de) Multiprozessor-datenverarbeitungssystem
WO1995010803A1 (de) Prozessor für zeichenketten variabler länge
DE19821004C2 (de) Sequenzgenerator
DE1262641B (de) Mikroprogrammsteuerwerk
DE2458286A1 (de) Datenverarbeitungssystem zum verschieben von datenfeldern mit verschiedenen strukturen
DE2645341A1 (de) Koppleranordnung
DE1266026B (de) Verfahren und Anordnung zum Verhüten einer Änderung eines Speichermhaltes
DE2900586A1 (de) Anordnung zum decodieren von codewoertern variabler laenge
DE69503010T2 (de) Mikroprozessor zur Ausführung von Befehlen,von denen ein Teil des Operandfelds als Operationscode zu gebrauchen ist
DE3317593A1 (de) Pruefspeicherarchitektur
EP1332501B1 (de) Speicherverwaltungslogik zur erweiterten nutzung von festwertspeichern

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE