DE112008002158T5 - Verfahren und System zur Multiplikation großer Zahlen - Google Patents

Verfahren und System zur Multiplikation großer Zahlen Download PDF

Info

Publication number
DE112008002158T5
DE112008002158T5 DE112008002158T DE112008002158T DE112008002158T5 DE 112008002158 T5 DE112008002158 T5 DE 112008002158T5 DE 112008002158 T DE112008002158 T DE 112008002158T DE 112008002158 T DE112008002158 T DE 112008002158T DE 112008002158 T5 DE112008002158 T5 DE 112008002158T5
Authority
DE
Germany
Prior art keywords
column
word
rows
pair
multiplication
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.)
Granted
Application number
DE112008002158T
Other languages
English (en)
Other versions
DE112008002158B4 (de
Inventor
Vincent Dupaquis
Russell Hobson
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.)
Rambus Inc
Original Assignee
Atmel Corp
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 Atmel Corp filed Critical Atmel Corp
Publication of DE112008002158T5 publication Critical patent/DE112008002158T5/de
Application granted granted Critical
Publication of DE112008002158B4 publication Critical patent/DE112008002158B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/525Multiplying only in serial-serial fashion, i.e. both operands being entered serially

Landscapes

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

Abstract

Computerimplementiertes Verfahren zum Betreiben einer Multiplikationsschaltung zur Berechnung des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als eine der Multiplikationsschaltung zugeordnete Breite ist, wobei jeder der Operanden einen oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist, und wobei die Multiplikationsschaltung eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen ausführt, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten umfasst, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist und die Multiplikationsschaltung Zugriff auf einen Speicher hat, wobei das Verfahren umfasst:
Durchführen von Multiplikationsoperationen jeweils an einem Paar von Reihen, wobei für jedes Paar von Reihen ein Paar...

Description

  • Technisches Gebiet
  • Die Erfindung betrifft die Informationsverarbeitung.
  • Hintergrund
  • Herkömmliche Multiplikationshardware, beispielsweise in einer Festkörpervorrichtung, kann Größenbeschränkungen mit sich bringen, so beispielsweise eine spezifizierte Anzahl von Bits, die gleichzeitig von der Hardware verarbeitet werden können. Typischerweise ist die Multiplikationshardware derart definiert, dass sie ein Paar von Einzelwortoperandeneingaben und eine Zweiwortergebnisausgabe aufweist. Zum Ausführen von Multiplikationsakkumulationsoperationen kann die Multipliziererausgabe mit einem Akkumulator verbunden sein, der typischerweise wenigstens zwei Worte plus ein Bit breit ist. Das zusätzliche Bit kann Teil des Ergebnisses oder auch einfach nur als Trägerinformation vorhanden sein, die entweder einen Overflow für den Fall der Addition oder einen Underflow für den Fall einer Subtraktion in dem Akkumulationsteil der Operation angibt.
  • In der Kryptographie und bei anderen Anwendungen besteht Bedarf an der Multiplikation sehr großer ganzer Zahlen, darunter einer großen Anzahl von Worten. Um diese Operationen unter Verwendung von Operanden, die viel breiter als die Multiplikationshardware sind, durchzuführen, können die Operanden in 1-wortbreite Segmente unterteilt und der Hardware in einer spezifizierten Sequenz zugeführt werden. Die Segmente werden derart verarbeitet, und die Zwischenergebnisse werden derart akkumuliert, dass das Endprodukt als Summe von Kreuzprodukten verschiedener Gewichtungen berechnet wird. Die wortbreiten Operandensegmente wie auch die Teilergebnisse werden in einem Speicher gespeichert, auf den durch einen Operationsequenzierer der Multipliziererhardware zugegriffen wird. So kann beispielsweise eine Sequenz ein erstes Operandensegment konstant halten, während die Operandensegmente Wort für Wort in den Multiplizierer abgetastet werden, woraufhin der erste Operrand zu dem nächsten wortbreiten Segment inkrementiert und die Abtastung des zweiten Operanden wiederholt wird.
  • Zusammenfassung
  • Die Erfindung betrifft die Multiplikation großer Zahlen. Im Allgemeinen stellt die Erfindung gemäß einem Aspekt ein computerimplementiertes Verfahren sowie ein solches System und ein Computerprogrammerzeugnis zum Betreiben einer Multiplikationsschaltung zur Berechnung des Produktes aus zwei Operanden (A und B) bereit, von denen wenigstens einer breiter als eine Breite ist, die der Multiplikationsschaltung zugeordnet ist. Jeder der Operanden beinhaltet einen oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi), die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist. Die Multiplikationsschaltung führt eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen aus, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten beinhaltet, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist. Die Multiplikationsschaltung hat Zugriff auf einen Speicher. Multiplikationsoperationen werden jeweils an einem Paar von Reihen durchgeführt. Für jedes Paar von Reihen wird ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus dem Speicher gelesen, und es werden wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede von k + 2 Spalten durchgeführt, sodass für jede Spalte in der Matrix ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich ist. Es sind zudem andere Implementierungen offenbart.
  • Implementierungen der Erfindung können einen oder mehrere der nachfolgenden Vorteile mit sich bringen. Die beschriebene Multiplikationsschaltung kann jeweils ein Paar von Reihen berechnen, während sie nur drei Speicherzugriffe (zweimal lesen und einmal schreiben) pro Spalte (über die anfänglichen Lesevorgänge der wortbreiten Operandensegmente entsprechend jeder Reihe hinausgehend) benötigt, wodurch es möglich wird, eine effizientere Speicherschnittstelle als einzelner Dualport-RAM oder als zwei Einzelport-RAMs auszugestalten. Ein weiterer Vorteil besteht darin, dass die Paare von Reihen aus der Sequenz berechnet werden können. Das zufallsbasierte Erstellen der Reihenfolge der Reihenberechnungen kann einen verbesserten Schutz von schutzwürdigen Daten liefern, die bei den Berechnungen verwendet werden. Der Energieverbrauch durch die Multiplikationsschaltung kann niedriger als bei anderen herkömmlichen Schaltungen sein, was von weniger Speicherzugriffen herrührt.
  • Details eines oder mehrerer Ausführungsbeispiele der Erfindung sind in der nachfolgenden Zeichnung und der nachstehenden Beschreibung niedergelegt. Weitere Merkmale, Aufgaben und Vorteile der Erfindung erschließen sich aus der Beschreibung und Zeichnung sowie aus den Ansprüchen.
  • Kurzbeschreibung der Zeichnung
  • 1 ist ein Blockdiagramm, das ein Beispiel einer Multiplikationsschaltung zeigt.
  • 2 ist eine schematische Darstellung einer Multiplikationsmatrix eines ersten Beispieles.
  • 3 ist ein Flussdiagramm, das einen Beispielsprozess zur Berechnung eines Produktes aus zwei Operanden entsprechend der Multiplikationsmatrix von 2 zeigt.
  • 4 ist eine schematische Darstellung einer Multiplikationsmatrix eines zweiten Beispieles.
  • Gleiche Bezugszeichen in verschiedenen Figuren bezeichnen gleiche Elemente.
  • Detailbeschreibung
  • Bestimmte Anwendungen erfordern das wechselseitige Multiplizieren von Zahlen, die größer als eine Maschinengröße der Hardware sind, die zur Berechnung des Ergebnisses verwendet wird. Bei einem demonstrativen Beispiel kann ein Mikroprozessor mit einer Maschinengröße von 32 Bit erforderlich sein, um das Ergebnis einer Multiplikation mit 128-Bit-Eingabeoperanden zu berechnen. Da die Eingabedaten größer als die Maschinengröße des Mikroprozessors sind, können die Eingabedaten in einem RAM oder einem anderen ähnlichen temporären Ablagespeicher gespeichert werden, oder sie können sich in Caches oder Registern befinden, die innerhalb des Mikroprozessors angeordnet sind. Sind zwei 128-Bit-Eingabeoperanden A und B, die in einem RAM gespeichert sind, gegeben und sollen diese von einem 32-Bit-Mikroprozessor berechnet werden, wobei
    A = 0x11111111222222223333333344444444; und
    B = 0x55555555666666667777777788888888
    (mit x0 zur Bezeichnung einer hexadezimalen Zahl)
    gilt, so kann die Berechnung folgendermaßen in Worte in Maschinengröße, in diesem Beispiel in 32-Bit-wortbreite Operandensegmente, aufgeteilt werden: A = A0 + A1·232 + A2·264 + A3·296; und B = B0 + B1·232 + B2·264 + B3·296 wobei:
    A0 = 0x44444444; A1 = 0x33333333; A2 = 0x22222222; A3 = 0x11111111; und
    B0 = 0x88888888; B1 = 0x77777777; B2 = 0x66666666; B3 = 0x55555555
  • Die Berechnung macht bei jedem 32-Bit-wortbreiten Operandensegment des ersten Operanden A weiter, der mit jedem der wortbreiten Operandensegmente in dem anderen, zweiten Operanden B multipliziert wird. Nachfolgend werden eine Multiplikationsschaltung und ein Prozess zum Betreiben der Multiplikationsschaltung beschrieben, mit dem die Anzahl von Lese- und Schreibzugriffen auf einen Speicher, der die Operanden A und B beinhaltet, verringert werden kann, wodurch eine effizientere Speicherschnittstelle bereitgestellt wird.
  • Beispielsystem für die Multiplikationsschaltung
  • In 1 ist ein System 100 gezeigt, das eine Multiplikationsschaltung 102 beinhaltet. Das System 100 kann ein Produkt aus zwei Operanden berechnen, die breiter als die Multiplikationsschaltung 102 sein können. So kann die Multiplikationsschaltung 102 beispielsweise unter Verwendung einer 32-Bit-breiten Hardware implementiert sein, während die Operanden gleich 64 Bit, 128 Bit, 1024 Bit oder gleich einer beliebigen anderen Anzahl von Bits von mehr als 32 Bit sein können. Das System 100 ist dafür ausgelegt, das Produkt der Operanden effizient durch Verringern der Anzahl von Speicheroperationen zu berechnen, während eine verringerte Größe der Hardware realisiert ist.
  • Die Multiplikationsschaltung 102 beinhaltet einen Cache 104, einen Multiplizierer 106 und einen Akkumulator 108. Der Multiplizierer 106 beinhaltet Eingaben aus dem Cache 104. Die Eingaben können beispielsweise wortbreite Operandensegmente der Multiplikationsoperanden sein. Bei einigen Implementierungen kann der Multiplizierer 106 zwei wortbreite Operandensegmente zur Bildung eines wenigstens 2-wortbreiten Zwischenproduktes multiplizieren. Der Multiplizierer 106 kann beispielsweise zwei 32-Bit- Operandensegmente multiplizieren, um wenigstens ein 64-Bit-Zwischenprodukt zu bilden. Ein Zwischenprodukt, das sich aus der wortbreiten Operandensegmentpaarmultiplikationsoperationen ergibt, wird von dem Akkumulator 108 empfangen.
  • Der Akkumulator 108 empfängt Eingaben von dem Multiplizierer 106 und dem Cache 104. So kann der Akkumulator 108 beispielsweise das Zwischenprodukt aus dem Multiplizierer 106 und ein Zwischenspaltenergebnis aus dem Cache 104 empfangen. Der Akkumulator beinhaltet ein Akkumulationsregister 110. Bei bestimmten Implementierungen kann das Akkumulationsregister 110 ein temporärer Datenspeicher von wenigstens 2n + 2 Bit (wobei n die Anzahl von Bits in einem Wort ist) sein. Bei anderen Implementierungen kann das Akkumulationsregister 110 in Größen implementiert sein, die breiter als 2n + 2 Bit sind.
  • Bei einigen Implementierungen kann der Akkumulator 108 zur Akkumulation der Eingaben in dem Akkumulationsregister 110 ausgelegt sein. So kann der Akkumulator 108 beispielsweise das Zwischenprodukt (aus dem Multiplizierer 106) zu einem Wert addieren, der in dem Akkumulationsregister 110 gespeichert ist. Der Akkumulator 108 kann sodann das Akkumulationsergebnis in dem Akkumulationsregister 110 speichern. Der Akkumulator 108 kann auch dafür ausgelegt sein, einen Wert zurückzusetzen, der in dem Akkumulationsregister 110 gespeichert ist. So kann der Akkumulator 108 beispielsweise das Akkumulationsregister 110 auf 0 zurücksetzen. Bei einem weiteren Beispiel kann der Akkumulator 108 das Akkumulationsregister 110 auf ein oberes Wort des akkumulierten Wertes zurücksetzen.
  • Der Akkumulator 108 ist mit einem Speicherelement verbunden, so beispielsweise einem Speicher mit wahlfreiem Zugriff 112 (RAM Random Access Memory). Bei einigen Implementierungen kann der Akkumulator 108 1-wortbreite Daten an den RAM 112 übertragen. Bei einer Beispielsoperation kann der Akkumulator 108 ein unteres Wort des akkumulierten Wertes extrahieren, damit dieses in den RAM 112 geschrieben wird. Anschließend kann der Akkumulator 108 das Akkumulationsregister 110 durch Speichern lediglich des oberen Wortes des akkumulierten Wertes in dem Akkumulationsregister 110 zurücksetzen.
  • Der RAM 112 kann die Daten an den Cache 104 übertragen. Wie gezeigt ist, kann der RAM 112 zwei 1-wortbreite Operandensegmente an den Cache 104 übertragen. Da ein Multiplikationszyklus (nachstehend noch beschrieben) nur zwei Lesevorgänge aus dem RAM 112 benötigt, kann der RAM 112 zwei Speicherschnittstellen pro Spalte beinhalten. Bei einer Implementierung ist der RAM 112 ein Doppelport-RAM, während bei einer anderen Implementierung der RAM 112 ein Speichermodul mit zwei Einzelport-RAMs ist. Obwohl bei diesem Beispiel ein RAM verwendet wird, kann auch ein anderer Leseschreibspeicher, so beispielsweise ein Flash-Speicher, ein Nurlesezugriffsspeicher oder eine andere Lese-Schreibdatenspeichervorrichtung bei anderen Implementierungen zum Einsatz kommen.
  • Das System 100 beinhaltet eine Zustandsmaschine 114 zur Steuerung der Operationen der Multiplikationsschaltung 102. So kann die Zustandsmaschine 114 die Speicherzugriffe aus dem Cache 104 auf den RAM 112 steuern. Wie gezeigt ist, empfängt die Zustandsmaschine 114 Zustandssignale aus der Multiplikationsschaltung 102. Auf Grundlage der Zustandssignale kann die Zustandsmaschine 114 einen aktuellen Zustand der Multiplikationsschaltung 102 bestimmen. Auf Grundlage des aktuellen Zustandes kann die Zustandsmaschine 114 sodann Steuersignale an den RAM 112 und/oder die Multiplikationsschaltung 102 übertragen. Bei einem Beispiel kann die Zustandsmaschine 114 die Zustandssignale empfangen, um zu bestimmen, ob der Cache 104 mit dem Lesen der Operandensegmente aus dem RAM 112 fertig ist. Ist der Cache 104 mit dem Lesen des Operandensegmentes fertig, so kann die Zustandsmaschine 114 beispielsweise Steuersignale an die Multiplikationsschaltung 102 übertragen, um die Operandensegmente unter Verwendung des Multiplizierers 106 zu multiplizieren. Einige Beispiele für Operationssequenzen der Zustandsmaschine 114 sind nachstehend unter Bezugnahme auf 3 beschrieben.
  • Bei einigen Implementierungen kann die Zustandsmaschine 114 eine digitale logische Schaltung sein (so beispielsweise ein feldprogrammierbares Gatearray (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC), diskrete digitale Schaltungskomponenten oder auch eine Kombination hieraus), die eine Hardwarezustandsmaschinenstruktur zur Steuerung der Multiplikationsschaltung beinhaltet. Bei anderen Implementierungen kann die Zustandsmaschine 114 ein Computerprogramm sein, das von dem System 100 verarbeitet wird, um die Multiplikationsschaltung 102 zu betreiben. Bei einer weiteren Implementierung kann die Zustandsmaschine 114 ein Prozessor sein, der Softwareanweisungen ausführt, um Operationssequenzen zum Multiplizieren von zwei Operanden unter Verwendung der Multiplikationsschaltung 102 auszuführen.
  • Bei verschiedenen Beispielen kann die Zustandsmaschine 114 ein Operationssequenzierer sein, der dafür ausgelegt ist, den Zugriff des RAM 112 durch den Cache 104 zu steuern und die Sequenz der Multiplizier- und Akkumulieroperationen, die von dem Multiplizierer 106 beziehungsweise dem Akkumulator 108 durchgeführt werden, zu steuern. Bei einem weiteren Beispiel kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, zwei wortbreite Operanden unter Verwendung des Multiplizierers 106 zu multiplizieren. So kann die Zustandsmaschine 102 zwei wortbreite Operanden aus dem Cache 104 zur Multiplikation durch den Multiplizierer 106 spezifizieren. Bei einem weiteren Beispiel kann die Maschine 114 die Multiplikationsschaltung 102 anweisen, ein Ergebnis aus dem Multiplizierer in dem Akkumulationsregister 110 zu akkumulieren. So kann der Akkumulator 108 beispielsweise das 2-wortbreite Multiplikationsergebnis mit einem bestehenden Wert in dem Akkumulationsregister 110 akkumulieren und das Akkumulationsergebnis in dem Akkumulationsregister 110 speichern. Bei einem weiteren Beispiel kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, ein Wort (beispielsweise ein oberes Wort oder ein unteres Wort) aus dem Akkumulationsregister 110 in dem RAM 112 zu speichern. Die Zustandsmaschine 114 kann beispielsweise bewirken, dass der Akkumulator 108 ein oberes Wort und/oder ein unteres Wort aus dem Akkumulationsregister 110 extrahiert und das extrahierte Datenwort beziehungsweise die extrahierten Datenworte in dem RAM 112 speichert. Bei einem weiteren Beispiel kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, das Akkumulationsregister 110 zurückzusetzen. So kann die Zustandsmaschine 114 veranlassen, dass der Akkumulator 108 ein oberes Wort aus dem Akkumulationsregister 110 extrahiert und das Akkumulationsregister 110 dahingehend, dass dieses das extrahierte obere Wort ist, zurücksetzen.
  • Illustratives Beispiel für den Betrieb der Multiplikationsschaltung
  • Anhand 2 werden nachstehend Operationen der Multiplikationsschaltung 102 anhand eines illustrativen Beispieles beschrieben, bei dem die Operanden A und B gemäß vorstehender Definition Verwendung finden. Jeder Operand A und B beinhaltet aneinander angrenzende, geordnete, wortbreite Operandensegmente Aj und Bi, so beispielsweise A0–A3 und B0–B3, siehe oben. Jedes wortbreite Operandensegment ist durch eine spezifische Gewichtung j oder i charakterisiert. Die Gewichtung j für jedes A-wortbreite Operandensegment ist eine ganze Zahl von 0 bis k, wobei k die maximale Gewichtung ist, die bei diesem Beispiel „3” beträgt. Die Gewichtung i für jedes B-wortbreite Operanden segment ist eine ganze Zahl von 0 bis m, wobei m die maximale Gewichtung ist, die in diesem Beispiel „3” beträgt.
  • 2 ist eine schematische Darstellung einer Multiplikationsmatrix 200, die m + 1 Reihen und k + m + 2 Spalten beinhaltet. Jede Reihe weist eine Gewichtung x auf, während jede Spalte eine Gewichtung y aufweist. Bei diesem Beispiel reichen die Reihengewichtungen von 0 bis 3, während die Spaltengewichtungen von 0 bis 7 reichen. Die Multiplikationsoperationen werden jeweils an einem Paar von Reihen und nicht jeweils Reihe für Reihe durchgeführt. Für jedes Paar von Reihen wird ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus dem Speicher gelesen, und es werden wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede der Spalten durchgeführt, die Zellen beinhaltet, die für ein gegebenes Paar von Reihen bevölkert sind. Bei der Durchführung der Multiplikationsoperationen für jede Spalte ist als solches ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich. Vorteilhafterweise kann eine effiziente Speicherschnittstelle in dem System verwendet werden, so beispielsweise ein Doppelport-RAM oder zwei Einzelport-RAMs.
  • Die Zustandsmaschine 114 kann die Multiplikationsschaltung 102 zur Ausführung von wortbreiten Operandensegmentpaarmultiplikationsoperationen betreiben, die durch die Multiplikationsmatrix 200 dargestellt werden. Die Zustandsmaschine 114 wählt die Durchführung von Multiplikationsoperationen jeweils an einem Paar von Reihen in der Multiplikationsmatrix 200. Nachdem die Multiplikationsoperationen des Paares von Reihen beendet sind, wählt die Zustandsmaschine 114 ein weiteres Paar von Reihen aus, bis sämtliche wortbreiten Operandensegmentpaarmultiplikationen beendet sind.
  • Bei dem dargestellten Beispiel wählt die Zustandsmaschine 114 die Durchführung von wortbreiten Operandensegmentmultiplikationen in der Sequenz aus, wie in 2 durch Pfeile angedeutet ist. Wie gezeigt ist, kann die Zustandsmaschine 114 Reihen 202, 204 in der Multiplikationsmatrix 200 auswählen. Nachdem die Multiplikationsoperationen beendet sind, wählt die Zustandsmaschine 114 Reihen 206, 208 aus. Bei einer Implementierung wählt die Zustandsmaschine 114 ein Paar von Reihen entsprechend einer nummerischen Sequenz von zunehmenden oder abnehmenden Gewichtungswerten der Gewichtung für die Reihen, die in jeden Paar beinhaltet sind, aus. So kann die Zustandsmaschine 114 beispielsweise ein Paar von Reihen mit Gewichtungen t und t + 1 auswählen, gefolgt von einer Auswahl eines Paares von Reihen mit Gewichtungen t + 2 und t + 3.
  • Bei einer anderen Implementierung kann die Auswahl von Reihenpaaren jedoch auch zufällig erfolgen. Das zufallsbasierte Bilden der Sequenz von Reihenpaarberechnungen kann eine verbesserte Sicherheit von Daten gewährleisten, die bei den Multiplikationsoperationen verwendet werden.
  • Wie wiederum in 2 gezeigt ist, kann beim Auswählen der Reihen 202, 204 die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, ein Paar von entsprechenden B-wortbreiten Operandensegmenten zu lesen. Dies bedeutet, dass B-wortbreite Operandensegmente mit entsprechenden Gewichtungswerten in den Cache 104 gelesen werden, die in diesem Beispiel B0 und B1 sind. Die Zustandsmaschine 114 kann die Zellen in den Reihen 202, 204 durch iteratives Durchführen von wortbreiten Operandensegmentpaarmultiplikationsoperationen für jede Spalte von der Gewichtung 0 bis zur Gewichtung 4 durchführen.
  • Bei einem Beispiel kann die Zustandsmaschine 114 zunächst den Cache 104 anweisen, ein Operandensegment A0 aus dem RAM 112 zu lesen. Anschließend kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, ein Zwischenprodukt von A0·B0 zu berechnen. Die Multiplikationsschaltung 102 speichert das Zwischenprodukt in dem Akkumulationsregister 110. Die Zustandsmaschine 114 kann die Multiplikationsschaltung 102 anweisen, das untere Wort (beispielsweise die am wenigsten signifikanten n Bit) aus dem Akkumulationsregister 110 in den RAM 112 als Endspaltenergebnis (R0) für die Spalte 0 zu schreiben, da keine weiteren Werte in der Spalte 0 zur Berechnung anstehen, das heißt für dieses Paar von Reihen oder für beliebige andere. Die Zustandsmaschine 114 kann das Akkumulationsregister 110 derart zurücksetzen, dass dieses das obere Wort in dem Akkumulationsregister 110 ist, wobei das obere Wort ein Trägerwert (C0) ist, der bei der Berechnung eines Ergebnisses für eine nächste Spalte 254 verwendet wird. Zur Berechnung der Spalte 0 sind nur eine Leseoperation (Lesen von A0) und eine Schreiboperation (Schreiben vom R0) in den RAM 112 beziehungsweise aus diesem erforderlich.
  • Unter Verwendung des Trägerwertes C0 und eines zusätzlichen Operandensegmentes A1 des Lesevorganges aus dem RAM 112 kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 verwenden, um ein Ergebnis für die nächste Spalte 254 zu berechnen. Die Zustandsmaschine 114 weist den Cache 104 an, A1 aus dem RAM 112 zu lesen. Anschließend kann der Multiplizierer 106 ein Zwischenprodukt A0·B1 berechnen, und der Akkumulator 108 kann A0·B1 mit dem Trägerwert C0 in dem Akkumulationsregis ter 110 akkumulieren. Als solches erfolgt durch das Akkumulationsregister 110 eine Speicherung der Summe des Trägerwertes C0 und des Produktes von A0·B1. Der Multiplizierer 106 berechnet des Weiteren ein Zwischenprodukt von A1·B0. Das Multiplikationsprodukt A1·B0 ist in dem Akkumulationsregister 110 akkumuliert. Nach dem Akkumulieren des Multiplikationsproduktes kann der Akkumulator 108 ein unteres Wort aus dem Akkumulationsregister 110 in den Speicher 112 als Endspaltenergebnis (R1) schreiben und das Akkumulationsregister mit dem oberen Wort in dem Akkumulationsregister 110 als Trägerwert C1 für eine nächste Spalte 256 zurücksetzen. Zusammengefasst bedeutet dies für den Multiplikationszyklus zur Berechnung von Spalte 1:
    Leseoperationen: Lesen von A1 (A0 wurde vorher gelesen und in dem Cache);
    Schreiboperationen: Schreiben von R1;
    R1 = unteres Wort von (C0 + A0·B1 + A1·B0); und
    C1 = oberes Wort von (C0 + A0·B1 + A1·B0).
  • Die Summe der Gewichtungen der wortbreiten Operandensegmente ist gleich der Gewichtung der entsprechenden Spalte. Dies bedeutet, dass bei dem vorstehenden Beispiel für die Spalte 1 254 mit einer Gewichtung von „1” die Gewichtungen der wortbreiten Operandensegmente gleich 0 + 1 = 1 und 1 + 0 = 1 für jede von den beiden Multiplikationsoperationen ist.
  • Für die Spalte 2 256 kann der Akkumulator 108 die Multiplikationsprodukte A2·B0 und A1·B1 und den Trägerwert C1 aus der Spalte 254 akkumulieren. Da die Reihen 202, 204 nicht die Endreihen zur Berechnung für die Spalte 254 sind, schreibt der Akkumulator 108 das obere Wort des Akkumulationsergebnisses als Zwischenspaltenergebnis für die Spalte 2 (Int2). Zusammengefasst bedeutet dies für den Multiplikationszyklus zur Berechnung von Spalte 2:
    Leseoperationen: Lesen von A2 (A1 wurde vorher gelesen und in dem Cache);
    Schreiboperationen: Schreiben von Int1;
    Int2 = unteres Wort von (C1 + A1·B1 + A2·B0); und
    C2 = oberes Wort von (C1 + A1·B1 + A2·B0).
  • Auf ähnliche Weise schreibt für die Spalte 3 258 der Akkumulator 108 das untere Wort des Akkumulationsergebnisses in den RAM 112 als Zwischenspaltenergebnis Int3, und es wird für die Spalte 4 260 das untere Wort des Akkumulationsergebnisses in den RAM 112 als Zwischenspaltenergebnis Int4 geschrieben. An diesem Punkt weist, da keine weiteren A-wortbreiten Operandensegmente zum Lesen aus dem Speicher 112 vorhanden sind, die Zustandsmaschine 114 den Akkumulator 108 an, das obere Wort in dem Akkumulationsregister 110 in den RAM 112 als Zwischenergebnis (Int5) für die nächste Spalte, das heißt Spalte 5 262, zu schreiben.
  • Die Zustandsmaschine 114 kann die Daten zurücksetzen, die in der Multiplikationsschaltung 102 gespeichert sind. Die Zustandsmaschine 114 kann den Wert zurücksetzen, der in dem Akkumulationsregister 110 gespeichert ist. Bei einigen Beispielen kann die Zustandsmaschine 114 selektiv Werte, die in dem Cache 104 gespeichert sind, löschen (clear).
  • Als nächstes kann die Zustandsmaschine 114 ein weiteres Paar von Reihen auswählen, das nicht vorher ausgewählt worden ist. Bei diesem Beispiel wählt die Zustandsmaschine 114 die Reihen 206, 208 aus. Die Zustandsmaschine 114 weist den Cache 104 an, B Operandensegmente entsprechend den Reihen 206, 208 (das heißt B2 und B3) in den Cache 104 zu lesen. Bei einer Implementierung können B2 und B3 die Werte B0 und B1 in dem Cache 104 ersetzen, um die Größenanforderungen an den Cache 104 zu verringern.
  • Die Zustandsmaschine 114 liest den A0-Wert aus dem RAM 112 in den Cache 104. Die Summe aus der Gewichtung von A0 und B2 ist die Gewichtung einer ersten Spalte zur Berechnung, das heißt Spalte 2 256. Unter Verwendung der vorbestimmten Gewichtung kann die Zustandsmaschine 114 prüfen, ob ein Zwischenergebnis der Gewichtung 2 (Int2) in dem RAM 112 verfügbar ist. Wie vorstehend beschrieben worden ist, wurde Int2 vorher berechnet, ist in dem RAM 112 gespeichert und wird in den Cache 104 gelesen. Bei einer Implementierung kann die Zustandsmaschine 114 den Akkumulator 108 anweisen, das Akkumulationsregister 110 auf Int2 zurückzusetzen.
  • Durch Akkumulieren von Int2 und eines Multiplikationsproduktes von A0·B2 erhält die Multiplikationsschaltung 102 ein Endergebnis für die Spalte 2 256 (R2) und einen Trägerwert (C2) für die Berechnung der nächsten Spalte 3 258. Dies bedeutet, dass nach dem Akkumulieren die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen kann, das untere n-Bit-Wort des Akkumulationsergebnisses als R2 zu speichern und das Akkumulationsregister 110 auf das obere Wort des Akkumulationsergebnisses als Trägerwert C2 zurückzusetzen. Das untere Wort ist bei diesem Beispiel ein Endspaltener gebnis, da keine zusätzlichen Reihen in Spalte 2 vorhanden sind, die einer Berechnung bedürften. Zusammengefasst bedeutet dies für den Multiplikationszyklus zur Berechnung von Spalte 2 für Reihen 2 und 3 folgendes:
    Leseoperationen: Lesen von Int2; Lesen von A0;
    Schreiboperationen: Schreiben von R2;
    R2 = unteres Wort von [(A0·B2) + Int2];
    C2 = oberes Wort von [(A0·B2) + Int2]
  • Für den Multiplikationszyklus sind pro Spalte also zwei Leseoperationen und eine Schreiboperation erforderlich. Dies schließt das Lesen von B2 und B3 nicht mit ein, da diese zu Anfang gelesen und in den Cache überführt werden und während der Berechnungen im Zusammenhang mit den Reihen 2 und 3 Verwendung finden. Die maximale Anzahl von Speicheroperationen, die bei der Berechnung der Multiplikationsmatrix 200 erforderlich ist, ist zwei Lesevorgänge und ein Schreibvorgang pro Spalte, wie dies durch das Beispiel verdeutlicht wird. Als solches kann der RAM 112 entweder als Dualport- oder zwei Einzelportspeicher ausgebildet sein.
  • Wie in 2 gezeigt ist, kann die Zustandsmaschine 114 auf ähnliche Weise die Multiplikationsschaltung 102 anweisen, R3 durch Akkumulieren des Trägerwertes C2, von A1·B2, A0·B3 und Int3 zu berechnen. So kann die Zustandsmaschine 114 beispielsweise die Multiplikationsschaltung 102 anweisen, A1 und Int3 aus dem RAM 112 zu lesen. Anschließend kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, Int3 in das Akkumulationsregister 110 zu akkumulieren. Nach dem Akkumulieren von Int3 kann die Zustandsmaschine 114 sequenziell die Multiplikationsschaltung 102 anweisen, die Multiplikationsprodukte A1·B2 und A0·B3 zu berechnen und zu akkumulieren. Durch Extrahieren des unteren Wortes und des oberen Wortes des Akkumulationsergebnisses kann die Zustandsmaschine 114 den Akkumulator 108 anweisen, das untere Wort des Akkumulationsergebnisses als R3 zu schreiben und das Akkumulationsregister 110 auf die oberen verbleibenden Bits des Akkumulationsergebnisses als Trägerwert C3 zurückzusetzen.
  • Auf ähnliche Weise kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 zur Berechnung der Endspaltenergebnisse R4 und R5 betreiben. So kann die Multiplikationsschaltung 102 beispielsweise R4 durch Akkumulieren des Trägerwertes C3 aus der Spalte 3 258, von Int4, A2·B2 und A1·B3 berechnen. Die Multiplikationsschaltung 102 kann R5 durch Akkumulieren des Trägerwertes C4 aus der Spalte 4 260 mit Int5, A3·B2 und A2·B3 berechnen.
  • Da kein Zwischenspaltenergebnis für die Spalte 264 verfügbar ist, kann die Zustandsmaschine 114 die Multiplikationsschaltung 102 anweisen, A3·B3 zu akkumulieren und den Trägerwert C5 aus Spalte 5 262 zu akkumulieren. Nach dem Akkumulieren kann die Multiplikationsschaltung 102 das untere Wort des Akkumulationsergebnisses in den RAM 112 als R6 schreiben. An diesem Punkt werden die wortbreiten Operandensegmentmultiplikationsoperationen für die Reihen 206, 208 beendet, und es sind keine weiteren Reihen zur Berechnung übrig. Daher werden die oberen verbleibenden Bits des Akkumulationsergebnisses in den RAM 112 als Endergebnis für Spalte 7 266, das heißt als R7, geschrieben.
  • Das Multiplikationsergebnis von A und B kann aus dem RAM 112 gelesen werden, in dem Folgendes berechnet wird: R = R0 + R1·232 + R2·264 + R3·296 + R4·2128 + R5·2160 + R6·2192 + R7·2224
  • Beispiel zur Durchführung von Berechnungen für eine Multiplikationsmatrix
  • In 3 ist eine Implementierung eines Prozesses 300 gezeigt, der verwendet werden kann, um die Berechnungen für eine Multiplikationsmatrix unter Verwendung des Systems 100 durchzuführen. Zu illustrativen Zwecken wird der Prozess 300 im Zusammenhang mit dem vorstehend erläuterten Beispiel beschrieben, wobei die Beispielsmultiplikationsmatrix 200 diejenige von 2 ist. Der Prozess 300 beginnt mit dem Empfangen eines ersten Operanden mit wortbreiten Operandensegmenten A0, A1, A2, ..., Ak, siehe Schritt 302. Das System 100 kann beispielsweise einen ersten Operanden A mit Operandensegmenten A0–A3, das heißt für k = 3, empfangen. Als nächstes beinhaltet der Prozess 300 in Schritt 304 das Empfangen eines zweiten Operanden B mit wortbreiten Operandensegmenten B0, B1, B2, ..., Bm. Das System 100 kann beispielsweise einen zweiten Operanden B mit Operandensegmenten B0–B3, das heißt für m = 3, empfangen.
  • In Schritt 306 beinhaltet der Prozess 300 das Auswählen eines Paares von Reihen, nämlich von Reihe rowi und Reihe rowi+1, die vorher nicht berechnet worden sind (wobei gilt: i ≤ m – 1). Die Zustandsmaschine 114 kann beispielsweise die Reihen 202, 204 auswählen, um Multiplikationsoperationen unter Verwendung der Operandensegmente durchzu führen. Anschließend beinhaltet der Prozess 300 das Lesen eines Paares von wortbreiten Operanden Bi und Bi+1 aus dem Speicher, siehe Schritt 308. Der Cache 104 kann beispielsweise ein Paar von wortbreiten Operandensegmenten aus dem RAM 112 lesen. Der Prozess 300 beinhaltet in Schritt 310 das Setzen j = 0, das heißt die Zustandsmaschine 114 kann eine Gewichtung j von Aj derart auswählen, dass diese zu Anfang gleich 0 ist.
  • Der Prozess 300 beinhaltet das Lesen von A aus dem Speicher in Schritt 312. So kann der Cache 104 beispielsweise das Operandensegment A0 aus dem Speicher 112 lesen. In Schritt 314 beinhaltet der Prozess 300 das Bestimmen, ob j = 0 ist. Ist j = 0, so beinhaltet der Prozess 300 in Schritt 316 das Durchführen der Multiplikation g = Aj·Bi. So kann die Multiplikationsschaltung 102 beispielsweise eine Multiplikation A0·B2 für die Spalte 2 256 durchführen, wenn die Reihen 206, 208 ausgewählt sind. Ist j ≠ 0, so beinhaltet der Prozess 300 das Durchführen der Multiplikation von g = Aj·Bi + Aj-1·Bi+1 in Schritt 318. Die Multiplikationsschaltung 102 kann beispielsweise eine Multiplikation A1·B0 + A0·B1 in Spalte 254 zur Berechnung von R1 durchführen, wenn die Reihen 202, 204 ausgewählt sind.
  • Nach dem Durchführen der Multiplikation in Schritt 316 oder 318 beinhaltet der Prozess 300 das Bestimmen, ob Inti+j (Zwischenspaltenergebnis mit der Gewichtung gleich i + j) in Schritt 320 vorhanden ist. Die Zustandsmaschine 114 kann beispielsweise prüfen, ob Int2 in dem RAM 112 vorhanden ist. Ist Inti+j vorhanden, so beinhaltet der Prozess 300 das Lesen von Inti+j aus dem Speicher in Schritt 322. In dem vorbeschriebenen Beispiel kann der Cache 104 Int2 lesen, wenn die Reihen 206, 208 ausgewählt sind, da die Spalten 256 vorher berechnet worden sind (in den Reihen 202, 204). Sind Inti+j nicht vorhanden, so beinhaltet der Prozess 300 in Schritt 324 das Setzen von Inti+j auf 0, während anderenfalls Schritt 322 durchgeführt wird, um Inti+j aus dem Speicher zu lesen.
  • Nach dem Lesen von Inti+j aus dem Speicher in Schritt 322 oder dem Setzen von Inti+j auf 0 in Schritt 324 beinhaltet der Prozess 300 in Schritt 326 ein Akkumulieren von g + Inti+j + Ci+j-1 (wobei Ci+j-1 ein Träger aus der vorherigen Spaltenmultiplikation) ist. Der Akkumulator 108 kann beispielsweise Int3, A1·B2, A0·B3 und einen Träger C2 aus der Multiplikation der Spalte 2 256 zur Berechnung eines Spaltenergebnisses für die Spalte 3 258 akkumulieren. Nach dem Akkumulieren beinhaltet der Prozess 300 in Schritt 328 das Bestimmen mehrerer Reihen zur Berechnung Coli+j. Die Zustandsmaschine 114 kann beispielsweise bestimmen, ob mehrere Reihen in der Matrix 200 zur Besiedelung für die Coli+j benötigt werden. Werden keine weiteren Reihen für Coli+j berechnet, so beinhaltet der Prozess 300 das Schreiben des unteren Wortes des Akkumulationsergebnisses als Endergebnis (Ri+j) für Coli+j in Schritt 330. Für Spalte 1 254 kann der Akkumulator 108 beispielsweise das untere Wort des Akkumulationsergebnisses von A1·B0, A0·B1 und den Träger C1 aus Spalte 0 252 als R1 schreiben, da keine weiteren Reihen zur Berechnung für die Spalte 1 254 anstehen. Stehen mehr Reihen zur Berechnung für Coli+j an, so beinhaltet der Prozess 300 das Schreiben des unteren Wortes des Akkumulationsergebnisses als Zwischenergebnis (Inti+j) in Schritt 332. Bei der Berechnung der Spalten 202, 204 kann der Akkumulator 108 beispielsweise das untere Wort des Akkumulationsergebnisses A3·B0, A2·B1 und den Träger C2 aus der Spalte 256 als Int3 (und nicht als R3) schreiben, da mehr Reihen für die Spalte 3 258 noch zur Berechnung anstehen.
  • Der Prozess 300 beinhaltet das Setzen der oberen verbleibenden Bits des Akkumulationsergebnisses als Träger (Ci-j) in Schritt 334. So kann der Akkumulator 108 beispielsweise das Akkumulationsregister 110 auf das obere Wort eines Wertes mit aktueller Speicherung in dem Akkumulationsergebnis 110 zurücksetzen. In Schritt 336 beinhaltet der Prozess 300 das Bestimmen, ob j > k ist. Ist j ≤ k, so wird der Schritt 312 wiederholt. Ist j > k, so beinhaltet der Prozess 300 in Schritt 340 das Durchführen der Multiplikation g = Aj·Bi+j. So kann beim Durchführen der Multiplikation für Spalte 6 264 (wobei j = k = 3) die Multiplikationsschaltung 102 A3·B3 durchführen.
  • In Schritt 342 beinhaltet der Prozess 300 das Bestimmen, ob mehr Reihen zur Berechnung anstehen. Die Zustandsmaschine 114 kann beispielsweise prüfen, ob eine beliebige Reihe in der Matrix 200 nicht besiedelt ist. Stehen mehr Reihen zur Berechnung an, so beinhaltet der Prozess 300 das Schreiben des unteren Wortes des Akkumulationsergebnisses als Zwischenergebnis (Inti+j) in Schritt 344. Anschließend beinhaltet der Prozess 300 in Schritt 346 das Schreiben des oberen Wortes des Akkumulationsergebnisses als Zwischenergebnis (Inti+j+1), und der Prozess kehrt zyklisch zu Schritt 306 zurück und wird fortgesetzt. Werden beispielsweise die Reihen 202, 204 ausgewählt, so kann die Multiplikationsschaltung 102 das untere Wort in dem Akkumulationsregister 110 als Int4 und das obere Wort in dem Akkumulationsergebnis 110 als Int5 schreiben, nachdem die Multiplikationsoperationen für die Spalte 4 260 durchgeführt sind.
  • In Schritt 342 beinhaltet dann, wenn keine weiteren Reihen zur Berechnung anstehen, der Prozess 300 in Schritt 348 das Schreiben des unteren Wortes des Akkumulationser gebnisses als Endergebnis (Ri+j). Sodann beinhaltet der Prozess 300 in Schritt 350 das Schreiben des oberen Wortes des Akkumulationsergebnisses als Endergebnis Ri+j+1, woraufhin der Prozess 300 endet. Bei der Berechnung der Spalte 264 nach Abarbeitung der Reihen 202 204 kann der Akkumulator 108 beispielsweise das untere Wort in das Akkumulationsergebnis 110 als R6 und das obere Wort in dem Akkumulationsergebnis 110 als R7 schreiben. Das Multiplikationsergebnis von A und B kann anschließend aus dem RAM 112 gesesen werden, indem berechnet wird: R = R0 + R1·232 + R2·264 + R3·296 + R4·2128 + R5·2160 + R6·2192 + R7·2224
  • Obwohl einige Implementierungen des Multiplikationssystems sowie des Prozesses beschrieben worden sind, können auch andere Implementierungen zum Einsatz kommen. Bei verschiedenen Implementierungen kann die Zustandsmaschine 114 ein Paar von Reihen zufällig aus den m + 1 Reihen auswählen. So kann die Zustandsmaschine 114 einen Zufallsgenerator beinhalten. Unter Verwendung des Zufallsgenerators kann die Zustandsmaschine 114 eine Zufallszahl zur Darstellung eines Paares von Reihen in der Matrix 200 darstellen, die nicht vorher ausgewählt worden sind. Die Zustandsmaschine 114 kann anschließend zur Verwendung der zufällig ausgewählten Reihen zur Durchführung von Multiplikationsoperationen weitergehen. Bei einigen Beispielen kann die zufällige Auswahl die Sicherheit des Systems 100 verbessern. Ein Paar von Reihen muss nicht unbedingt ein Paar von benachbarten Reihen sein. Es können zwei beliebige Reihen ein Paar sein.
  • Bei einigen Implementierungen kann die Zustandsmaschine 114 zur Durchführung von Multiplikationsoperationen für mehr als jeweils zwei Reihen ausgestaltet sein. Bei einer derartigen Implementierung kann ein größerer Akkumulator erforderlich sein. Bei einem Beispiel kann das System 100 jeweils eine Gruppe von drei oder mehr Reihen zur Durchführung von Multiplikationsoperationen auswählen. Bei einigen Implementierungen werden drei oder mehr Reihen entsprechend einer nummerischen Sequenz von zunehmenden oder abnehmenden Gewichtungswerten der Gewichtung für die Reihen, die in jeder Gruppe beinhaltet sind, ausgewählt. Bei einigen Beispielen kann das Auswählen mehrerer Reihen zur Multiplikation die Speicherzugriffe zum Multiplizieren von zwei großen Zahlen weiter verringern.
  • Die Schritte bei dem Prozess 300 und in dem im Zusammenhang mit 2 beschriebenen Beispiel können in einer anderen als der vorbeschriebenen Reihenfolge durchge führt werden. Die Reihenfolge der Schritte, die bei den illustrativen Beispielen beschrieben worden ist, ist demonstrativ; die gewünschten Ergebnisse können auch durch Ausführen einiger oder aller Schritte in einer anderen Reihenfolge erreicht werden.
  • Bei einigen Implementierungen können die vorstehend beschriebenen Techniken auch zur Durchführung einer Reihe von mathematischen Operationen verwendet werden, so beispielsweise für A·B + Z oder Z – A·B oder A·B – Z, obwohl auch andere Operationen möglich sind. Als illustratives Beispiel zeigt 4 eine Multiplikationsmatrix 400, die zur Berechnung von A·B + Z ausgeführt werden kann, wobei:
    A = 0x11111111222222223333333344444444; und
    B = 0x55555555666666667777777788888888; und
    Z = 0x999999999101010101212121214141414161616161818181820202020224242424
    (mit x0 zur Bezeichnung einer hexadezimalen Zahl)
  • Die Berechnung kann folgendermaßen in Worte in Maschinengröße, in diesem Beispiel in 32-Bit-wortbreite Operandensegmente, aufgeteilt werden: A = A0 + A1·232 + A2·264 + A3·296; und B = B0 + B1·232 + B2·264 + B3·296; und Z = Z0 + Z1·232 + Z2·264 + Z3·296 + Z4·2128 + Z5·2160 + Z6·2192 + Z7·2224 wobei:
    A0 = 0x44444444; A1 = 0x33333333; A2 = 0x22222222; A3 = 0x11111111;
    B0 = 0x88888888; B1 = 0x77777777; B2 = 0x66666666; B3 = 0x55555555; und
    Z0 = 0x24242424; Z1 = 0x20202020; Z2 = 0x18181818; Z3 = 0x16161616;
    Z4 = 0x14141414; Z5 = 0x12121212; Z6 = 0x10101010; Z7 = 0x99999999;
  • Wie in Matrix 400 zu sehen ist, treten die Matrixoperationen von A und B im Wesentlichen als dieselben wie die vorstehend im Zusammenhang mit 2 beschriebenen Operationen auf. Gleichwohl werden bei dieser Implementierung bei der Berechnung der Reihen 0 (402) und 1 (404) die Z-wortbreiten Operandensegmente zu den Multiplikationsprodukten auf ähnliche Weise addiert, wie die Zwischenwerte, beispielsweise Int2, Int3 etc. zu den Multiplikationsprodukten summiert werden, wenn die Reihen 2 (406) und 3 (408) berechnet werden. Dies bedeutet, dass beispielsweise bei der Berechnung von Col 0 (410) für Reihen 0 (402) und 1 (404) die Operationen folgendermaßen sind, nachdem eine anfängliche Leseoperation die Werte von B0 und B1 liest.
    Leseoperationen: Lesen von Z0 und A0
    Schreiboperationen: Schreiben von R0
    wobei R0 = unteres Wort von (A0·B0 + Z0); und
    Träger C0 = oberes Wort von (A0·B0 + Z0).
  • Die Operationen zur Berechnung von Col 1 (412) für Reihen 0 (402) und 1 (404) lauten folgendermaßen:
    Leseoperationen: Lesen von Z1 und A1
    Schreiboperationen: Schreiben von R1
    wobei R0 = unteres Wort von (A1·B0 + A0·B1 + C0 + Z1); und
    Träger C0 = oberes Wort von (A1·B0 + A0·B1 + C0 + Z1).
  • Die Balance der Matrix kann auf ähnliche Weise wie vorstehend beschrieben berechnet werden. Entsprechend können die Berechnungen ohne mehr als zwei Leseoperationen pro Spalte für ein Paar von Reihen ausgeführt werden.
  • Die Erfindung und sämtliche in dieser Druckschrift beschriebenen funktionellen Operationen können in einer digitalen elektronischen Schaltung oder einer Computerhardware, Firmware, Software oder in Kombinationen hieraus implementiert sein. Vorrichtungen der Erfindung können in einem Computerprogrammerzeugnis implementiert sein, das physisch in einer maschinenlesbaren Speichervorrichtung zur Ausführung durch einen programmierbaren Prozessor verkörpert ist. Es können Verfahrensschritte der Erfindung durch einen programmierbaren Prozessor durchgeführt werden, der ein Programm von Anweisungen zur Durchführung von Funktionen der Erfindung durch Verarbeiten von Eingabedaten und Erzeugen einer Ausgabe ausführt.
  • Die Erfindung kann vorteilhafterweise in einem oder mehreren Computerprogrammen implementiert sein, die auf einem programmierbaren System ausführbar sind, darunter wenigstens ein programmierbarer Prozessor, der zum Empfangen von Daten und Anweisungen von und zum Übertragen von Daten und Anweisungen an ein Speichersystem gekoppelt ist, wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung. Jedes Computerprogramm kann in einer hochabstrakten Prozedur- oder objektorientierten Programmiersprache implementiert sein, oder auch in Assembler oder Maschinensprache, so dies gewünscht ist; in jedem Fall kann die Sprache eine kompilierende oder interpretierende Sprache sein.
  • Zu den geeigneten Prozessoren zählen beispielsweise sowohl Allgemein- als auch Spezialzweckmikroprozessoren. Im Allgemeinen empfangen Prozessoren Anweisungen und Daten aus einem Nurlesespeicher und/oder einem Speicher mit wahlfreiem Zugriff. Im Allgemeinen beinhaltet ein Computer ein oder mehrere Massenspeichervorrichtungen zur Speicherung von Datendateien. Solche Vorrichtungen beinhalten magnetische Platten, so beispielsweise interne Festplatten und herausnehmbare Platten; magnetooptische Platten; und optische Platten. Speichervorrichtungen, die zur physischen Verkörperung der Computerprogrammanweisungen und Daten geeignet sind, beinhalten alle Formen von nichtflüchtigem Speicher, darunter beispielsweise Halbleiterspeichervorrichtungen wie EPROM, EEPROM und Flash-Speichervorrichtungen; magnetische Platten, so beispielsweise interne Festplatten und herausnehmbare Platten; magnetooptische Platten und CD-ROM-Platten. Ein beliebiges von dem Vorgenannten kann durch eine ASIC (anwendungsspezifische integrierte Schaltung) ergänzt oder darin integriert sein.
  • Zur Bereitstellung einer Interaktion mit einem Anwender kann die Erfindung auf einem Computersystem mit einer Anzeigevorrichtung implementiert sein, so beispielsweise einem Monitor oder einem LCD-Schirm zum Anzeigen von Information für den Anwender und einer Tastatur und einer Zeigevorrichtung, so beispielsweise einer Maus oder einem Trackball, durch die der Anwender eine Eingabe für das Computersystem bereitstellen kann. Das Computersystem kann derart programmiert werden, dass eine grafische Anwenderschnittstelle bereitsteht, durch die das Computerprogramm mit Anwendern interagiert.
  • Es ist eine Mehrzahl von Ausführungsbeispielen der Erfindung beschrieben worden. Es sollte einsichtig sein, dass verschiedene Abwandlungen daran vorgenommen werden können, ohne vom Wesen und Umfang der Erfindung abzuweichen. Entsprechend befinden sich auch andere Ausführungsbeispiele innerhalb des Wesens der nachfolgenden Ansprüche.
  • Zusammenfassung
  • Verfahren und System zur Multiplikation großer Zahlen
  • Bereitgestellt werden Verfahren, Vorrichtungen und Systeme zur Multiplikation großer Zahlen. Eine Multiplikationsschaltung ist zur Berechnung des Produktes aus zwei Operanden (A und B) vorgesehen, von denen wenigstens einer breiter als eine Breite ist, die der Multiplikationsschaltung zugeordnet ist. Jeder der Operanden beinhaltet aneinander angrenzende, geordnete wortbreite Operandensegmente (Aj und Bi), die durch spezifische Gewichtungen j (ganze Zahl von 0 bis k) und i (ganze Zahl von 0 bis m) charakterisiert sind. Die Multiplikationsschaltung führt eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen aus. Multiplikationsoperationen werden jeweils an einem Paar von Reihen ausgeführt. Für jedes Paar von Reihen wird ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus einem Speicher gelesen, und es werden wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede von k + 2 Spalten durchgeführt. Für jede Spalte ist ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich.

Claims (29)

  1. Computerimplementiertes Verfahren zum Betreiben einer Multiplikationsschaltung zur Berechnung des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als eine der Multiplikationsschaltung zugeordnete Breite ist, wobei jeder der Operanden einen oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist, und wobei die Multiplikationsschaltung eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen ausführt, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten umfasst, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist und die Multiplikationsschaltung Zugriff auf einen Speicher hat, wobei das Verfahren umfasst: Durchführen von Multiplikationsoperationen jeweils an einem Paar von Reihen, wobei für jedes Paar von Reihen ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus dem Speicher gelesen wird und wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede der k + 2 Spalten derart durchgeführt werden, dass für jede Spalte in der Matrix ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich ist.
  2. Verfahren nach Anspruch 1, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die entsprechend einer nummerischen Sequenz von zunehmenden oder abnehmenden Gewichtungswerten der Gewichtungen für die Reihen, die in jedem Paar beinhaltet sind, ausgewählt werden.
  3. Verfahren nach Anspruch 1, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die zufällig aus den m + 1 Reihen ausgewählt werden.
  4. Verfahren nach Anspruch 1, wobei eine wortbreite Operandensegmentpaarmultiplikationsoperation für eine Spalte mit einer Gewichtung y1 ein Durchführen wenigstens einer Multiplikationsoperation eines Aj-wortbreiten Operandensegmentes mit einem Bi-wortbreiten Operandensegment umfasst, wobei die Summe der Gewichtung j des Aj-wortbreiten Operanden und der Gewichtung i des Bi-wortbreiten Operandensegmentes gleich der Gewichtung y1 der Spalte ist.
  5. Verfahren nach Anspruch 1, des Weiteren umfassend: Berechnen eines n-Bit-Endspaltenergebnisses für jede der k + m + 2 Spalten, wobei ein Endspaltenergebnis für eine Spalte ein am wenigsten signifikantes n-Bit-Wort einer Akkumulation der wortbreiten Operandensegmentpaarmultiplikationsoperationen umfasst, die für jede der m + 1 Reihen in Bezug auf die Spalte durchgeführt werden.
  6. Verfahren nach Anspruch 5, wobei das Berechnen eines n-Bit-Endspaltenergebnisses für eine Spalte ein für ein Endpaar von Reihen aus der Berechnung für die Spalte erfolgendes Akkumulieren von Ergebnissen der wortbreiten Operandensegmentpaarmultiplikationsoperationen, eines Zwischenspaltenergebnisses (so vorhanden) für die Spalte und eines Trägerwertes (so vorhanden) gleich einem oberen Wort eines Akkumulationsergebnisses aus der Bestimmung für eine vorher berechnete Spalte umfasst, um ein Akkumulationsergebnis für die Spalte zu bestimmen, wobei das n-Bit-Endspaltenergebnis die am wenigsten signifikanten n Bit des Akkumulationsergebnisses für diese Spalte umfasst.
  7. Verfahren nach Anspruch 5, wobei ein Zwischenspaltenergebnis für eine Spalte ein für ein Paar von Reihen ungleich dem Endpaar von Reihen zur Berechnung für die Spalte erfolgendes Akkumulieren von Ergebnissen der wortbreiten Operandensegmentpaarmultiplikationsoperationen, eines vorher berechneten Zwischenspaltenergebnisses (so vorhanden) für die Spalte und eines Trägerwertes (so vorhanden) für eine vorher berechnete Spalte umfasst, um ein Zwischenakkumulationsergebnis für die Spalte zu bestimmen, wobei das Zwischenspaltenergebnis die am wenigsten signifikanten n Bit des Zwischenakkumulationsergebnisses für die Spalte umfasst.
  8. Verfahren nach Anspruch 7, wobei ein oberes Wort des Zwischenakkumulationsergebnisses für die Spalte einen Trägerwert für die Spalte zur Verwendung in einer Akkumulationsoperation für eine nächste Spalte umfasst.
  9. Verfahren nach Anspruch 1, wobei das Paar von Bi-wortbreiten Operandensegmenten des Lesevorganges aus dem Speicher entsprechend dem Paar von Reihen in einem Cache gespeichert wird, während die Multiplikationsoperationen für das Paar von Reihen durchgeführt werden.
  10. Computerimplementiertes Verfahren zum Betreiben einer Multiplikationsschaltung zur Berechnung des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als die Multiplikationsschaltung ist, wobei jeder der Operanden ein oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifische Anzahl von Bits (n) ist, wobei die Multiplikationsschaltung eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen ausführt, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten umfasst, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist, wobei die Multiplikationsschaltung Zugriff auf einen Speicher hat, wobei das Verfahren umfasst: für jedes Paar von Gewichtungen x1 und x2 aufweisenden Reihen in der Matrix erfolgendes Lesen eines Paares von B Operandensegmenten aus dem Speicher, wobei die Gewichtung eines ersten B-Operandensegmentes (Bx1) gleich x1 und die Gewichtung eines zweiten B-Operandensegmentes (Bx2) gleich x2 ist, und des Weiteren Durchführen des Nachfolgenden: (a) Lesen eines Aj-Operandensegmentes aus dem Speicher (Aj1); (b) für eine Spalte mit einer Gewichtung y erfolgendes Lesen eines Zwischenspaltenergebnisses (Inty), so vorhanden, eines Zwischenspaltenergebnisses gleich einem vorher bestimmten Ergebnis für die Spalte entsprechend einem verschiedenen Paar oder Paaren von Reihen; (c) Multiplizieren des Aj1-Operandensegmentes mit dem ersten B-Operandensegment (Bx1), wobei die Gewichtung (j1) des Aj-Operandensegmentes zusammen mit der Gewichtung (x1) des ersten B-Operandensegmentes gleich der Gewichtung der Spalte y ist; (d) für den Fall, dass j > 0 ist, erfolgendes Multiplizieren eines vorher gelesenen Aj-Operandensegmentes aus der Speicherung in einem Cache (Aj0) mit dem zweiten B-Operandensegment (Bx2), wobei die Gewichtung (j0) des vorher gelesenen Aj0-Operandensegmentes zusammen mit der Gewichtung (x2) des zweiten B-Operandensegmentes gleich der Gewichtung y der Spalte ist; (e) Akkumulieren der Ergebnisse der einen oder zwei Multiplikationsoperationen und des Zwischenspaltenergebnisses Inty (so vorhanden) und eines Trägerwertes Cy-1 (so vorhanden) für eine vorher berechnete Spalte mit einer Gewichtung y – 1 zur Bereitstellung eines Akkumulationsergebnisses; (f) für den Fall, dass keine weiteren Reihen zur Berechnung für die Spalte vorhanden sind, erfolgendes Schreiben der am wenigsten signifikanten n Bit des Akkumulationsergebnisses in den Speicher als Endspaltenergebnis Ry und andernfalls erfolgendes Schreiben der am wenigsten signifikanten n Bit des Akkumulationsergebnisses in den Speicher als Zwischenspaltenergebnis Inty; und (g) Inkrementieren von j um 1 und Reiterieren der Schritte (a) bis (g), bis j > k ist; wobei die Schritte (a) bis (g) nicht in der gezeigten Reihenfolge durchgeführt werden müssen.
  11. Verfahren nach Anspruch 10, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die entsprechend einer nummerischen Sequenz von zunehmenden oder abnehmenden Gewichtungswerten der Gewichtungen für die Reihen, die in jedem Paar beinhaltet sind, ausgewählt werden.
  12. Verfahren nach Anspruch 10, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die aus den m + 1 Reihen zufällig ausgewählt werden.
  13. Computerprogrammerzeugnis, das physisch auf einem computerlesbaren Medium gespeichert ist, zum Betreiben einer Multiplikationsschaltung zur Berechnung des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als die Multiplikationsschaltung ist, wobei jeder der Operanden ein oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist, wobei die Multiplikationsschaltung eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen ausführt, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten ausführt, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist, wobei die Multiplikationsschaltung Zugriff auf einen Speicher hat, umfassend Anweisungen, die ausführbar sind, um einen programmierbaren Prozessor zu veranlassen zum: Durchführen von Multiplikationsoperationen jeweils an einem Paar von Reihen, wobei für jedes Paar von Reihen ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus dem Speicher gelesen wird und wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede von k + 2 Spalten durch geführt werden, sodass für jede Spalte in der Matrix ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich ist.
  14. Computerprogrammerzeugnis nach Anspruch 13, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die entsprechend einer nummerischen Sequenz von zunehmenden oder abnehmenden Gewichtungswerten der Gewichtungen für die Reihen, die in jedem Paar beinhaltet sind, ausgewählt werden.
  15. Computerprogrammerzeugnis nach Anspruch 13, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die aus den m + 1 Reihen ausgewählt werden.
  16. Computerprogrammerzeugnis nach Anspruch 13, wobei eine wortbreite Operandensegmentpaarmultiplikationsoperation für eine Spalte mit einer Gewichtung y1 ein Durchführen wenigstens einer Multiplikationsoperation eines Aj-wortbreiten Operandensegmentes mit einem Bi-wortbreiten Operandensegment umfasst, wobei die Summe der Gewichtung j des Aj-wortbreiten Operanden und der Gewichtung i des Bi-wortbreiten Operandensegmentes gleich der Gewichtung y1 der Spalte ist.
  17. Computerprogrammerzeugnis nach Anspruch 13, des Weiteren umfassend Anweisungen, die ausführbar sind, um einen programmierbaren Prozessor zu veranlassen zum: Berechnen eines n-Bit-Endspaltenergebnisses für jede der k + m + 2 Spalten, wobei ein Endspaltenergebnis für eine Spalte ein am wenigsten signifikantes n-Bit-Wort einer Akkumulation der wortbreiten Operandensegmentpaarmultiplikationsoperationen umfasst, die für jede der m + 1 Reihen in Bezug auf die Spalte durchgeführt werden.
  18. Computerprogrammerzeugnis nach Anspruch 17, wobei Anweisungen, die ausführbar sind, um ein n-Bit-Endspaltenergebnis für eine Spalte zu berechnen, Anweisungen umfassen, die ausführbar sind, um einen programmierbaren Prozessor zu veranlassen zum: für ein Endpaar von Reihen aus der Berechnung für die Spalte erfolgendes Akkumulieren von Ergebnissen der wortbreiten Operandensegmentpaarmultiplikationsoperationen, eines Zwischenspaltenergebnisses (so vorhanden) für die Spalte und eines Trägerwertes (so vorhanden) gleich einem oberen Wort eines Akkumulationsergebnisses aus der Bestimmung für eine vorher berechnete Spalte, um ein Akkumulationsergebnis für die Spalte zu bestimmen, wobei das n-Bit-Endspaltenergebnis die am wenigsten signifikanten n Bit des Akkumulationsergebnisses für die Spalte umfasst.
  19. Computerprogrammerzeugnis nach Anspruch 18, des Weiteren umfassend Anweisungen, die ausführbar sind, um einen programmierbaren Prozessor zu veranlassen zum: Berechnen eines n-Bit-Zwischenspaltenergebnisses für eine Spalte, wobei ein Zwischenspaltenergebnis für eine Spalte ein für ein Paar von Reihen ungleich dem Endpaar von Reihen zur Berechnung für die Spalte erfolgendes Akkumulieren von Ergebnissen der wortbreiten Operandensegmentpaarmultiplikationsoperationen, eines vorher berechneten Zwischenspaltenergebnisses (so vorhanden) für die Spalte und eines Trägerwertes (so vorhanden) für eine vorher berechnete Spalte umfasst, um ein Zwischenakkumulationsergebnis für die Spalte zu bestimmen, wobei das Zwischenspaltenergebnis die am wenigsten signifikanten n Bit des Zwischenakkumulationsergebnisses für die Spalte umfasst.
  20. Computerprogrammerzeugnis nach Anspruch 19, wobei ein oberes Wort des Zwischenakkumulationsergebnisses für die Spalte einen Trägerwert für die Spalte zur Verwendung in einer Akkumulationsoperation für eine nächste Spalte umfasst.
  21. Computerprogrammerzeugnis nach Anspruch 13, wobei das Paar von Bi-wortbreiten Operandensegmenten des Lesevorganges aus dem Speicher entsprechend dem Paar von Reihen in einem Cache gespeichert wird, während die Multiplikationsoperationen für das Paar von Reihen durchgeführt werden.
  22. System zum Berechnen des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als eine in dem System beinhaltete Multiplikationsschaltung ist, wobei jeder der Operanden ein oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist, wobei das System eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen ausführt, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten umfasst, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist, wobei das System umfasst: einen ein oder mehrere Eingaben beinhaltenden Multiplizierer zum Empfangen von wortbreiten Operandensegmenten zur Multiplikation, um ein 2-wortbreites Zwischenprodukt zu bilden, und zum Durchführen einer Multiplikationsoperation eines Paares von wortbreiten Operandensegmenten; einen Akkumulator, der beinhaltet: ein oder mehrere Eingaben zum Empfangen des 2-wortbreiten Zwischenergebnisses aus dem Multiplizierer, eines Zwischenspaltenergebnisses aus einem Cache und eines Trägerwertes aus dem Cache; ein oder mehrere Ausgaben zum Bereitstellen der am wenigsten signifikanten n Bit einer Akkumulation des 2-wortbreiten Zwischenproduktes, Zwischenspaltenergebnisses und Trägerwertes für den Cache als Zwischen- oder Endspaltenergebnis und des Weiteren zum Bereitstellen der oberen Bits der Akkumulation für den Cache als Trägerwert; wobei der Akkumulator dem Durchführen einer Akkumulationsoperation der darin empfangenen Eingaben dient; einen Cache zum Empfangen und Übertragen von wortbreiten Operandensegmenten aus einem und an einen Speicher und in Verbindung mit dem Multiplizierer und dem Akkumulator zum Bereitstellen von Eingaben hierfür und Empfangen von Ausgaben hiervon; und einen Operationsequenzierer zum Steuern des Cachezugriffs des Speichers und zum Steuern der Sequenz von Multiplizier- und Akkumulieroperationen, die von dem Multiplizierer beziehungsweise Akkumulator durchgeführt werden; wobei die Sequenzen zum Durchführen von Multiplikationsoperationen jeweils an einem Paar von Reihen definiert sind, wobei für jedes Paar von Reihen ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus dem Speicher in den Cache gelesen werden und wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ von dem Multiplizierer für jede von k + 2 Spalten durchgeführt werden, sodass für jede Spalte in der Matrix ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation in den und aus dem Speicher erforderlich ist.
  23. System nach Anspruch 22, des Weiteren umfassend: den Speicher, wobei der Speicher zwei Speicherschnittstellen erfordert.
  24. System nach Anspruch 22, des Weiteren umfassend: den Speicher, wobei der Speicher ein einzelner Doppelport-RAM (Speicher mit wahlfreiem Zugriff) ist.
  25. System nach Anspruch 22, des Weiteren umfassend: den Speicher, wobei der Speicher zwei einzelne Port-RAMs umfasst.
  26. Computerimplementiertes Verfahren zum Berechnen des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als eine Breite ist, die einer die Multiplikation durchführenden Multiplikationsschaltung zugeordnet ist, wobei das Verfahren umfasst: Erstellen einer Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten umfasst, jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist, wobei jeder der Operanden ein oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist; und Durchführen von Multiplikationsoperationen jeweils an einem Paar von Reihen, wobei für jedes Paar von Reihen ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus einem Speicher gelesen wird und wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede von k + 2 Spalten durchgeführt werden, sodass für jede Spalte in der Matrix ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich ist.
  27. Verfahren nach Anspruch 26, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die entsprechend einer nummerischen Sequenz von zunehmenden oder abnehmenden Gewichtungswerten der Gewichtungen für die Reihen, die in jedem Paar beinhaltet sind, ausgewählt werden.
  28. Verfahren nach Anspruch 26, wobei die Multiplikationsoperationen an Paaren von Reihen durchgeführt werden, die aus den m + 1 Reihen ausgewählt werden.
  29. System zum Betreiben einer Multiplikationsschaltung zur Berechnung des Produktes aus zwei Operanden (A und B), von denen wenigstens einer breiter als die Mul tiplikationsschaltung ist, wobei jeder der Operanden ein oder mehrere aneinander angrenzende, geordnete, wortbreite Operandensegmente (Aj und Bi) umfasst, die durch spezifische Gewichtungen j und i charakterisiert sind, wobei j eine ganze Zahl von 0 bis k und i eine ganze Zahl von 0 bis m ist und ein Wort eine spezifizierte Anzahl von Bits (n) ist, wobei die Multiplikationsschaltung eine Matrix von wortbreiten Operandensegmentpaarmultiplikationsoperationen ausführt, wobei die Matrix m + 1 Reihen und k + m + 2 Spalten umfasst, wobei jede Reihe eine Gewichtung x und jede Spalte eine Gewichtung y aufweist und die Multiplikationsschaltung Zugriff auf einen Speicher hat, umfassend: ein Mittel zum Durchführen von Multiplikationsoperationen jeweils an einem Paar von Reihen, wobei für jedes Paar von Reihen ein Paar von entsprechenden Bi-wortbreiten Operandensegmenten aus dem Speicher gelesen wird und wortbreite Operandensegmentpaarmultiplikationsoperationen (Aj·Bi) iterativ für jede von k + 2 Spalten durchgeführt werden, sodass für jede Spalte in der Matrix ein Maximum von zwei zusätzlichen Speicherleseoperationen und einer Speicherschreiboperation erforderlich ist.
DE112008002158.9T 2007-08-10 2008-08-08 Verfahren und System zur Multiplikation großer Zahlen Active DE112008002158B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/837,387 2007-08-10
US11/837,387 US8028015B2 (en) 2007-08-10 2007-08-10 Method and system for large number multiplication
PCT/US2008/072697 WO2009023595A1 (en) 2007-08-10 2008-08-08 Method and system for large number multiplication

Publications (2)

Publication Number Publication Date
DE112008002158T5 true DE112008002158T5 (de) 2010-06-17
DE112008002158B4 DE112008002158B4 (de) 2023-05-04

Family

ID=40347502

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112008002158.9T Active DE112008002158B4 (de) 2007-08-10 2008-08-08 Verfahren und System zur Multiplikation großer Zahlen

Country Status (5)

Country Link
US (1) US8028015B2 (de)
CN (1) CN101790718B (de)
DE (1) DE112008002158B4 (de)
TW (1) TWI438678B (de)
WO (1) WO2009023595A1 (de)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5097138B2 (ja) * 2009-01-15 2012-12-12 シャープ株式会社 モンゴメリ乗算のための演算回路及び暗号回路
EP2365659B1 (de) * 2010-03-01 2017-04-12 Inside Secure Testverfahren des Widerstands eines integrierten Schaltkreises gegenüber einem Seitenkanalangriff
US9645974B1 (en) 2015-03-11 2017-05-09 Google Inc. Optimized matrix multiplication using vector multiplication of interleaved matrix values
CN109240746B (zh) * 2016-04-26 2020-12-18 安徽寒武纪信息科技有限公司 一种用于执行矩阵乘运算的装置和方法
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10140574B2 (en) * 2016-12-31 2018-11-27 Via Alliance Semiconductor Co., Ltd Neural network unit with segmentable array width rotator and re-shapeable weight memory to match segment width to provide common weights to multiple rotator segments
US11360770B2 (en) 2017-03-20 2022-06-14 Intel Corporation Systems, methods, and apparatuses for zeroing a matrix
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
CN112214726B (zh) * 2017-07-07 2024-05-03 华为技术有限公司 运算加速器
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
CN110262773B (zh) * 2019-04-28 2020-08-04 阿里巴巴集团控股有限公司 一种计算机数据处理方法及装置
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN111694541B (zh) * 2020-05-06 2023-04-21 常熟理工学院 一种用于数论变换乘法的基32运算电路
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US12112167B2 (en) 2020-06-27 2024-10-08 Intel Corporation Matrix data scatter and gather between rows and irregularly spaced memory locations
US11227641B1 (en) * 2020-07-21 2022-01-18 Micron Technology, Inc. Arithmetic operations in memory
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
CN112433760B (zh) * 2020-11-27 2022-09-23 海光信息技术股份有限公司 数据排序方法和数据排序电路
US12001887B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
US12001385B2 (en) 2020-12-24 2024-06-04 Intel Corporation Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator
RU2764876C1 (ru) * 2021-04-13 2022-01-21 Акционерное общество "Концерн "Созвездие" Накапливающий сумматор-вычитатель по модулю произвольного натурального числа
CN117149129B (zh) * 2023-10-31 2024-01-26 共模半导体技术(苏州)有限公司 专用大整数乘法微控制器

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2758195B1 (fr) 1997-01-09 1999-02-26 Sgs Thomson Microelectronics Coprocesseur d'arithmetique modulaire comprenant deux circuits de multiplication operant en parallele
US6026483A (en) * 1997-10-23 2000-02-15 Advanced Micro Devices, Inc. Method and apparatus for simultaneously performing arithmetic on two or more pairs of operands
DE69828150T2 (de) 1998-03-30 2005-12-15 Rainbow Technologies Inc., Irvine Vom Rechenaufwand her effizientes modulares Multiplikationsverfahren und Gerät
US6484194B1 (en) 1998-06-17 2002-11-19 Texas Instruments Incorporated Low cost multiplier block with chain capability
US6633896B1 (en) * 2000-03-30 2003-10-14 Intel Corporation Method and system for multiplying large numbers
JP3709553B2 (ja) 2000-12-19 2005-10-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 演算回路および演算方法
US7296049B2 (en) * 2002-03-22 2007-11-13 Intel Corporation Fast multiplication circuits
FR2853424B1 (fr) 2003-04-04 2005-10-21 Atmel Corp Architecture de multiplicateurs polynomial et naturel combines
FR2853425B1 (fr) 2003-04-07 2006-01-13 Atmel Corp Sequence de multiplication efficace pour operandes a grands nombres entiers plus larges que le materiel multiplicateur
US8194855B2 (en) 2003-06-30 2012-06-05 Oracle America, Inc. Method and apparatus for implementing processor instructions for accelerating public-key cryptography
US7480690B2 (en) 2003-12-29 2009-01-20 Xilinx, Inc. Arithmetic circuit with multiplexed addend inputs
JP4408712B2 (ja) 2004-01-26 2010-02-03 富士通マイクロエレクトロニクス株式会社 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
US7672989B2 (en) 2005-05-09 2010-03-02 Sandisk Il Ltd. Large number multiplication method and device

Also Published As

Publication number Publication date
TWI438678B (zh) 2014-05-21
WO2009023595A1 (en) 2009-02-19
US20090043836A1 (en) 2009-02-12
CN101790718A (zh) 2010-07-28
CN101790718B (zh) 2013-11-06
US8028015B2 (en) 2011-09-27
DE112008002158B4 (de) 2023-05-04
TW200915174A (en) 2009-04-01

Similar Documents

Publication Publication Date Title
DE112008002158T5 (de) Verfahren und System zur Multiplikation großer Zahlen
DE69130581T2 (de) Verfahren zur Berechnung einer Operation des Typus A.X modulo N, in einem Kodierverfahren gemäss der RSA-Methode
DE69838390T2 (de) Verbessertes gerät und verfahren für modulare multiplikation und exponentation basierend auf montgomerymultiplikation
DE60215835T2 (de) Reduzierung von komponenten in einer montgomery multiplikations-recheneinheit
DE69703085T2 (de) Koprozessor mit zwei parallel arbeitenden Multiplizierschaltungen
DE10393918T5 (de) Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern
DE69329260T2 (de) Gerät zum Multiplizieren von Ganzzahlen mit vielen Ziffern
DE69132129T2 (de) In der Grundzahl 4 arbeitende Übertragvorgriffsbäume
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
DE69229464T2 (de) Quasi radix-16 prozessor und verfahren
DE19758079A1 (de) Verfahren und Vorrichtung zur Galoisfeld-Multiplikation
DE1524162A1 (de) Einrichtung zur parallel-simultanen Verarbeitung zusammengehoeriger Gruppen von Daten
DE2658248C2 (de)
DE1549476A1 (de) Anordnung zur Ausfuehrung von Divisionen
DE102019133699A1 (de) Anweisungssatz für hybrid-cpu und analogen speicherinternen künstliche-intelligenz-prozessor
DE2338469A1 (de) Programmierbares digitales datenverarbeitungsgeraet
DE19781794C2 (de) Verfahren und Einrichtung zur Division von Gleitkomma- oder ganzen Zahlen
DE102007056104A1 (de) Verfahren und Vorrichtung zur Multiplikation von Binäroperanden
DE102006025569A1 (de) Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor
DE10357661A1 (de) Modularer Montgomery-Multiplizierer und zugehöriges Multiplikationsverfahren
DE69900142T2 (de) Verfahren zur Ausführung der modularen Multiplikation nach der Montgomery-Methode
DE2830334C2 (de)
DE202014011350U1 (de) FFT- Beschleuniger
DE69906348T2 (de) Speicher mit vektorzugriff

Legal Events

Date Code Title Description
8127 New person/name/address of the applicant

Owner name: INSIDE CONTACTLESS S.A., AIX-EN-PROVENCE, FR

R081 Change of applicant/patentee

Owner name: INSIDE SECURE, FR

Free format text: FORMER OWNER: ATMEL CORPORATION, SAN JOSE, CALIF., US

Effective date: 20110225

R082 Change of representative

Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUS, DE

R081 Change of applicant/patentee

Owner name: INSIDE SECURE, FR

Free format text: FORMER OWNER: INSIDE CONTACTLESS S.A., AIX-EN-PROVENCE, FR

Effective date: 20131111

R082 Change of representative

Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUS, DE

Effective date: 20131111

Representative=s name: GRUENECKER PATENT- UND RECHTSANWAELTE PARTG MB, DE

Effective date: 20131111

R012 Request for examination validly filed
R016 Response to examination communication
R081 Change of applicant/patentee

Owner name: VERIMATRIX, FR

Free format text: FORMER OWNER: INSIDE SECURE, MEYREUIL, FR

Owner name: RAMBUS INC. (N.D.GES.D. STAATES DELAWARE), SUN, US

Free format text: FORMER OWNER: INSIDE SECURE, MEYREUIL, FR

Owner name: RAMBUS INC. (N.D.GES. DES STAATES DELAWARE), S, US

Free format text: FORMER OWNER: INSIDE SECURE, MEYREUIL, FR

R082 Change of representative

Representative=s name: GRUENECKER PATENT- UND RECHTSANWAELTE PARTG MB, DE

Representative=s name: EISENFUEHR SPEISER PATENTANWAELTE RECHTSANWAEL, DE

R081 Change of applicant/patentee

Owner name: RAMBUS INC. (N.D.GES.D. STAATES DELAWARE), SUN, US

Free format text: FORMER OWNER: VERIMATRIX, MEYREUIL, FR

Owner name: RAMBUS INC. (N.D.GES. DES STAATES DELAWARE), S, US

Free format text: FORMER OWNER: VERIMATRIX, MEYREUIL, FR

R082 Change of representative

Representative=s name: EISENFUEHR SPEISER PATENTANWAELTE RECHTSANWAEL, DE

R081 Change of applicant/patentee

Owner name: RAMBUS INC. (N.D.GES. DES STAATES DELAWARE), S, US

Free format text: FORMER OWNER: RAMBUS INC. (N.D.GES.D. STAATES DELAWARE), SUNNYVALE, CA, US

R082 Change of representative

Representative=s name: EISENFUEHR SPEISER PATENTANWAELTE RECHTSANWAEL, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final