-
Die Erfindung betrifft eine Vorrichtung und ein Verfahren zum Betreiben eines Systems mit einer Mehrzahl von Speichermodulen und einer Mehrzahl von Recheneinheiten, sowie eine Vorrichtung und ein Verfahren zur Generierung von Programmcode für ein solches System.
-
Stand der Technik
-
Aus der
DE 10 2013 224 702 A1 ist ein Steuergerät für ein Kraftfahrzeug bekannt, wobei das Steuergerät wenigstens zwei Prozessorkerne und einen globalen Speicher umfasst, wobei jeder Prozessorkern jeweils einen lokalen Speicher umfasst und wobei jeder Prozessorkern dazu eingerichtet ist, nur auf seinen eigenen lokalen Speicher zuzugreifen und dazu eingerichtet ist, weder auf die lokalen Speicher der übrigen Prozessorkerne noch auf den globalen Speicher zuzugreifen, wobei eine Koordinationseinheit dazu eingerichtet ist, Daten aus dem globalen Speicher des Steuergeräts einzulesen und in die lokalen Speicher der einzelnen Prozessorkerne zu schreiben und Daten aus den lokalen Speichern der einzelnen Prozessorkerne einzulesen und in den globalen Speicher und/oder in den lokalen Speicher der übrigen Prozessorkerne zu schreiben.
-
Offenbarung der Erfindung
-
Will man ein System mit einer Ein- oder Mehrzahl an Recheneinheiten und einer Mehrzahl an Speichermodulen optimieren, ist ein wichtiger Schritt, das Datenelemente, die von einer oder mehrerer der Recheneinheiten benutzt werden, in einem optimal ausgewählten Speichermodul abgelegt werden.
-
In embedded Systemen, insbesondere in Steuergeräten in Kraftfahrzeugen, wird bereits bei der Erzeugung von Programmcode für jedes Datenelement festgelegt, in welchem Speichermodul das Datenelement gespeichert wird.
-
Die Erfindung mit den Merkmalen der unabhängigen Ansprüche hat den Vorteil, dass effizient automatisiert entschieden werden kann, in welchem der Speichermodule das Datenelement gespeichert wird. Vorteilhafte Weiterbildungen sind Gegenstand der abhängigen Ansprüche.
-
In einem ersten Aspekt betrifft die Erfindung daher ein Verfahren zum Betreiben eines Systems mit einer Mehrzahl von Speichermodulen und einer Ein- oder Mehrzahl von Recheneinheiten, wobei entschieden wird ob in einem ersten Speichermodul einer Mehrzahl von Speichermodulen des System ein Datenelement, insbesondere eine Variable, gespeichert wird, wobei für das erste Speichermodul der Mehrzahl von Speichermodulen eine Gesamtzugriffszeit einer Recheneinheit einer Ein- oder Mehrzahl von Recheneinheiten auf dieses eine Datenelement in diesem ersten Speichermodul abhängig von einer Lesezugriffshäufigkeit ermittelt wird, wobei die Lesezugriffshäufigkeit angibt, wie häufig diese Recheneinheit des Systems, insbesondere über eine Kommunikationsverbindung, Lesezugriffe auf dieses Datenelement durchführt, und wobei die Gesamtzugriffszeit auch abhängig von einer durchschnittlichen Dauer eines Lesezugriffs dieser Recheneinheit auf dieses erste Speichermodul ermittelt wird, wobei diese durchschnittliche Dauer die Dauer eines solchen Lesezugriffs angibt, wenn das Datenelement in dieser Recheneinheit gespeichert ist, wobei abhängig von dieser ermittelten Gesamtzugriffszeit dieser Recheneinheit auf dieses Datenelement in diesem ersten Speichermodul darauf entschieden wird, ob das Datenelement in diesem ersten Speichermodul oder in einem anderen Speichermodul der Mehrzahl von Speichermodulen gespeichert wird.
-
Die Häufigkeit der Lesezugriffe dieser Recheneinheit auf dieses Datenelment kann hierbei eine relative Häufigkeit sein. Die Datenelemente können insbesondere Variablen sein, aber auch größere Datenblöcke.
-
Die Häufigkeit der Lesezugriffe und/oder die durchschnittliche, also zu erwartende, Dauer des Lesezugriffs kann beispielsweise in einer Tabelle hinterlegt sein.
-
In einer Weiterbildung dieses Aspekts wobei die Gesamgzugriffszeit dieser Recheineinheit auf dieses Datenelement in diesem ersten Speichermodul auch abhängig von einer Schreibzugriffshäufigkeit ermittelt wird, wobei die Schreibzugriffshäufigkeit angibt, wie häufig die Recheneinheit der Ein- oder Mehrzahl von Recheneinheiten des Systems, insbesondere über eine Kommunikationsverbindung Schreibzugriffe auf dieses Datenelement durchführt, und wobei die Gesamtzugriffszeit auch abhängig von einer durchschnittlichen Dauer eines Schreibzugriffs dieser Recheneinheit auf dieses erste Speichermodul ermittelt wird. Durch die Berücksichtigung von Schreibzugriffen ist die Genauigkeit dieses Verfahrens erhöht.
-
In einem weiteren Aspekt kann vorgesehen sein, dass eine Gesamtzugriffszeit aller Recheneinheiten auf dieses Datenelement in diesem ersten Speichermodul als Summe der Gesamtzugriffszeiten jeder der Recheneinheiten auf dieses Datenelement in diesem ersten Speichermodul ermittelt wird und wobei abhängig von dieser Gesamtzugriffszeit aller Recheneinheiten auf dieses Datenelement in diesem ersten Speichermodul darauf entschieden wird, ob das Datenelement in diesem ersten Speichermodul oder in einem anderen Speichermodul der Mehrzahl von Speichermodulen gespeichert wird. Insbesondere kann vorgesehen sein, dass das Datenelement dann, in diesem ersten Speichermodul gespeichert wird, wenn die Gesamtzugriffszeit aller Recheneinheiten auf dieses Datenelement in diesem ersten Speichermodul kleiner ist als eine Gesamtzugriffszeit aller Recheneinheiten auf dieses Datenelement in jedem anderen der Mehrzahl von Speichermodulen. Dies ist ein besonderes einfaches Optimalverfahren, um den optimalen Speicherort des Datenelements zu bestimmen.
-
In einem weiteren Aspekt kann vorgesehen sein, dass dann wenn, entschieden wird, dass dieses Datenelement in diesem ersten Speichermodul gespeichert wird, dieses Datenelement einer Liste von in diesem ersten Speichermodul zur Speicherung vorgesehenen Datenelementen hinzugefügt wird, und wobei dann, wenn eine Speicherkapazität dieses ersten Speichermoduls nicht ausreicht, um alle diese Datenelemente dieser Liste gleichzeitig zu speichern, ermittelt wird, welche dieser Datenelemente zur Speicherung in anderen der Mehrzahl von Speichermodulen vorgesehen werden. Durch diese nachträgliche Umverteilung von Datenelementen zu Speicherplätzen ist es auf besonders einfache Weise möglich, unter der Randbedingung von begrenzter Speicherkapazität in den Speichermodulen eine möglichst gute Zurodnung von Datenelementen zu Speichermodulen zu bekommen.
-
Ein besonders einfaches Verfahren, um diese Zuordnung zu erhalten, kann dadurch gegeben sein, dass zu jedem anderen der Mehrzahl von Speichermodulen vorgesehen ist, eine Liste mit allen zur Speicherung in dem ersten Speichermodul vorgesehenen Datenelementen erstellt wird, und wobei mit jedem dieser Datenelemente eine Transferkostengröße assoziiert ist, und wobei für die Datenelemente, mit denen die geringste Transferkostengröße assoziiert ist, entschieden wird, dass diese nicht im ersten Speichermodul sondern in einem anderen der Mehrzahl von Speichermodulen gespeichert werden.
-
In einer weiteren einfachen Weiterbildung kann hier vorgesehen sein, dass die Transferkostengröße in der Liste für ein zweites Speichermodul als Differenz zwischen der Gesamtzugriffszeit aller Recheneinheiten auf dieses Datenelement in diesem zweiten Speichermodul und der Gesamtzugriffszeit aller Recheneinheiten auf dieses Datenelement in dem ersten Speichermodul ermittelt wird.
-
Hierbei kann insbesondere vorgesehen sein, dass bei der Ermittlung der Transferkostengröße diese Differenz durch eine Größe des Datenelements (beispielsweise in Byte) dividiert wird. Dadurch lässt sich das Verfahren auf einfache Weise auch auf Datenelemente unterschiedlicher Größe anwenden.
-
In einer Weiterbildung kann vorgesehen sein, dass das beschriebene Verfahren rekursiv angewendet wird. Insbesondere kann vorgesehen sein, dass für jedes der Datenelemente, für das entschieden wurde, dass es nicht im ersten Speichermodul sondern in einem anderen der Mehrzahl von Speichermodulen gespeichert wird, das beschriebene Verfahren nach Anspruch angewendet wird, um ein weiteres Speichermoduls aus einer reduzierten Mehrzahl von Speichermodulen zu ermitteln, in dem dieses Datenelement gespeichert wird, wobei die reduzierte Mehrzahl von Speichermodulen gleich der Mehrzahl von Speichermodulen ohne das erste Speichermodul ist. Auf diese Weise lässt sich auf besonders einfache und effiziente Weise eine vollständige Zurodnung der Datenelemente zu den Speichermodulen erhalten.
-
Bezeichnet v die Anzahl der Datenelemente und m die Anzahl der Speichermodule, so ist das Problem der Zuordnung der Datenelemente zu Speichermodule von der Komplexität O(vmv). Die Komplexität des vorgeschlagenen Algorithmus hingegen ist O(v + fa), wobei f die Anzahl der Speichermodule bezeichnet, deren Speicherkapazität aufgrund der Zuordnung der Datenelemente zu diesem Speicherelement überschritten wäre, und a die Anzahl der Datenelemente, die einem anderen Speichermodul zugeordnet werden mussten.
-
In einem weiteren Aspekt betrifft die Erfindung ein Verfahren zur automatischen Generierung von Programmcode für ein Sysem mit einer Mehrzahl von Rechenmodulen und einer Mehrzahl von Speichermodulen, wobei für ein Datenelement mit einem der erfindungsgemäßen Verfahren entschieden wird, in welchem der Speichermodule dieses Datenelement gespeichert wird, und der Programmcode entsprechend generiert wird.
-
In weiteren Aspekten betrifft die Erfindung ein Computerprogramm zur Durchführung des Verfahrens und ein maschinenlesbares Speichermedium, auf dem das Computerprogramm gespeichert ist. Das Verfahren kann beispielsweise in einem Kraftfahrzeug zur Anwendung kommen.
-
Die Figuren zeigen beispielhaft besonders vorteilhafte Ausführungsformen der Erfindung. Es zeigen:
-
1 den Aufbau eines Systems mit einer Mehrzahl von Recheneinheiten und einer Mehrzahl von Speichermodulen;
-
2 verschiedene Ausführungsformen eines Datenstroms;
-
3 den Aufbau eines erfindungsgemäßen Systems gemäß einer Ausführungsform;
-
4 den Ablauf eines Verfahrens gemäß einer Ausführungsform der Erfindung;
-
5 den Ablauf eines Verfahrens gemäß einer weiteren Ausführungsform der Erfindung.
-
Beschreibung der Ausführungsbeispiele
-
1 zeigt den Vorteil eines Systems, insbesondere eines Steuergeräts, welches beispielsweise in einem Kraftfahrzeug zum Einsatz kommen kann. Vorgesehen ist eine Mehrzahl von Recheneinheite 101, 102, 103, welche über einen Datenbus 300 mit einer Mehrzahl von Speichermodulen 201, 202, 203, 204 kommunzieren. Datenelemente, insbesondere Variablen, auf die die Recheneinheiten 101, 102, 103 zugreifen, sind jeweils auf einem der Speichermodule 201, 202, 203, 204 gespeichert. Die Erfindung ist allgemein anwendbar auf jedes System mit mindestens einer Recheneinheit und mindestens zwei Speichermodulen.
-
2 zeigt ein bevorzugtes System zur Generierung von Programmcode zum Ablauf auf dem System nach 1. Dargestellt ist ein Initialisierungsblock 301, ein Zuordnungsblock 302, ein Umordnungsblock 303 und ein Rekursionsblock 304. Diese 4 Blöcke kommunizieren über ein Netzwerk N mit einem Speicherblock 500.
-
Die Pfeile illustrieren die Informationsflüsse in diesem System. Ein Codegenerierungsblock 400 hält den Informationen zur Generierung von Programmcode vor, der auf dem in 1 dargestellten System ablaufen soll. Im Codegenerierungsblock liegt eine Liste von Datenelementen vor, die der Programmcode beim Ablauf auf dem in 1 dargestellten System in den Speichermodulen 201, 202, 203, 204 speichern soll.
-
Der Intialisierungsblock 301 ruft den Zuordnungsblock 302 auf, der Zuordnungsblock 302 den Umordungsblock 303, der Umordnungsblock 303 den Rekursionsblock 304, und der Rekursionsblock 304 erneut den Zuordnungsblock 302. Die Rücksprünge der Blöcke sind gestrichelt eingezeichnet. Aus dem Rekursionsblock 304 wird zurück in den Umordnungblock 303 verzweigt, und aus dem Umordungsblock 303 in den Zuordnungsblock 302. Aus dem Zuordnungsblock 302 wird abhängig von dem aufrufenden Block zurückverzweigt: Wurde der Zuordnungsblock 302 vom Iinitialisierungsblock 301 aufgerufen, wird in den Intialisierungsblock 301 zurückverzweigt. Wurde der Zuordnungsblock 302 vom Zuordnungsblock 302 aufgerufen, wird zum Zuordnungsblock 302 zurückverzweigt. Im Initialisierungsblock 301 endet der Algorithmus der Zuordnung von Datenelementen zu Speichermodulen 201, 202, 203, 204. Im Anschluss kann in den Codegenerierungsblock 400 verzweigt werden, in dem Programmcode für das in 1 dargestellte System derart generiert wird, dass die Datenelemente in den gemäß dem beschriebenen Algorithmus ausgewählten Speichermodulen 201, 202, 203, 204 gespeichert werden.
-
3 zeigt den Ablauf des Verfahrens, das im Initialisierungsblock 301 ablaufen kann. Das Verfahren beginnt in Schritt 1000. Im folgenden Schritt 1010 wird ein ein leeres Speichermodell generiert, in dem die Zuordnungen der Datenelemente zu den Speichermodulen 201, 202, 203, 204 hinterlegt werden soll. Eine Variable, welche die summierten Gesamtkosten der Speicherzuordnungen in diesem Speichermodell angibt, wird auf den Wert 0 initialisiert.
-
Im folgenden Schritt 1020 wird ein erstes Datenelement aus der Liste der Datenelemente ausgewählt. Dieses Datenelment wird als „aktuelles Datenelement” bezeichnet. Das Verfahren kann auch als Schleife über alle Datenelemente der Liste ausgestaltet sein.
-
Im folgenden Schritt 1030 wird in den Zuordnungsblock 302 verzweigt. Dem Zuordnungsblock werden das Speichermodell und das aktuelle Datenelement übergeben.
-
In Schritt 2110 kehrt das Verfahren nach Ablauf des Zuordnungsblocks 302 zurück in den Initialisierungsblock 301. Der Initialisierungsblock 301 empfängt vom Zurodnungsblock das aktualisierte Speichermodell. Im folgenden Schritt 1040 wird überprüft, ob der Zuordnungsblock 302 bereits für alle Variablen der Liste der Datenelemente aufgerufen wurde. Ist dies der Fall, wird optional in Schritt 1050 die automatische Generierung von Programmcode durch den Codegenerierungsblock 400 aufgerufen. Im folgenden Schritt 1060 endet das Verfahren.
-
Wurde der Erstzuodnungsblock 302 noch nicht für alle Variablen der Liste aufgerufen, wird zu Schritt 1020 zurückverzweigt.
-
4 zeigt den Ablauf des Verfahrens, das im Zuordnungsblock 302 abläuft. In Schritt 1030 wird das Verfahren aufgerufen.
-
Es folgt Schritt 2000, in dem für jedes der Speichermodule 201, 202, 203, 204 eine Gesamtzugriffszeit T_CVR einer der Recheneinheiten 101, 102, 103 auf das in Schritt 1020 ausgewählte Datenelement ermittelt, wenn die Variable auf einem der Speichermodule 201, 202, 203, 204 gespeichert ist.
-
Der Buchstabe C bezeichne eine konkrete Recheneinheit, der Buchstabe R ein konkretes Speichermodul. Die Gesamtzugriffszeit T_CVR beizeichnet dann die Zugriffsdauer der Recheneinheit C, wenn das Datenelement auf dem Speichermodul R gespeichert ist. Beispielsweise aus einer Tabelle kann ermittelt werden, wie oft die Recheneinheit C lesend auf das Datenelement V zugreift. Diese Zahl, die auch als relative Häufigkeit bezogen auf die Gesamtheit aller lesenden Zugriffe einer der Recheneinheiten 101, 102, 103 auf irgendeines der Datenelmente normiert sein kann, wird mit LACC_CV bezeichnet. Eine durchschnittliche Zugriffsdauer, die die Recheneinheit C auf das Speichermodul R benötigt, ist beispielsweise ebenfalls in einer Tabelle hinterlegt und wird mit LTicks_CR bezeichnet.
-
Die Gesamtzugriffszeit T_CVR wird dann berechnet zu T_CVR = LACC_CV·LTicks_CR/fC, wobei fC eine Frequenz der Recheneinheit C bezeichnet.
-
Optional könne für die Berechnung der Gesamtzugriffszeit T_CVR auch die Schreibzugriffe der Recheneinheit C auf das Datenelement V berücksichtigt werden. Bezeichnet analog SACC_CV die Häufigkeit der Schreibzugriffe der Recheneinheit C auf das Datenelement V, ud STicks_CR die durchschnittliche Zugriffsdauer, so kann die Gesamtzugriffszeit T_CVR berechnet werden zu T_CVR = LACC_CV·LTicks_CR/fC + SACC_CV·STicks_CR/fC.
-
Bei der Normierung der Häufigkeiten LACC_CV und SACC_CV ist dann es dann vorteilhaft, wenn sie sich auf die gleiche Grundgesamtheit beziehen, also dann die Gesamtheit aller lesenden oder schreibenden Zugriffe einer der Recheneinheiten 101, 102, 103 auf irgendeines der Datenelemente.
-
Anschließend kann eine Gesamtzugriffszeit aller Recheneinheiten auf das Datenelement V im Speichermodul R ermittelt werden als T_VR = ΣCT_CVR, wobei in der Summe die laufende Variable C über alle Recheneinheiten 101, 102, 103 des Systems läuft. Diese Gesamtzugriffszeit wird für jedes der Speichermodule 201, 202, 203, 204 ermittelt, d. h. für jedes Speichermodul R wird die Gesamtzugriffszeit T_VR ermittelt.
-
Im folgenden Schritt 2010 wird ermittelt, für welches der Speichermodule R die ermittelte Gesamtzugriffszeit T_VR am geringsten ist. Das Datenelement V wird diesem Speichermodul R zugeordnet. Das Speichermodul R wird im folgenden auch als „aktuelles Speichermodul” R bezeichnet.
-
In Schritt 2020 wird überprüft, ob das Speichermodul R, dem das Datenelement V zugeordnet wurde, groß genug ist, um alle ihm zugeordneten Datenelemente gleichzeitig zu halten. Beispielsweise kann geprüft werden, ob die Summe der Speicherbedarfe jedes der dem Speichermodul R zugeordneten Datenelemente kleiner ist als ein verfügbarer Gesamtspeicher des Speichermoduls R. Ist dies der Fall, folgt Schritt 2100, andernfalls folgt Schritt 2030.
-
Kann garantiert werden, dass das Speichermodul R auf jeden Fall groß genug ist, kann auf Schritt 2020 verzichtet werden, und von Schritt 2010 unmittelbar zu Schritt 2100 verzweigt werden.
-
In Schritt 2030 wird überprüft, ob bereits Umordnungslisten generiert wurden. Wurden noch keine Umordnungslisten erzeugt, folgt Schritt 2040, in dem für jedes andere der Speichermodule 201, 202, 203, 204, also für jedes der Speichermodule 201, 202, 203, 204 außer dem Speichermodul R, eine Liste mit all den Datenelementen generiert wird, die zum Speichern im Speichermodul R vorgesehen sind. Dieses andere Speichermodul sei mit R2 bezeichnet. Das Datenelement V wird den Umordnungslisten noch nicht hinzugefügt. Jedem Datenelement V' der Liste wird die Transferkostengröße ΔTV' zugeordnet, die den Zuwachs an Gesamtzugriffszeit bezeichnet, wenn das Datenelement nicht im Speichermodul R, sondern stattdessen im Speichermodul R' abgespeichert wird. Die Umordnungslisten werden dem Speichermodell hinzugefügt.
-
Analog zur oben beschriebenen Ermittlung der Größe T_VR kann man die Größe T_V'R' ermitteln, indem die in Schritt 2000 beschriebenen Schritte nicht für Speichermodul R, sondern für Speichermodul R' und nicht für das Datenelement V, sondern für das Datenelement V' durchgeführt werden. Ebenso kann man die Größe T_V'R ermitteln, indem die in Schritt 2000 beschriebenen Schritte nicht für das Datenelement V, sondern für das Datenelement V' durchgeführt werden. Die Transferkostengröße lässt sich dann ermitteln als ΔTV' = (T_V'R' – T_V'R)/nV', wobei nV' die Größe, also den Speicherbedarf, des Datenelements V' (z. B. in einer Anzahl Bytes) bezeichnet.
-
Es folgt Schritt 2050. Wurde in Schritt 2030 festgestellt, dass bereits Umordnungslisten vorliegen, folgt ebenfalls Schritt 2050. In Schritt 2050 wird das Datenelement V jeder der Umordnungslisten hinzugefügt, und mit ihm die Transferkostengröße ΔTV = (T_VR' – T_VR)/nV.
-
Es folgt Schritt 2060, in dem in den Umordungsblock 303 verzweigt wird.
-
In Schritt 3040 wird aus dem Umordnungsblock 303 zurückverzweigt in den Zuordnungsblock 302. Die folgenden Schritte 2070 bis 2090 werden weiter unten beschrieben.
-
In Schritt 2100 wird dem in Schritt 1010 generierten Speichermodell die Zuordnung hinzugefügt, dass Datenelement C im Speichermodeul R gespeichert wird. Ferner werden zu den summierten Gesamtkosten die Gesamtkosten der Zurodnung des Datenelements V zum Speichermodul R, also T_VR, hinzuaddiert.
-
Es folgt Schritt 2110, in dem in den aufrufenden Block, beispielsweise den Initialisierungsblock 301, zurückverzweigt wird. Hierbei werden die durch die Zuordnung des Datenelements V zum Speichermodul R entstandenen Kosten, also T_VR, und das Datenmodell an den aufrufenden Block übergeben.
-
5 illustriert das Verfahren im Umordnungsblock 303. In Schritt 2060 wird aus dem Zuordnungsblock 302 in den Umordnungsblock 303 verzweigt. Im folgenden Schritt 3000 wird eine erste der Umordnungslisten, die dem aktuellen Speichermodul R zugeordnet sind, d. h. die eine mögliche Umordnung eines Datenelements vom Speichermodul R zu einem anderen Speichermodul R' beschreiben, ausgewählt. Diese Umordnungsliste wird im folgenden als „aktuelle Umordnungsliste” bezeichnet.
-
In Schritt 3000 wird ferner eine um das Speichermodul R reduzierte Kopie des Datenmodells erzeugt. D. h., des wird eine Kopie des Datenmodells erzeugt, aber alle Zuordnungen von Datenelementen zum Speichermodul R werden nicht kopiert. Umordnungslisten vom Speichermodul R zu einem anderen Speichermodul R' oder von einem anderen Speichermodul R' zum Speichermodul R werden ebenfalls nicht kopiert.
-
Es folgt Schritt 3010, in dem in den Rekursionsblock 304 verzweigt wird. In Schritt 4030 wird aus dem Rekursionsblock 304 zurückverzweigt in den Umordnungsblock 303.
-
6 illustriert das Verfahren im Rekursionsblock 304. In Schritt 3010 wird aus dem Umordnungsblock 303 in den Rekursionsblock 303 verzweigt. Im folgenden Schritt 4000 werden überschüssige Datenelemente der aktuellen Umordnungsliste identifiziert. Dies sind die Datenelemente der aktuellen Umordnungsliste, mit denen die niedrigsten Transferkosten assoziiert sind. Diese können beispielsweise so identifziziert werden, dass die Datenelemente der aktuellen Umordnungsliste nach assoziierten Transferkosten geordnet angeordnet werden, und dass dann beginnend mit den geringsten assoziierten Transferkosten sukzessive Datenelemente aus der aktuellen Transferliste entfernt werden, so lange, bis der Speicherbedarf der in der aktuellen Transferliste verbleibenden Datenelemente kleiner ist als der verfügbare Gesamtspeicher im aktuellen Speichermodul R. Die so entfernten Datenelemente bilden die überschüssigen Datenelemente. Eine Variable, die die Umordnungskosten der überschüssigen Datenelemente angibt, wird auf den Wert 0 initialisiert.
-
In Schritt 4000 wird nun ein erstes dieser überschüssigen Datenelemente ausgewählt. Dies sei als aktuelles überschüssiges Datenelment bezeichnet. Anschließend wird Schritt 1030 rekursiv in den Zuordnungsblock 302 verzweigt. Dieser Aufruf erfolgt anders als beim Aufruf aus dem Intialisierungsblock 301 nicht mit dem aktuellen Datenelement und dem Speichermodell, sondern, mit dem aktuellen überschüssigen Datenelement und dem reduzierten Speichermodell.
-
In Schritt 2110 wird aus dem Zuordnungsblock 302 zurückverzweigt in den Rekursionsblock 304. Der Zuordnungsblock 302 übergibt dem Rekursionsblock 304 die Zusatzkosten zum Hinzufügen des aktuellen überschüssigen Datenelements und das von ihm modifizierte reduzierte Datenmodell.
-
Im folgenden Schritt 4010 werden diese Zusatzkosten den Umordnungskosten der überschüssigen Datenelemente hinzuaddiert. Es folgt Schritt 4020, in dem ein nächstes der überschüssigen Datenelemente als aktuelles überschüssiges Datenelement identifiziert und zu Schritt 1030 verzweigt, wo erneut rekursiv in den Zuordnungsblock 302 verzweigt wird.
-
Wurde Schritt 1030 für jedes der überschüssigen Datenelemente aufgerufen, folgt Schritt 4030, in dem die Umordnungskosten und das modifizierte reduzierte Datenmodell an den Umordnungsblock 303 zurückübergeben werden.
-
Diese Zusatzkosten werden im folgenden Schritt 3020 (5) der aktuellen Umordnungsliste zugeordnet. Es folgt Schritt 3030, in dem geprüft wird, ob noch Umordnungslisten verbleiben. Ist dies der Fall, wird eine nächste Umordnungsliste als aktuelle Umordnungsliste ausgewählt. Es folgt Schritt 3010, in dem erneut in den Rekursionsblock 304 verzweigt wird.
-
Anderfalls folgt Schritt 3040, in dem in den Zuordnungsblock 302 zurückverzweigt wird. Vom Zurodnungsblock 302 werden das modifizierte reduzierte Datenmodell und die Umordnungskosten empfangen. Im Zuordnungsblock 302 folgt Schritt 2070, in dem die Umordnungskosten der Umordnungslisten miteinander verglichen werden und von den Umordnungslisten diejenige ausgewählt wird, deren Umordnungskosten am geringesten sind. Diese Umordnungsliste wird als „optimale Umordnung” bezeichnet.
-
Es folgt Schritt 2080, in dem die optimale Umordnung umgesetzt wird, d. h. im Speichermodell wird die Zuordnung der überschüssigen Datenelemente zum aktuellen Datenspeicher R gelöscht und stattdessen dem anderen Datenspeicher R' zugeordnet, mit dem diese optimale Umordnung assoziiert ist.
-
Es folgt Schritt 2110, in dem in den aufrufenden Block, beispielsweise den Initialisierungsblock 301, zurückverzweigt wird. Hierbei werden die durch die Zuordnung des Datenelements V zum Speichermodul R entstandenen Kosten, also die Umordnungskosten, und das Datenmodell an den aufrufenden Block übergeben.
-
Es versteht sich für den Fachmann, dass dieses Verfahren sowohl in Hardware als auch in Software implementiert werden kann. Ferner ist es dem Fachmann geläufig, dass der beschriebene rekursive Algorithmus wie jeder rekursive Algorithmus auch sequentiell implementiert werden kann.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
- DE 102013224702 A1 [0002]