DE4403917C2 - Vorrichtung zum Berechnen einer Bit-Besetzungszählung - Google Patents

Vorrichtung zum Berechnen einer Bit-Besetzungszählung

Info

Publication number
DE4403917C2
DE4403917C2 DE4403917A DE4403917A DE4403917C2 DE 4403917 C2 DE4403917 C2 DE 4403917C2 DE 4403917 A DE4403917 A DE 4403917A DE 4403917 A DE4403917 A DE 4403917A DE 4403917 C2 DE4403917 C2 DE 4403917C2
Authority
DE
Germany
Prior art keywords
register
bits
adders
count
bit
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 - Fee Related
Application number
DE4403917A
Other languages
English (en)
Other versions
DE4403917A1 (de
Inventor
Dale C Morris
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 DE4403917A1 publication Critical patent/DE4403917A1/de
Application granted granted Critical
Publication of DE4403917C2 publication Critical patent/DE4403917C2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/607Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers number-of-ones counters, i.e. devices for counting the number of input lines set to ONE among a plurality of input lines, also called bit counters or parallel counters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Description

Die Erfindung betrifft Computer und insbesondere einen Hardwa­ rebefehl und ein Verfahren für den Prozessor eines Computers, um eine Besetzungszählung zu berechnen.
Eine Besetzungszählung (zur Ermittlung des Umfangs einer bestimmten Besetzung oder Population) bezeichnet das Zählen der Anzahl von "1"en in einer Bitfolge. Das Bitmuster "01011001" ergibt beispielsweise eine Besetzungszählung von 4. Die Besetzungszählung einer Zeichenfolge ist für viele Arten von Algorithmen und insbesondere für die Kryptoanalyse nützlich.
Einige Computer nach dem Stand der Technik implementieren spe­ zielle Befehle, um die Berechnung von Besetzungszählungen zu beschleunigen. Im allgemeinen nehmen diese Befehle einen einzelnen Operanden aus einem Prozessorregister, der typischerweise eine Größe von 32 Bit hat, und berechnen die Besetzungszählung für den Operanden und geben das Ergebnis an ein Register zurück. Wenn eine Besetzungszählung für eine binäre Zeichenfolge durchgeführt werden soll, welche so groß ist, daß sie in kein Register paßt, wird die Besetzungszählung in Stücken durchgeführt, wobei die Anzahl der Stücke von der Registergröße abhängt. Die Ergebnisse aller Stücke werden dann unter Verwendung normaler "Additions"-Befehle addiert, um das endgültige Ergebnis der Besetzungszählung zu erzeugen.
Aus Gründen der Geschwindigkeit und Effizienz sind die Besetz­ ungszählungsbefehle so implementiert, daß sie in einem einzigen CPU-Zyklus ausgeführt werden. Da die Berechnung der Be­ setzungszählungsfunktion komplex ist, wird jedoch die Imple­ mentierung eines Besetzungszählungsbefehls in einem einzigen Zyklus für Hochleistungs-CPUs mit hohen Taktfrequenzen proble­ matisch. Zu dem Geschwindigkeitsproblem trägt der gegenwärtige Trend zu Computern mit größeren Datenbreiten bei. Der Trend der Industrie geht heute weg von 32 Bit und hin zu 64 Bit. Dies bedeutet, daß ein Besetzungszählungsbefehl nun eine Besetzungszählung über doppelt so viele Bits wie in der Vergangenheit berechnen muß, und um dies auszuführen, wird mehr Zeit benötigt. Die Zeitverzögerung der Besetzungszählungsfunktion ist ungefähr proportional zum Logarithmus der Anzahl von Bits in dem Operanden. Eine Besetzungszählung über 16 Bits könnte also 4 Zeiteinheiten benötigen, über 32 Bits 5 Zeiteinheiten und über 64 Bits 6 Zeiteinheiten.
Fig. 1 zeigt ein Verfahren nach dem Stand der Technik, einen Besetzungszählungsbefehl in einem Computer mit 64-Bit-Registern zu implementieren. Ein Register 101 enthält den Operanden, für welchen eine Besetzungszählung durchgeführt werden soll. Die Bits des Operanden werden in Bitpaare aufgeteilt, und jedes Bitpaar wird von 1-Bit-Volladdierern 103-109 addiert. Obwohl nur vier 1- Bit-Addierer gezeigt sind, würden 32 verwendet werden, um die Bits des Operanden zu addieren. Die Ausgänge der 1-Bit-Addierer werden in Paare aufgeteilt, und jedes Paar der 2-Bit langen Ergebnisse wird von 2-Bit-Addierern 111-117 addiert. Wiederum sind nur vier 2- Bit-Addierer gezeigt, es würden jedoch 16 benötigt werden. Auf ähnliche Weise werden die Ausgänge von den 2-Bit-Addierern gepaart und von acht 3-Bit-Addierern 119-133 addiert. Vier 4-Bit-Addierer 135-141 werden zum Addieren der acht 3-Bit langen Ergebnisse verwendet, und zwei 5-Bit-Volladierer 143 und 145 werden zum Addieren der vier 5-Bit langen Ergebnisse verwendet. Schließlich wird ein 6-Bit-Volladdierer 147 zum Addieren der zwei 6-Bit langen Ergebnisse verwendet, um die endgültige Besetzungszählung zu erzeugen, welche in den letzten sieben Bits 149 des Ergebnisses 151 gespeichert wird. Das Ergebnis wird üblicherweise in einem Register des Computers gespeichert.
Ein Problem bei dem Verfahren zum Berechnen einer Besetzungs­ zählung nach dem Stand der Technik ist die für den gesamten "Additions"-Vorgang benötigte Zeit. Bei dem in Fig. 1 gezeigten Beispiel waren sechs Stufen von Volladdierern notwendig, um die Besetzungszählung durchzuführen. Da Volladdierer verwendet werden, muß genügend Zeit vorgesehen werden, um die Übertragbits von jeder Stufe der Addierer zu übertragen, um das Endergebnis zu erzeugen. Ein 2-Bit-Addierer, welcher zwei binäre Bitströme "11" und "01" addiert, braucht beispielsweise Zeit, um den Übertrag von der Addition der niederwertigsten Bits zur nächstniederwertigen Bitposition zu übertragen, so daß schließlich der Übertrag in der höchstwertigen Bitposition auftritt, um die richtige Antwort "100" zu erzeugen. Die nachfolgenden 3-Bit-Addierer können solange keine richtige Antwort erzeugen, bis die 2-Bit-Ergebnisse stabilisiert sind und ausreichend Zeit verstrichen ist, damit sich die von den 3-Bit-Addierern erzeugten Überträge fortgepflanzt haben. Dieser Vorgang wiederholt sich bei jeder nachfolgenden Stufe, und die kumulative Verzögerung für alle möglichen "Überträge" ist beträchtlich.
Damit eine Besetzungszählung in einem einzigen CPU-Zyklus durchgeführt werden kann, müssen die Übertrag-Verzögerungen minimiert werden, was die Verwendung von sehr schnellen logischen Schaltungen erfordert, welche viel Energie verbrauchen. Ferner muß zum Minimieren der internen Verzögerungszeiten der CPU der Besetzungszählungs-Schaltkreis in der Nähe des Prozessorkerns angeordnet sein, wodurch die Flexibilität beim Entwurf der CPU eingeschränkt wird.
Verfahren zum Berechnen einer Besetzungszählung über eine große Anzahl von Bits nach dem Stand der Technik erfordern 3 CPU-Zyklen für jeden Bitblock (beim vorliegenden Beispiel 64 Bits) in der Operanden-Zeichenfolge. Ein Zyklus wird für einen Speicherladebefehl verwendet, ein zweiter Zyklus wird zum Durchführen des Besetzungszählungsbefehls verwendet, und der dritte Zyklus ist ein Additionsbefehl, um die aktuelle Besetzungszählung zu dem vorher berechneten Zwischenergebnis der Besetzungszählung zu addieren. Die drei Zyklen pro Wort entsprechen den Kosten zum Berechnen von Besetzungszählungen für große Bitfolgen.
Aus der EP-A-0 209 014 ist eine Vorrichtung für eine bitparallele Addition von Binärzahlen durch Bitgruppen-Carry-Save-Addierer bekannt, bei der eine Reihe Addierer Zwischensummen- und Übertragungswerte abgeben, die in einer Addiereinrichtung zu Summenworten zusammengesetzt werden.
Für die Industrie wird eine neue Vorrichtung zum Berechnen von Besetzungszählungen benötigt, welche bei der Konstruktion der CPU bequem implementiert werden können und die eine schnelle Berechnung von Besetzungszählungen über eine größere Anzahl von Bits als mit Verfahren nach dem Stand der Technik erlauben.
Die Erfindung sieht daher eine neue Vorrichtung zum Berechnen einer Besetzungszählung für eine Bitfolge mit den Merkmalen von Anspruch 1 vor, welche weniger Zeit erfordert und eine größere Flexibilität des Schaltungsentwurfes oder Designs erlaubt als nach dem Stand der Technik.
Anstatt einen Besetzungszählungsbefehl zu implementieren, der die Besetzungszählung eines Operanden eines vollständigen Registers in einem Zyklus berechnet, implementiert die vorliegende Erfindung einen Besetzungszählungsbefehl, welcher den Operanden in mehrere Teile aufteilt. Auf diese Weise berechnet die CPU mehrere kleinere Besetzungszählungen, und die mehreren Besetzungszählungen werden nicht auf eine einzelne Zahl zurückgeführt oder reduziert, bis nicht die gesamte Zeichenfolge verarbeitet worden ist. Am Ende der Zeichenfolge werden die Besetzungszählungs-Zwischensummen auf die einzelne Zählung reduziert. Die zum Erzeugen der einzelnen Zählung erforderliche Zeit amortisiert sich über die gesamte Zeichenfolge, und sie ist für große Bitfolgen geringer als die Gesamtzeit bei Verfahren nach dem Stand der Technik.
Da die Durchführung kleinerer Besetzungszählungen weniger Zeit braucht als eine Volloperanden-Besetzungszählung, sind höhere CPU- Taktgeschwindigkeiten möglich, und dem Chip-Designer wird beim Layout des CPU-Chips eine größere Flexibilität zugestanden. Bei einer ersten Ausgestaltung der Erfindung werden Addierer verwendet, welche den Übertrag retten oder sichern, um die Besetz­ ungszählung mit einem zweiten Summationsoperanden zu kombinieren. Da die Übertragsicherungs-Addierer die Überträge nicht übertragen, sind sie wesentlich schneller als die bei Konstruktionen nach dem Stand der Technik verwendeten Volladdierer, und dieser Lösungsweg sieht eine Besetzungszählung und eine Additionsoperation in einem CPU-Zyklus vor.
Bei einer zweiten Ausführungsform wird eine Besetzungszählung für einen in zwei Registern gespeicherten Operanden berechnet. Jede Hälfte des Operanden wird in mehrere Teile aufgeteilt, wobei für jeden Teil eine Besetzungszählung berechnet wird. Die mehreren Besetzungszählungen werden solange nicht zu einer einzigen Zahl reduziert, bis die gesamte Zeichenfolge verarbeitet worden ist. Die zum Erzeugen der einzigen Zählung erforderliche Zeit amortisiert sich daher über die gesamte Zeichenfolge, und für eine große Bitfolge wird insgesamt weniger Zeit benötigt.
Im folgenden sind bevorzugte Ausführungsbeispiele der Erfindung mit Bezug auf die Zeichnungen näher erläutert. Es zeigen:
Fig. 1 ein Verfahren zum Berechnen einer 64 Bit-Besetz­ ungszählung nach dem Stand der Technik,
Fig. 2 ein Blockdiagramm eines Besetzungszählungs­ befehls nach der Erfindung,
Fig. 3 eine bevorzugte Ausführungsform der Erfindung,
Fig. 4 Schritt 1 einer Besetzungszählungs-Teilreduktion von einem Übertragsicherungs-Format in binäres Format,
Fig. 5A Schritt 2 des Reduktionsverfahrens,
Fig. 5B eine Ausschnittsdarstellung von Fig. 5A längs der Schnittlinie 5B,
Fig. 6 Schritt 3 des Reduktionsverfahrens,
Fig. 7 Schritt 4 des Reduktionsverfahrens,
Fig. 8 eine zweite bevorzugte Ausführungsform der Erfindung und
Fig. 9 ein detailliertes Blockdiagramm der in Fig. 8 gezeigten Ausführungsform.
Fig. 2 zeigt ein Blockdiagramm der vorliegenden Erfindung, welches den Datenstrom illustriert, der während eines Besetzungszählungs­ befehls auftritt. Die Bitfolge, für welche eine Besetzungszählung durchgeführt werden soll, wird im allgemeinen im Speicher in Bitblöcken gespeichert, deren Größe durch die Datenbreite des Computers bestimmt wird. Ein Bitblock wird aus dem Speicher gelesen und in einem CPU-Register 201 gespeichert. Ein Besetzungszählungs- und Akkumulations-Logikblock 203 berechnet die Besetzungszählung für den Operanden im Register 201 und addiert den in einem Akkumulationsregister 205 gespeicherten Wert zu der Zählung. Das Ergebnis der Addition wird in dem Akkumulationsre­ gister 205 gespeichert und überschreibt den vorherigen Wert. Die Besetzungszählung und die Aufrechnungsfunktion (Akkumulation) treten innerhalb eines CPU-Zyklus auf. Um die Besetzungszählungs- und Aufrechnungsfunktionen innerhalb eines einzigen CPU-Zyklus durchzuführen werden Übertragsicherungs-Addierer verwendet. Ein Übertragsicherungs-Addierer addiert zwei binäre Zahlen, gibt die Überträge jedoch nicht weiter. Statt dessen werden die Überträge als getrennter Teil des binären Wertes gespeichert. Wenn die zwei binären Folgen "11" und "01" beispielsweise von einem Volladdierer addiert würden, wäre das binäre Ergebnis "100". Wenn die selben binären Folgen von einem Übertragsicherungs-Addierer addiert würden, wäre das Ergebnis "01" (Übertragteil) und "10" (Summenteil) oder "0110" im Übertragsicherungs-Format, um das Übertragsicherungs-Format in ein echtes binäres Format zu konvertieren, wird die "01" um eine Position nach links verschoben und zu der "10" addiert. Beispielsweise:
Fig. 3 zeigt eine bevorzugte Ausführungsform der Erfindung mit weiteren Einzelheiten einer Implementierung des Besetzungs­ zählungsbefehls. Die ersten vier Stufen sind den in Verbindung mit Fig. 1 beschriebenen ersten vier Stufen in Funktion und Betrieb ähnlich. Ein 64-Bit-Operand ist in einem CPU-Register 301 gespeichert. Die Bits im Register 301 werden gepaart und von zweiunddreißig 1-Bit-Volladdierern addiert, welche durch die Bezugszeichen 303-307 dargestellt werden. Sechzehn 2-Bit-Addierer, Bezugszeichen 309-315, addieren Ausgangspaare von den 1-Bit- Addierern miteinander. Darauf addieren acht 3-Bit-Addierer 317-331 Ausgangspaare von den 2-Bit-Addierern. Vier 4-Bit-Volladdierer 333-339 addieren Ausgangspaare von den 3-Bit-Addierern. Der Ausgang des 4-Bit-Addierers 333 sieht eines von zwei Eingangssignalen für einen Übertragsicherungs-Addierer 341 vor. Ebenso sehen die Ausgänge von den 4-Bit-Addierern 335-339 eines von zwei Eingangssignalen für Übertragsicherungs-Addierer 343-347 vor. Jeder Übertragsicherungs-Addierer 341-347 addiert 16 Bit, und da die 4-Bit-Addierer 333-339 nur Ausgangssignale mit einer maximalen Länge von 5 Bit erzeugen können, werden die elf höchstwertigen Bits auf Null festgesetzt.
Ein zweites Eingangssignal für die Übertragsicherungs-Addierer 341-347 wird von einem Akkumulationsregister 349 vorgesehen. Das Akkumulationsregister hat eine Breite von 64 Bit und wird wie vier 16-Bit-Blöcke 351-357 behandelt, wobei der Wert in jedem Block im Übertragsicherungs-Format gespeichert ist. Die höchstwertigen 8 Bits in einem Block stellen daher die Übertraginformation dar, und die niederwertigsten 8 Bit stellen die Summeninformation dar. Das Ausgangssignal vom Übertragsicherungs-Addierer 341, aus der Addition der 5 Bits vom Addierer 333 und der 16 Bits vom Akkumulationsregisterblock 351, wird im Akkumulationsregister 349 im Block 351 im Übertragsicherungs-Format gespeichert. Durch diesen Vorgang wird eine automatische Addition im Akk­ umulationsregisterblock 351 der vorherigen Teilbesetzungszählung aus Block 351 und der Teilbesetzungszählung der höchstwertigen 16 Bits des Operanden im Register 301 vorgesehen. Die anderen Übertragsicherungs-Addierer 343-347 arbeiten auf dieselbe Weise, wobei sich als Ergebnis vier aktualisierte Teilbesetzungszählungen ergeben, die jedes Mal, wenn der Besetzungszählungsbefehl durchgeführt wird, in dem Akkumulationsregister 349 gespeichert werden.
In der Praxis würde das Akkumulationsregister 349 gelöscht, bevor der erste Besetzungszählungsbefehl durchgeführt wird. Jeder darauffolgende Besetzungszählungsbefehl würde die vier neuen Teilbesetzungszählungen im Übertragsicherungs-Format zu dem Akkumulationsregister addieren. Wie oft der Besetzungszäh­ lungsbefehl durchgeführt werden kann, bevor ein Überlauf in einem oder mehreren der Teilzählungen auftreten kann, hängt von der Größe des Akkumulationsregisters und der Anzahl von Bits ab, die den Überträgen und Summen zugeordnet sind. Für ein System, welches Teilbesetzungszählungen für Felder durchführt, die jeweils eine Größe von 2n Bit haben, und bei denen das Übertragsicherungs- Format aus "m" Übertragbits und "m" Summenbits besteht, ist die maximale Anzahl von Iterationsschritten gegeben durch:
imax = 2(m-n) + m - n - 1
So werden beispielsweise bei der oben beschriebenen bevorzugten Ausführungsform Besetzungszählungen über 16-Bit-Felder vom Register 301 durchgeführt, d. h. n = 4 (24 = 16). Das oben beschriebene Übertragsicherungs-Format hat 8 Übertragbits und 8 Summenbits, d. h. m = 8. Wie oft der Besetzungszählungsbefehl also ohne das Risiko eines Überlaufs durchgeführt werden kann, ergibt sich daher zu:
imax = 2(8-4) + 8 - 4 - 1 = 19
Nach 19 Iterationen müssen die vier Übertragsicherungswerte im Akkumulationsregister weiter reduziert werden. Obwohl es viele Arten gibt, die erforderliche Reduktion durchzuführen, ist im folgenden ein bevorzugtes Verfahren beschrieben. Andere Verfahren können jedoch gleich gut funktionieren, und es könnte auch ein spezieller CPU-Befehl implementiert werden, um die Reduktion durchzuführen.
Fig. 4 zeigt Schritt 1 zum Reduzieren der vier Teilbesetzungs­ zählungen im Akkumulationsregister auf vier binäre Werte. Um die Überträge abzustreifen und die Summen zu belassen, wird der Wert im Akkumulationsregister 349 mit einer Maske UND-verknüpft, welche in den Positionen nur Nullen hat ("00" hexadezimal), welche den Positionen der Überträge im Register 349 entsprechen, und an allen anderen Stellen "1"en hat ("FF" hexadezimal). Als ein Ergebnis des UND-Befehls wird die Übertraginformation durch Nullen im Ergebnisregister 401 ersetzt, während die Summeninformation nicht berührt wird und die Summen-Information im Register 349 wiederspiegelt.
Fig. 5 zeigt Schritt 2 des Reduktionsverfahrens. Hier wird der Inhalt des Akkumulationsregisters 349 im Register 501 gespeichert, jedoch um 7 Bits nach rechts verschoben. Die 7 höchstwertigen Bits (Bits 56-63) des Registers 501 sind Nullen, und die Bitposition 0 des Registers 501 ist gleich der Bitposition 7 des Registers 349. Dieser Schritt dient dazu, die Übertraginformation zu versetzen und zu der Summeninformation auszurichten, wie es die nachfolgenden Schritte erfordern.
Fig. 5B zeigt eine detaillierte Ansicht von Fig. 5A längs der Schnittlinie 5B. Die Darstellung zeigt die 20 niederwertigsten Bits (Bits 19-0) des Operanden im Register 349 vor der Verschiebung um 7 Bits nach rechts. Nachdem die Verschiebung durchgeführt ist, enthält das Register 501 das Ergebnis, wobei die niederwertigsten Bits (Bits 19-0) des Registers 501 nun die Daten enthalten, welche im Register 349 in den Bits 26-7 gespeichert waren.
Fig. 6 zeigt Schritt 3 des Reduktionsverfahrens. Der Inhalt des Registers 501 wird mit einer Maske UND-verknüpft, welche im Register 602 gespeichert ist, um die Summeninformation ab­ zustreifen oder zu isolieren. Die Maske hat bei solchen Bitpo­ sitionen "1"en bei denen Information vom Register 501 bewahrt werden soll, und Nullen bei allen anderen Bitpositionen. Ein Register 603 enthält das Ergebnis des UND-Befehls, und alle Information außer der Übertraginformation wird durch Nullen ersetzt.
Fig. 7 zeigt Schritt 4 des Reduktionsverfahrens. Der Inhalt des Registers 603 wird zum Inhalt des Registers 401 "addiert", und als Ergebnis ergeben sich vier Teilbesetzungszählungen 703-709 von jeweils 9 Bit Länge im normalen binären Format. Diese Teilzählungen 703-709 werden dann entsprechend der Anforderungen der Besetzungszählung einer langen Bitfolge gespeichert und aufgerechnet. Schließlich können auch die 16-Bit-Blöcke, in welchen die Teilbesetzungszählungen gespeichert sind, überlaufen, und eine weitere Reduktion wird durchzuführen sein. Bei dem oben beschriebenen Ausführungsbeispiel können 215 Iterationen durchgeführt werden, bevor ein Überlauf möglich ist. Diese Zahl ergibt sich wie folgt:
N = 22m/(größtes Reduktionsergebnis) = 22m/2n[2(m-n) + m - n - 1],
wobei das Ergebnis auf die nächste ganze Zahl abgerundet wird. Im obigen Beispiel ist also N = 22.8/304 = 215.
Bei einem gewissen Punkt muß eine vollständige Reduktion durchgeführt werden, um die Teilbesetzungszählungen auf ein einziges Ergebnis in Form einer binären Zahl zurückzuführen. Diese Endreduktion wird durch Verschiebung und Maskierung durchgeführt, wie es dem Fachmann bekannt ist. Natürlich erfordern die verschiedenen Reduktionen einen gewissen (zeitlichen) Aufwand im Besetzungszählungsverfahren. Da die Reduktionen jedoch aufgeschoben werden, bis sie notwendig sind, kann der Aufwand über eine große Anzahl von Iterationen amortisiert oder "abgeschrieben" werden, so daß der für die Besetzungszählung großer Bitfolgen erforderliche Aufwand, d. h. die erforderliche Systemverwal­ tungszeit, wirksam reduziert wird. Für Bitfolgen von mehr als 640 Bits ist die neue Vorrichtung und das Verfahren schneller als Vorrichtungen und Verfahren nach dem Stand der Technik bei einer gegebenen Technologie und gegebenen Konstruktionsregeln.
Beim oben beschriebenen bevorzugten Ausführungsbeispiel wird angenommen, daß eine vollständig reduzierte Besetzungszählung und -aufrechnung nicht innerhalb eines einzigen CPU-Zyklus durchgeführt werden kann, was normalerweise zutrifft. Da jede CPU- Konstruktion unterschiedliche Beschränkungen aufweist, kann die effizienteste Implementierung der Besetzungszählung für jede CPU- Konstruktion anders sein, und sie kann von dem beschriebenen Ausführungsbeispiel abweichen. Für einen gegebenen CPU-Aufbau wird jedoch die effizienteste Ausführung der Besetzungszählung und - aufrechnung die Besetzungszählungsreduktion maximieren, während immer noch genügend Zeit bleibt, damit die Aufrechnungsfunktion innerhalb eines einzigen CPU-Zyklus stattfinden kann. Während bei dem beschriebenen Ausführungsbeispiel vier Besetzungszählungen be­ rechnet wurden, die Ausgänge der Addierer 333-339, wäre es effi­ zienter, wenn die CPU-Zykluszeit und die spezielle Technologie es erlauben, die vier Ausgangssignale auf zwei Ausgangssignale zu reduzieren, bevor die Aufrechnungsfunktion durchgeführt wird. Das liegt daran, daß der Besetzungszählungsbefehl viel öfter durch­ geführt werden könnte, bis ein Überlauf einer oder mehrerer Teilzählungen auftreten könnte.
Eine zweite bevorzugte Ausführungsform der Erfindung ist in Fig. 8 gezeigt. In dieser Darstellung werden vier Besetzungszählungen für einen in zwei Registern gespeicherten Operanden berechnet. Der im ersten Register 801 gespeicherte Teil des Operanden wird in zwei Teile 803 und 805 aufgeteilt. Für beide Teile (803 und 805) werden getrennte Besetzungszählungen von einer Besetzungszählungsschal­ tung 807 berechnet, wobei das Ergebnis in einer Speicherstelle 809 gespeichert wird, die im allgemeinen ein Register ist. Die Ergebnisse werden an getrennten Stellen 811 bzw. 813 innerhalb der Speicherstelle 809 gespeichert. Die Funktion (Fn), welche die Besetzungszählungsschaltung 807 ausführt, besteht im Zählen der Anzahl von "1"en in dem Operanden. Anstatt "1"en zu zählen, könnte die Schaltung selbstverständlich auch "0"en zählen.
Auf dieselbe Weise wird der im zweiten Register 815 gespeicherte Teil des Operanden in zwei Teile 817 und 819 aufgeteilt. Für beide Teile werden die Besetzungszählungen von der Schaltung 807 berechnet, und die Ergebnisse werden bei verschiedenen Stellen 821 bzw. 823 innerhalb der Speicherstelle 809 gespeichert.
Alle vier Besetzungszählungen 811, 813, 821 und 823 müssen mit den mit jeder neuen Iteration berechneten Besetzungszählungen aufgerechnet werden. Dieses Verfahren zum Berechnen von Besetzungszählungen hat jedoch den Vorteil, daß es einen Operanden mit einer Länge von 128 Bit verwendet, so daß die Anzahl der Iterationen, welche zum Berechnen einer Besetzungszählung über eine große Zeichenfolge erforderlich sind, gegenüber dem Stand der Technik reduziert wird.
Fig. 9 zeigt eine detailliertere Darstellung der Erfindung, die im Zusammenhang mit Fig. 8 beschrieben wurde. Die im ersten Register 801 gespeicherten 64 Bits des Operanden werden in einen Volladdierer-Baum 901 eingegeben. Dieser Addiererbaum ist mit den Volladdierern 303-339 von Fig. 3 identisch. Die Addierer erzeugen vier Besetzungszählungen mit jeweils einer Größe von fünf Bit für die 64 Bits, wie oben beschrieben. Zwei der 5-Bit- Besetzungszählungen, 903 und 905, werden in einen Übertragsicherungs-Addierer 907 eingegeben, und das Ausgangssignal des Übertragsicherungs-Addierers 907 wird in einem Abschnitt 811 innerhalb der Speicherstelle 809 gespeichert. Die anderen beiden 5-Bit-Besetzungszählungen, 909 und 911, von dem Addiererbaum 901 werden in einen zweiten Übertragsicherungs-Addierer 913 eingegeben, und das Ausgangssignal des Übertragsicherungs- Addierers 913 wird im Abschnitt 813 innerhalb der Speicherstelle 809 gespeichert.
Auf dieselbe Weise werden die 64 Bits vom zweiten Register 815 von dem Addiererbaum 915 addiert, welcher 5-Bit lange Besetzungs­ zählungen 917, 919, 921 und 923 erzeugt. Die vier Besetzungs­ zählungen werden in zwei Übertragsicherungs-Addierer 925 und 927 eingegeben, wobei die Ausgangssignale von den Übertragsicherungs- Addierern in Abschnitten 821 bzw. 823 innerhalb der Speicherstelle 809 gespeichert werden. Das Endergebnis dieses Verfahrens umfaßt vier Besetzungszählungen, welche im Übertragsicherungs-Format in der Speicherstelle 809 gespeichert sind.
Die vier Übertragsicherungs-Addierer 907, 913, 925 und 927 werden verwendet, um im Vergleich zum Einsatz von vier Volladdierern Zeit zu sparen. Obwohl hier Addiererbäume gezeigt sind, welche 5-Bit lange Besetzungszählungen erzeugen, könnte ein bestimmter CPU- Aufbau eine Modifikation dieses Verfahrens erforderlich machen. Wenn beispielsweise zusätzliche Zeit zur Verfügung steht, könnte eine zusätzliche Volladdiererstufe zu den Addiererbäumen hinzu­ gefügt werden, so daß die Addiererbäume zwei Besetzungszählungen erzeugen. In diesem Fall würden nur zwei Übertragsicherungs- Addierer gebraucht. Wenn dagegen nicht ausreichend Zeit für einen vierstufigen Addiererbaum zur Verfügung steht, würde ein drei­ stufiger Addiererbaum realisiert werden, wobei jeder Baum acht Besetzungszählungen erzeugen würde. In diesem Fall würden acht Übertragsicherungs-Addierer gebraucht werden, und die Speicher­ stelle 809 würde acht Besetzungszählungen im Übertragsicherungs- Format enthalten.
Während eine Besetzungszählung im Stand der Technik als ein Atombefehl behandelt wurde, d. h., das Ausgangssignal des Befehles war im allgemeinen eine binäre Zahl, die positionsabhängig mit jedem Nachbarbit gewichtet wurde, welches einen Wert darstellt, der 2n größer oder kleiner als das Nachbarbit ist, bricht die vorliegende Erfindung den Befehl in Teile auf. Das Ausgangssignal des Besetzungszählungsbefehls gemäß der vorliegenden Erfindung umfaßt mehrfache Besetzungszählungen, wobei ein Bit in dem Ergebnis nicht notwendigerweise einen Wert darstellt, der 2n größer oder kleiner als sein Nachbarbit ist. Dieses einzigartige und neue Verfahren und die Vorrichtung nach der Erfindung ermöglichen, daß die Besetzungszählung einer großen Bitfolge schneller berechnet wird, als mit Verfahren und Vorrichtung nach dem Stand der Technik.
Die beschriebenen Ausführungsformen dienen lediglich als Beispiel, und andere Ausführungsformen der Erfindung im Rahmen der Offenbarung werden für den Fachmann erkennbar sein.

Claims (5)

1. Vorrichtung zum Berechnen einer Bit-Besetzungszählung, mit einem Operandenspeicherregister (301), welches eine Bitfolge speichert, für die eine Besetzungszählung bestimmt werden soll,
mehreren Volladdierern (303-307) mit jeweils einem Ausgang, wobei jeder Volladdierer eine eindeutige Gruppe von Bits von dem Speicherregister (301) addiert,
mehreren Übertragsicherungs-Addierern (341-347) mit jeweils einem Ausgang, wobei jeder Übertragsicherungs-Addierer eine bestimmte Gruppe von Bits von einem Summierungsregister (351-357) zu einem zugeordneten Ausgang der mehreren Vollad­ diererausgänge (333-339) addiert, und
bei der jedes der Ausgangssignale der Übertragsicherungs-Ad­ dierer in einer entsprechenden Anzahl von Bits (351-357) in ei­ nem Ergebnisregister (349) speicherbar ist,
wobei das Ergebnisregister (349) die Summe einer Besetzungs­ zählung einer Bit-Untermenge von dem Operandenregister (301) und eine Bitgruppe von dem Summierungsregister (351-357) im Übertragsicherungs-Format enthält.
2. Vorrichtung nach Anspruch 1, bei der die mehreren Volladdie­ rer in hierarchischer Ordnung organisiert sind, so daß eine erste Stufe von Volladdierern (303-307) Bits von dem Operan­ denregister (301) addiert, und in einer zweiten Stufe von Volladdierern (309-315) jeder Volladdierer der zweiten Stufe die Ausgänge von zwei Volladdierern der ersten Stufe addiert, so daß jeder Ausgang von den Addierern der ersten Stufe von nur einem der Addierer in der zweiten Stufe von Volladdierern addiert wird.
3. Vorrichtung nach Anspruch 2, bei der die Anzahl der Vollad­ dierer in der ersten Stufe von Volladdierern (303-307) halb so groß ist wie die Anzahl der Bits (0-63) im Operandenregi­ ster (301) und bei der die Anzahl der Volladdierer in der zweiten Stufe von Volladdierern (309-315) ein Viertel der Anzahl der Bits im Operandenregister (301) ist.
4. Vorrichtung nach Anspruch 1, bei der jeder Übertrag­ sicherungs-Addierer (341-347) dieselbe Anzahl von Bits ad­ diert wie jeder andere Übertragsicherungs-Addierer.
5. Vorrichtung nach Anspruch 1, bei der ein einziges Register (809; 349) sowohl das Summierungsregister als auch das Ergeb­ nisregister ist.
DE4403917A 1993-02-19 1994-02-08 Vorrichtung zum Berechnen einer Bit-Besetzungszählung Expired - Fee Related DE4403917C2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/019,720 US5717616A (en) 1993-02-19 1993-02-19 Computer hardware instruction and method for computing population counts

Publications (2)

Publication Number Publication Date
DE4403917A1 DE4403917A1 (de) 1994-08-25
DE4403917C2 true DE4403917C2 (de) 1999-06-02

Family

ID=21794669

Family Applications (1)

Application Number Title Priority Date Filing Date
DE4403917A Expired - Fee Related DE4403917C2 (de) 1993-02-19 1994-02-08 Vorrichtung zum Berechnen einer Bit-Besetzungszählung

Country Status (4)

Country Link
US (1) US5717616A (de)
JP (1) JP3529828B2 (de)
KR (1) KR100289513B1 (de)
DE (1) DE4403917C2 (de)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102707922B (zh) * 1995-08-31 2015-10-07 英特尔公司 控制移位分组数据的位校正的装置
US6516330B1 (en) * 1999-12-01 2003-02-04 International Business Machines Corporation Counting set bits in data words
US6664967B1 (en) * 2000-05-18 2003-12-16 International Business Machines Corporation Apparatus to detect setting of bits in a data structure
US6795839B2 (en) * 2000-11-30 2004-09-21 Stmicroelectronics, Inc. Method and device for computing the number of bits set to one in an arbitrary length word
US6754685B2 (en) * 2000-12-21 2004-06-22 Sun Microsystems, Inc. Dynamic popcount/shift circuit
KR101007259B1 (ko) * 2006-01-19 2011-01-13 후지쯔 가부시끼가이샤 패리티 생성 회로, 계수 회로 및 계수 방법
US7958173B2 (en) * 2007-07-13 2011-06-07 Freescale Semiconductor, Inc. Population count approximation circuit and method thereof
US7931190B2 (en) * 2007-07-13 2011-04-26 Freescale Semiconductor, Inc. Circuit and method for correlated inputs to a population count circuit
US8661072B2 (en) * 2008-08-19 2014-02-25 International Business Machines Corporation Shared parallel adder tree for executing multiple different population count operations
US8560586B2 (en) * 2010-03-29 2013-10-15 Meltin Bell Linear bit counting implementations
RU2451987C1 (ru) * 2011-04-25 2012-05-27 Государственное образовательное учреждение высшего профессионального образования "Саратовский государственный университет им. Н.Г. Чернышевского" Устройство для расчета порядковых номеров битов с высоким логическим уровнем в строке данных
RU2451988C1 (ru) * 2011-05-05 2012-05-27 Государственное образовательное учреждение высшего профессионального образования "Саратовский государственный университет им. Н.Г. Чернышевского" Быстродействующее устройство для расчета порядковых номеров битов с высоким логическим уровнем в строке данных
US9513907B2 (en) * 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9495155B2 (en) 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9361105B2 (en) * 2013-09-20 2016-06-07 Nvidia Corporation Technique for counting values in a register
US10146537B2 (en) 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US10171105B2 (en) * 2016-08-25 2019-01-01 International Business Machines Corporation Carry-less population count
US10050641B1 (en) 2017-03-23 2018-08-14 Hewlett Packard Enterprise Development Lp List manipulation circuits
EP3499362B1 (de) * 2017-12-13 2022-11-30 ARM Limited Vektor add-with-carry-anweisung
JP2023030745A (ja) * 2021-08-24 2023-03-08 富士通株式会社 計算機および計算方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0209014A2 (de) * 1985-07-12 1987-01-21 Siemens Aktiengesellschaft Anordnung mit einem sättigbaren Carry-Save-Addierer

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4371951A (en) * 1980-09-29 1983-02-01 Control Data Corporation Apparatus for converting serial input sparse vector format to parallel unpacked format for input to tandem arithmetic logic units
US4766416A (en) * 1987-07-16 1988-08-23 General Electric Company Circuit for generating the square of a function without multipliers
US4989168A (en) * 1987-11-30 1991-01-29 Fujitsu Limited Multiplying unit in a computer system, capable of population counting
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
US5455873A (en) * 1990-12-03 1995-10-03 Information International, Inc. Facsimile dynamic thresholding apparatus and method of use thereof

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0209014A2 (de) * 1985-07-12 1987-01-21 Siemens Aktiengesellschaft Anordnung mit einem sättigbaren Carry-Save-Addierer

Also Published As

Publication number Publication date
KR100289513B1 (ko) 2001-05-02
JP3529828B2 (ja) 2004-05-24
JPH06250823A (ja) 1994-09-09
DE4403917A1 (de) 1994-08-25
KR940020501A (ko) 1994-09-16
US5717616A (en) 1998-02-10

Similar Documents

Publication Publication Date Title
DE4403917C2 (de) Vorrichtung zum Berechnen einer Bit-Besetzungszählung
DE3700991C2 (de) Digitaler Übertragsvorgriffsaddierer
DE69632978T2 (de) Multi-Operand-Addierer, der Parallelzähler benutzt
DE3424962C2 (de)
DE69435034T2 (de) Verfahren ind vorrichtung zur durchfuehrung einer schnellen hadamard transform
DE19758079A1 (de) Verfahren und Vorrichtung zur Galoisfeld-Multiplikation
DE2712224A1 (de) Datenverarbeitungsanlage
DE3306084A1 (de) Rechnerarchitektur zur gleitkomma -addition
DE1549477B1 (de) Einrichtung zur schnellen akkumulation einer anzahl mehr stelliger binaerer operanden
DE1914560C3 (de) Schaltungsanordnung zur Verschiebung eines Datenwortes innerhalb eines Rechenelementen-Feldes
DE19983870B4 (de) Berechnung impliziter Datentypbits für Simd-Operationen
DE2421130C2 (de)
DE1197650B (de) Parallel-Addierer
DE3701599C2 (de)
DE2758130C2 (de) Binärer und dezimaler Hochgeschwindigkeitsaddierer
DE4345029C2 (de) Schaltkreis für diskrete Kosinustransformation
DE4430195B4 (de) Verfahren zur Auswertung von Booleschen Ausdrücken
DE4101004A1 (de) Paralleler multiplizierer mit sprungfeld und modifiziertem wallac-baum
DE1549508C3 (de) Anordnung zur Übertragsberechnung mit kurzer Signallaufzeit
DE2405858A1 (de) Normalisierendes verschiebezaehlernetzwerk
DE3434777C2 (de)
DE3440680C2 (de)
DE3302885C2 (de)
DE19644688B4 (de) Schaltungsanordnung einer digitalen Multiplizierer-Baugruppe, zur Verarbeitung von Binärzahlen sowie Elementen aus GF(2m)
EP1248186A2 (de) Carry-ripple Addierer

Legal Events

Date Code Title Description
8110 Request for examination paragraph 44
D2 Grant after examination
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE),

8327 Change in the person/name/address of the patent owner

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

8339 Ceased/non-payment of the annual fee