-
Die Erfindung bezieht sich auf einen
Computerprozessor mit einem Befehls-Cache und auf ein Verfahren zur Erzeugung
von Befehlen für
solche einen Computerprozessor.
-
Die Erfindung bezieht sich insbesondere
auf einen VLIW Prozessor (VLIW = Very Long Instruction Word) und
insbesondere auf Befehls-Formate für solche Prozessoren und auf
eine Einrichtung und ein Verfahren zur Bearbeitung solcher Befehls-Formate.
-
VLIW-Prozessoren haben Befehls-Worte,
die eine Vielzahl von Ausgabe-Slots beinhalten. Die Prozessoren
beinhalten auch eine Vielzahl von funktionellen Einheiten. Jede
funktionelle Einheit ist dazu bestimmt, einen Satz von Operationen
eines gegebenen Typs auszuführen.
Jede funktionelle Einheit ist RISC-ähnlich in dem sie in jedem
Maschinenzyklus einen Befehl nach Art einer Pipeline beginnen kann.
Jeder Ausgabe-Slot ist dazu da, eine jeweilige Operation zu halten.
Alle Operationen in dem selben Befehlswort werden parallel in der
Funktionseinheit in einem einzigen Zyklus des Prozessors begonnen.
Der VLIW implementiert so eine feinkörnige Parallelität.
-
Ein Befehl in einer VLIW Maschine
beinhaltet so typischerweise eine Vielzahl von Operationen. In konventionellen
Maschinen dürfte
jede Operation als ein separater Befehl bezeichnet werden. In der
VLIW Maschine wird jeder Befehl jedoch von Operationen oder no-ops
(Dummy-Operationen) gebildet.
-
VLIW-Prozessoren verwenden, wie konventionelle
Prozessoren, eine Speichereinrichtung, wie z. B. ein Plattenlaufwerk,
um die Befehlströme
vor der Ausführung
durch den Prozessor zu speichern. Ein VLIW-Prozessor kann auch,
wie ein konventioneller Prozessor, Caches verwenden, um Teile von
Befehlsströmen
mit breitbandiger Zugriffsmöglichkeit
zu dem Prozessor zu speichern.
-
Der Befehl in der VLIW Maschine wird
von einem Programmierer oder einem Compiler aus diesen Operationen
aufgebaut. Damit ist die Planung des zeitlichen Ablaufs in dem VLIW-Prozessor
softwaregesteuert.
-
Der VLIW-Prozessor kann mit anderen
Typen von Parallel-Prozessoren, wie bspw. Vektor-Prozessoren und
Superscalar-Prozessoren, wie im Folgenden beschrieben verglichen
werden. Vektor-Prozessoren haben einzelne Operationen, die von multiplen
Datenelementen simultan geführt
werden. Superscalar-Prozessoren implementieren feinkörnige Parallelität, wie die
VLIW-Prozessoren.
Aber unähnlich
zu den VLIW-Prozessoren, führen
die Superscalar-Prozessoren die zeitliche Ablaufplanung der Operationen
in Hardware durch.
-
Wegen der langen Befehlsworte haben
VLIW-Prozessoren verstärkt
Probleme mit der Cache-Nutzung. Insbesondere verursacht das große Format
des Codes Cache-Versäumnisse,
d. h. Situationen, in denen benötigte
Befehle nicht im Cache sind. Große Codeformate erfordern auch
eine größere Hauptspeicher-Bandbreite um Code
von dem Hauptspeicher zu dem Cache zu transferieren.
-
Weitere Informationen über den
technischen Hintergrund dieser Anmeldung können in der parallel anhängigen Patentanmeldung
EP 0 843 848 , die von den Erfindern
der vorliegenden Patentanmeldung stammt und demselben Anmelder zugeordnet
ist, und in den folgenden, vorgehenden Anmeldungen gefunden werden:
- – US
Anmeldung Ser. No. US 5 450 556 ,
eingereicht am 25. Oktober 1993 (PHA 1205), welche die Verwendung
von Wächterbits
(guard Bits) zeigt; und
- – US
Anmeldung Ser. No. WO 96/21 186, eingereicht am 30. Dezember 1994
(PHA 21,932), welche ein Register-File für die Verwendung mit der VLIW
Architektur zeigt.
-
Ein Computer, der einen Befehls-Cache
gemäß dem Oberbegriff
von Anspruch 1 enthält,
ist aus dem Dokument US-A-5442760 bekannt. Dieses Dokument offenbart
einen Befehls-Cache, der zwischen einer Dekodier-Stufe und einer
Vielzahl von Funktionseinheiten angeordnet ist, die parallel mehrere
Befehle ausführt. Im
Gegensatz zu dem Computersystem der vorliegenden Anmeldung, bei
der ein Befehl pro Zugriff abgerufen wird, können gemäß dem Cache von US-A-5442760
mehrere Befehle aus dem Cache pro Zugriff ausgelesen werden. Deshalb
ist das Bit-Muster in dem Befehls-Cache nicht eine Bit für Bit Kopie
der Befehle in dem Befehls-Speicher.
-
Es ist eine Aufgabe der Erfindung
das Cache-Layout zu vereinfachen.
-
Es ist eine andere Aufgabe der Erfindung
ein Verfahren zur Erzeugung eines gemischten Bitstromes anzugeben,
der ein vereinfachtes Cache-Layout erlaubt.
-
Die Erfindung sieht einen Computerprozessor
wie in Anspruch 1 angegeben vor.
-
Dies ermöglicht es, den Eingabe-Bus
und den Ausgabe-Bus unabhängig
voneinander anzulegen, um die Anforderungen der Verbindungen zu
dem Hauptspeicher bzw. zu der Verarbeitungseinheit zu befriedigen. So
wird ein gemischter Bitstrom verwendet, der das Cache-Layout vereinfacht.
Der Cache speichert einen gemischten Befehls-Strom und multiplext
Bits von Speichermitteln so auf einen Bus, so dass die Bits entmischt werden.
Eine Vielfachheit von Leitungen führen von den Speichermitteln
zu dem Bus.
-
Die Leitungen kreuzen sich nicht
gegenseitig.
-
Die Erfindung bezieht sich auch auf
ein Verfahren, wie es in Anspruch 7 angegeben ist. Ein von kompiliertes
und gelinktes Objekt-Modul, das von einem Compiler und/oder Linker
generiert ist, und Code wird empfangen, um die kompilierte und gelinkte
Software zur Generierung eines zweiten Objekt-Moduls zu verquirlen.
Das zweite Objekt-Modul ist geeignet auf das Auslesen aus dem Cache-Speicher
hin entquirlt zu werden, der eine Cache-Struktur verwendet, deren
Ausgabe-Bus Leitungen nicht gekreuzt sind.
-
Kurze Beschreibung der
Zeichnungen:
-
Die Erfindung wird nun anhand eines
nicht emittierenden Beispieles unter Bezugnahme auf die folgenden
Figuren beschrieben:
-
1a zeigt
einen Prozessor zur Verwendung des komprimierten Befehlsformats
der Erfindung;
-
1b zeigt
weitere Details der CPU des Prozessors von 1a;
-
2a–2e zeigen mögliche Positionen
von Befehlen in dem Cache;
-
3 verdeutlicht
Kompilierung und Verlinkung von Code gemäß der Erfindung;
-
4 ist
ein Flussdiagramm der Kompressions- und Vermischungsmodule;
-
5 expandiert
die Box 902 von 4;
-
6a ist
eine schematische Darstellung der Funktionsweise des Befehls-Cache 103 bei
Eingabe;
-
6b ist
eine schematische Darstellung der Funktionsweise eines Teils des
Befehls-Cache 103 bei Ausgabe;
-
7 ist
eine schematische Darstellung der Funktionsweise des Befehls-Cache 104 bei
Ausgabe;
-
8 verdeutlicht
das Dekompressions-Verfahren.
-
1a zeigt
die generelle Struktur eines erfindungsgemäßen Prozessors. Ein erfindungsgemäßer Mikroprozessor
beinhaltet eine CPU 102, einen Befehls-Cache 103 und einen Daten-Cache 105.
Die CPU ist mit den Caches durch breitbandige Busse verbunden. Der
Mikroprozessor enthält
einen Speicher 104, in dem ein Befehlsstrom gespeichert
wird.
-
Der Cache 103 ist so strukturiert,
dass er 512 Bit Doppel-Worte hat. Die individuellen Bytes in den
Worten, nicht jedoch die Bits, sind adressierbar. Bytes sind 8 Bits
lang. Vorzugsweise kann auf die Doppel-Worte als ein Einzel-Wort in einem einzelnen
Takt-Zyklus zugegriffen werden.
-
Der Befehlsstrom ist als Befehle
in einem komprimierten Format gespeichert.
-
Das komprimierte Format wird sowohl
in dem Speicher 104 als auch in dem Cache 103 verwendet.
-
1b zeigt
weitere Details des erfindungsgemäßen VLIW-Prozessors. Der Prozessor
beinhaltet ein Multiport-Register-File 150, eine Anzahl
von funktionellen Einheiten 151, 142, 153,
..., und ein Befehlsausgabe-Register 154, abgekürzt durch
IIR. Das Multiport-Register-File speichert Ergebnisse von und Operanden für die funktionellen
Einheiten. Das Befehlsausgabe-Register beinhaltet eine Vielzahl
von Ausgabe-Slots zum Halten von Operationen. die in einem einzigen
Takt-Zyklus parallel von den Funktionseinheiten 151, 152, 153, ...
begonnen werden. Eine Dekompressionseinheit 155 konvertiert
die komprimierten Befehle aus dem Befehls-Cache 103 in
eine Form, das von dem IIR 154 verwendbar ist.
-
Kurz gesagt enthält ein komprimierter Befehl
ein Formatfeld, welches spezifiziert, welche Ausgabe-Slots von dem
komprimierten Befehl zu verwenden sind. Zur Widergewinnung von Leistungsfähigkeit
werden Format-Bits
in dem Befehl gespeichert, der dem Befehl vorangeht, auf den sich
die Format-Bits beziehen. Dies ermöglicht eine Pipelineverarbeitung
bei der Befehlswiedergewinnung. Es sind 2*N Format-Bits für eine N-Ausgabe-Slot- Maschine vorhanden,
organisiert als N Gruppen von 2 Bits, wobei jede Gruppe sich auf
einen Ausgabe-Slot bezieht. Die Bits in einer Gruppe spezifizieren,
ob der korrespondierende Ausgabe-Slot zu verwenden ist, und spezifizieren
die Operationslänge,
die von der Operation für
diesen Ausgabe-Slot in dem Befehl besetzt ist.
-
Die 2a–2e zeigen mögliche Positionen
von Befehlen in dem Cache.
-
3 zeigt
ein Diagramm darüber,
wie Quell-Code zu einem ladbaren, komprimierten Objekt-Modul wird.
Zuerst muß der
Quell-Code 801 durch den Compiler 802 kompiliert
werden, um einen ersten Satz von Objekt-Modulen 803 zu
erzeugen. Diese Module werden durch einen Linker 804 verlinkt
um einen zweiten Typ von Objekt-Modul 805 zu erzeugen.
Dieses Modul wird dann von 806 komprimiert und gemischt um ein ladbares
Modul 807 zu ergeben.
-
Jeder Standardcompiler oder Linker
kann verwendet werden. Objekt-Module II enthalten eine Anzahl von
Standard-Datenstrukturen. Diese beinhalten einen Header, globale & lokale Symbol-Tabellen,
Referenz-Tabellen für
verlagerte Informationen, eine Sektions-Tabelle und Debug Informationen,
von denen einige von dem Kompressions- und Mischungsmodul 807 verwendet
werden. Das Objekt-Modul II besitzt auch Partitionen, einschließlich einer
Text-Partition, wo sich die zu bearbeitenden Befehle befinden, und
einer Quell-Partition, welche die Übersicht darüber beinhalten,
von welchem Quell-File der Text gekommen ist.
-
4 zeigt
ein Flussdiagramm hoher Ebene des Kompressions- und Mischmoduls.
Bei 901 wird das Objekt-Modul II eingelesen. Bei 902 wird
die Text-Partition bearbeitet. Bei 903 werden die anderen
Sektionen bearbeitet. Bei 904 wird der Header aktualisiert.
Bei 905 wird das Objekt-Modul ausgegeben.
-
5 expandiert
die Box 902. Bei 1001 werden die Referenz-Tabellen,
d. h. Auslagerungs-Informationen gesammelt. Bei 1002 werden
die Verzweigungsziele gesammelt, da diese nicht zu komprimieren
sind. Bei 1003 überprüft die Software,
ob weitere Files in der Quell-Partition sind. Falls dies der Fall
ist, wird bei 1004 der dem nächsten File entsprechende Teil
gewonnen. Dann, bei 1005, wird dieser Teil komprimiert.
Bei 1006 wird die File Information in der Quell-Partition
aktualisiert. Bei 1007 wird die lokale Symboltabelle aktualisiert. Wenn
keine Files mehr in der Quell-Partition sind, wird die globale Symboltabelle
bei 108 aktualisiert. Dann, bei 1009, werden Adress-Referenzen
in der Text-Sektion aktualisiert. Dann, bei 1010 wird die
256-Bit Mischung bewirkt. Die Beweggründe für solche einen Mischung werden
weiter unten diskutiert werden.
-
Nun wird die Befehlssequenz der Box 1005 von 5 erklärt. Zuerst wird bestimmt, ob
weiter zu komprimierende Befehle vorhanden sind. Falls dies der
Fall ist, wird der nächste
Befehl gewonnen. Nacheinander wird jede Operation in dem Befehl
komprimiert und eine Zerstreuungs-Tabelle aktualisiert. Die Zerstreuungs-Tabelle
(scatter table) ist eine neue Datenstruktur, die als eine Folge
der Kompression und Mischung verwendet wird, welche weiter weiter
unten erklärt
wird. Dann werden all die Operationen in einem Befehl und die Format-Bits
eines nachfolgenden Befehls miteinander kombiniert. Im Anschluß daran
müssen
die Auslagerungsinformationen in der Referenz-Tabelle aktualisiert
werden, falls der augenblickliche Befehl eine Adresse enthält. Dann
werden die Informationen gesammelt, die benötigt werden, um Adressreferenzen
in der Text-Sektion aktualisieren. Der komprimierte Befehl wird
an das Ende des Ausgabe-Bit-Strings angehängt und die Steuerung wird
zurückgegeben.
Wenn keine Befehle mehr vorhanden sind kehrt die Steuerung zur Box 106 von 5 zurück.
-
Die Zerstreuungs-Tabelle, die als
Folge der Kompression und Mischung der Erfindung verwendet wird, kann
wie folgt erklärt
werden.
-
Die Referenz-Tabelle enthält eine
Liste von Orten von Adressen, die von dem Befehlsstrom verwendet werden,
und eine korrespondierende Liste der aktuellen Adressen, die bei
solchen Orten gelistet sind.
-
Wenn der Code komprimiert wird und
wenn er geladen wird, müssen
diese Adressen aktualisiert werden.
-
Demgemäß wird die Referenz-Tabelle
zu diesen Zeiten verwendet um das updaten zu erlauben.
-
Jedoch werden die aktuellen Bits
der Adressen voneinander getrennt und neu geordnet, wenn der Code
komprimiert und gemischt wird. Deshalb führt die Zerstreuungs-Tabelle
für jede
Adresse in der Referenz-Tabelle an, wo jedes Bit ansässig ist.
In dem bevorzugten Ausführungsbeispiel
führt die
Tabelle die Breite eines Bit-Felds, den Abstand von dem korrespondierenden
Index der Adresse in dem Quell-Text, und den korrespondierenden
Abstand von dem korrespondierenden Index der Adresse in dem Ziel-Text
an.
-
Wenn das Objekt-Modul III geladen
wird um auf den Prozessor zu laufen, erlaubt die Zerstreuungs-Tabelle,
dass die in der Referenz-Tabelle gelisteten Adressen aktualisiert
werden, sogar bevor die Bits entmischt werden.
-
Damit der VLIW Prozessor die wie
oben beschrieben komprimierten Befehle bearbeiten kann, müssen die
Befehle dekomprimiert werden. Nach der Dekomprimierung werden die
Befehle das Befehlsregister ausfüllen,
welches N Ausgabe-Slots hat, wobei N im Fall des bevorzugten Ausführungsbeispiels
5 ist.
-
8 ist
ein Schema des Dekompressions-Prozesses. Befehle kommen von dem
Speicher 1201, d. h. entweder von dem Hauptspeicher 104 oder
von dem Befehls-Cache 105. Die Befehle müssen dann
entmischt werden 1201, was im weiteren weiter unten erklärt wird,
bevor sie dekomprimiert werden 1203. Nach der Dekompression 1203 können die
Befehle zu der CPU 1204 weitergeleitete werden.
-
Bitverquirlung
-
Wo Befehle lang sind, bspw. 512 Bit
Doppel-Worte wird die Cache-Struktur Komplex. Es ist vorteilhaft, die
Bits der Befehle zu verquirlen (swizzle), um das Layout des Chips
zu vereinfachen. Hierbei werden die Begriffe „verquirlen" (swizzle) und vermischen
(shuffle) verwendet um die selbe Sache zu bezeichnen. Das folgende
stellt einen Algorithmus zur Verquirlung von Bits dar.
wobei i, j und k ganzzahlige
Indizes sind; word_shuffled eine Matrix zur Speicherung von Bits
eines gemischten Wortes ist; und word_unshuffled eine Matrix zur
Speicherung von Bits eines nichtgemischten Wortes ist.
-
Auf diese Art ist der Index, an den
ein Bit in dem Array „word
shuffled" geschrieben
wird, ein n = 3-3Bit logische Rotation des Index an dem das Bit
von dem Array „word
unshuffled" gelesen
wird (In einer n-Bit logischen Rotation werden die Bits des Index
um n-Bits zu einer Position höherer
Signifikanz geschoben und die n-Bits höchster Signifikanz des Index
an den n wenigsten signifikanten Positionen plaziert). Die spezielle
Wahl einer n = 3-Bit Rotation wird für den hierin im Folgenden beschriebenen
Fall ausgewählt,
bei dem die räumliche Ausgabeordnung
von gelesenen Bits aus dem Cache eine zyklische Überlappung von Bits von 8 (=
2n n = 3) verschiedenen Speicherbänken ist.
-
Cache-Struktur
-
6a zeigt
die Funktionsweise am Eingang einer Cache-Struktur die zur effizienten
Bearbeitung von VLIW Befehlen verwendbar ist. Dieser Cache beinhaltet
16 Banken 601–616 von
jeweils 2k Bytes. Diese Bänke
teilen sich einen Eingabe-Bus 617. Die Caches sind in zwei
Stapel geteilt. Der Stapel auf der linken Seite wird als „low" und der Stapel auf
der rechten Seite wird als „high" bezeichnet werden.
Der Cache kann eine Eingabe nur in eine Bank zu einer Zeit und dann
nur 4 Bytes zu einer Zeit annehmen. Die Adressierung bestimmt, welche
4 Bytes von welcher Bank gefüllt
werden. Für
jedes 512 Bit Wort, das in dem Cache zu speichern ist, werden vier
Bytes in jeder Bank gespeichert. Ein schattierter Bereich jeder
Bank ist dargestellt, der korrespondierende Teile jeder Bank zum
Laden eines gegebenen Wortes zeigt. Diese schattierten Bereiche dienen
ausschließlich
der Illustration. Jedes gegebene Wort kann in einem beliebigen Satz
von korrespondierenden Teilen der Banken beladen werden.
-
Nach der Verquirlung gemäß dem oben
angedeuteten Algorithmus werden sequenzielle 4 Byte Teile des verquirlten
Wortes in die Banken in der folgenden Reihenfolge 608, 616, 606, 614, 604, 612, 602, 610, 607, 615, 605, 613, 603, 611, 601, 609 geladen.
Die Reihenfolge des Ladens der 4 Byte Teile des verquirlten Wortes
wird durch römische
Ziffern in den die Banken repräsentierenden
Boxen angedeutet.
-
6b zeigt,
wie das verquirlte Wort aus dem Cache ausgelesen wird. 6b zeigt nur die schattierten
Bereiche der Banken des low Stapels. Der high Teil ist Analog. Jeder
schattierte Bereich 601a–608a hat 32 Bits.
Die Bits werden auf den Ausgabe-Bus, der als bus246low bezeichnet
ist, unter Verwendung der gezeigten Verbindungen geladen, d. h.
in der folgenden Reihenfolge geladen: 608a – bit0, 607a – bit 0,
..., 601a – bit
0; 608a – bit
1, 607a - bit, ... 601a – bit 1; ...; 608a – bit 31, 607a – bit 31,
..., 601a – bit
31. Bei der Verwendung dieser Verbindungen wird das Wort automatisch
zurück
zu seiner korrekten Bitreihenfolge entquirlt.
-
Die Bündel der Leitungen 620, 621,
..., 622 bilden zusammen den Ausgabe-Bus bus256low. Diese
Leitungen durchlaufen den Cache hin zum der Ausgang ohne Kreuzung.
-
Beim Ausgang sieht der Cache wie
in 7 aus. Die Bits werden
von dem Stapel low 701 und Stapel high 702 unter
der Kontrolle der Steuereinheit 704 über ein Schiebe-Netzwerk 703 ausgelesen,
welches sicherstellt, dass die Bits sich in der oben spezifizierten
Ausgabenreihenfolge befinden. Auf diese Weise wird die gesamte Ausgabe
des 512 Bit Worts ohne Bündel 620, 621,
... 622 und analoge Leitungen, die sich kreuzen, sichergestellt.
-
Zusammenfassend stellt die Erfindung
einen Befehls-Speicher zur Verwendung in einem Computerprozessor
bereit, der
Mittel zur Speicherung jeweiliger Bits eines Befehls-Stroms
aufweist, welche vorvermischt sind; und
Mittel zum Multiplexen
von Bits von den Speichermitteln auf einen Bus aufweist, so dass
die Bits entmischt werden, wobei diese Multiplexmittel eine Vielzahl
von von den Speichermittel zu dem Bus führenden Leitungen aufweisen,
die sich nicht gegenseitig kreuzen. Vorzugsweise ist der Befehls-Strom
in Doppel-Wort-Format; und der Cache weist einen ersten Stapel zur
Speicherung erster Worte des Doppel-Wort-Formats und einen zweiten Stapel zur
Speicherung zweiter Worte des Doppel-Wort-Formats auf.
-
Vorzugsweise sind die Stapel in Banken
organisiert und es existiert eine Bank für jedes Bit eines Ausgabe-Bytes
auf dem Ausgabe-Bus. Die Multiplexmittel sind fähig, ein Bit von jeder Bank
zu transferieren, um ein Ausgabe-Byte zu erzeugen.
-
Vorzugsweise ist der Cache dazu geeignet
n Befehle zu speichern, wobei n eine Integervariable ist und jede
Bank zumindest ein jeweiliges Bit von jedem der n-Befehle enthält.
-
Jede Bank enthält eine RAM-Spalte für jedes
Byte eines Ausgabeworts. Die RAM-Spalten sind in m-Gruppen organisiert,
wobei m ein integer Wert ist, der eine Anzahl von Bytes in dem Ausgabewort
repräsentiert,
jede jeweilige Gruppe eine jeweilige RAM-Spalte für jedes
Bit des Ausgabe-Wortes enthält
und keine zwei RAM-Spalten in einer einzelnen Gruppe in derselben
Bank sind. Die Multiplexmittel weisen m Spaltenmultiplexer auf,
wobei jeder Spaltenmultiplexer fähig
ist, ein Bit von jeder RAM-Spalte in der jeweiligen Gruppe in das Ausgabe-Wort
zu multiplexen.
-
Gemäß eines Ausführungsbeispiels
weist der Befehls-Speicher erste und zweite Stapel von acht Banken
auf, wobei jede Bank 8 RAM-Spalten
von 1-Bit 64 RAM-Zellen aufweist, die RAM-Spalten in Gruppen von acht
RAM-Spalten organisiert sind, der erste Stapel dazu bestimmt ist,
Bits niedriger Ordnung einer Doppel-Wort-Ausgabe zu speichern und
der zweite Stapel dazu bestimmt ist, die Zuordnung der Doppel-Wort-Ausgabe zu speichern.
Die Multiplexmittel sind fähig
ein Bit von jeder RAM-Spalte in jeder jeweiligen Gruppe in das Ausgabe-Wort
zu multiplexen.
-
Vorzugsweise weist der Cache erste
und zweite Busse auf, wobei die ersten Busse dazu bestimmt sind,
Bits niedriger Ordnung eines Ausgabewortes auszugeben und der zweite
Bus dazu bestimmt ist, Bits hoher Ordnung eines Ausgabeworts auszugeben.
Als Ergebnis der Mischung der Bits können die Leitungen der ersten
und zweiten Busse in derselben Ebene des Prozessors ohne Kreuzungen
liegen.
-
Um einen Befehls-Strom für den Computerprozessor
zu erzeugen wird Computersoftware bereitgestellt, die auf einem
Computerspeichermedium gespeichert ist, um verquirlte Befehle zu
erzeugen, die:
- – Code zum Empfang eines kompilierten
und gelinkten Objekt-Moduls,
das von einem Compiler und/oder Linker erzeugt ist, zu empfangen,
wobei das Objekt-Modul in einem Computerspeichermedium gespeichert ist;
und
- – Code
zur Verquirlung der kompilierten und gelinkten Software zur Erzeugung
eines zweiten Objekt-Moduls aufweist, wobei das zweite Objekt-Modul
dazu geeignet ist, beim Auslesen aus einem Cache-Speicher unter
Verwendung einer Cache-Struktur entquirlt zu werden, deren Ausgabe-Bus-Leitungen
nicht gekreuzt sind.
-
Der Code zur Verquirlung erzeugt
vorzugsweise eine Zerstreuungs-Tabelle,
die in einem Computerspeichermedium gespeichert ist, um die Positionen
der Bits von vermischten Befehlen relativ zu den Befehlen speichert,
von denen die Bits stammen.
-
Auf diese Weise sieht die Erfindung
einen auf einem Computerspeichermedium gespeicherten Bit-Strom vor,
welcher zumindest einen Teil eines Befehls zur Ausführung auf
einem Computerprozessor und gespeichert auf einem Computerspeichermedium
beinhaltet, wobei der Teil eine Vielzahl von in einer vermischten
Reihenfolge befindlichen Bits beinhaltet, welche ein vereinfachtes
Chip-Layout für
den Computerprozessor ermöglichen.
-
Der Befehl hat bspw. 512 Bits.