DE4403917C2 - Vorrichtung zum Berechnen einer Bit-Besetzungszählung - Google Patents
Vorrichtung zum Berechnen einer Bit-BesetzungszählungInfo
- 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
Links
- 241001442055 Vipera berus Species 0.000 description 66
- 238000000034 method Methods 0.000 description 20
- 238000009825 accumulation Methods 0.000 description 17
- 230000009467 reduction Effects 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000011946 reduction process Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods 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/607—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit 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.
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.
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)
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)
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)
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 |
-
1993
- 1993-02-19 US US08/019,720 patent/US5717616A/en not_active Expired - Lifetime
-
1994
- 1994-02-08 DE DE4403917A patent/DE4403917C2/de not_active Expired - Fee Related
- 1994-02-17 JP JP04319794A patent/JP3529828B2/ja not_active Expired - Fee Related
- 1994-02-18 KR KR1019940002880A patent/KR100289513B1/ko not_active IP Right Cessation
Patent Citations (1)
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 |