-
HINTERGRUND
-
Computersysteme können Plattformen umfassen, die heterogene Prozessoren wie beispielsweise ein Hauptprozessor (CPU) und ein Grafikprozessor (GPU) und symmetrische und asymmetrische Prozessoren unterstützen. Eine einzelne Version von Daten kann sich in einem ersten mit einer ersten Seite verbundenen Speicher (z. B. CPU) einer CPU-GPU-Plattform befinden. Die zweite Seite (GPU-Seite) kann befähigt sein, die einzelnen Versionsdaten aufzurufen, die sich in einem ersten mit der ersten Seite (CPU-Seite) verbundenen Speicher der CPU-GPU-Plattform befinden. Außerdem kann die erste Seite nicht befähigt sein, die einzelnen Versionsdaten aufzurufen, die sich in einem zweiten Speicher auf der zweiten Seite (GPU-Seite) befinden. Da die einzelnen Versionsdaten in unterschiedlichen Adressbereichen gespeichert sein können, könnten die bestehenden Kommunikationsmechanismen nur einseitigen Informationsfluss zwischen den heterogenen Prozessoren (CPU und GPU) ermöglichen, um die einzelnen Versionsdaten aufzurufen.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die hierin beschriebene Erfindung wird in den beigefügten Figuren in beispielhafter und nicht einschränkender Weise veranschaulicht. Der Einfachheit halber und zur besseren Veranschaulichung sind in den Figuren veranschaulichte Elemente nicht notwendigerweise maßstabsgetreu. Beispielsweise können die Abmessungen einiger Elemente im Verhältnis zu anderen Elementen zur Verdeutlichung übermäßig groß dargestellt sein. Wo es zweckmäßig erschien, wurden weiterhin Bezugszeichen in den Figuren wiederholt, um entsprechende oder analoge Bauteile zu kennzeichnen.
-
1 zeigt eine Plattform 100, die das gemeinsame Benutzen von auf virtuellem Speicher basierenden Mehrversionsdaten zwischen heterogenen Prozessoren wie beispielsweise CPU und GPU gemäß einer Ausführungsform unterstützen kann.
-
2 ist ein Ablaufdiagramm, das eine Operation zeigt, die durch die Plattform 100 gemäß einer Ausführungsform ausgeführt wird.
-
3 ist ein Ablaufdiagramm, das eine Operation zeigt, die von einem Erzeuger und einem Verbraucher der Plattform 100 ausgeführt wird, um das auf virtuellem Speicher basierende gemeinsame Benutzen von Mehrversionsdaten zwischen heterogenen Prozessoren wie beispielsweise CPU und GPU gemäß einer Ausführungsform zu unterstützen.
-
4 ist ein Ablaufdiagramm, das eine vom Erzeuger ausgeführte Operation zeigt, um aktualisierte Speicherseiten im gemeinsam benutzten virtuellen Speicherplatz gemäß einer Ausführungsform zu verfolgen.
-
5 ist ein Liniendiagramm, das eine ,Diff'-Operation ausgeführt vom Erzeuger der Plattform 100 zeigt, um verfügbare Mehrversionsdaten bereitzustellen, die gemäß einer ersten Ausführungsform vom Verbraucher zu erlangen sind.
-
6 zeigt ein Computersystem, das eine Plattform umfassen kann, die das gemeinsame Benutzen von auf virtuellem Speicher basierenden Mehrversionsdaten zwischen den heterogenen Prozessoren einer Plattform gemäß einer Ausführungsform unterstützen kann.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Die folgende Beschreibung beschreibt Techniken, um auf virtuellem Speicher basierende Mehrversionsdaten zwischen den heterogenen Prozessoren (zum Beispiel CPU und GPU) einer Computerplattform gemeinsam zu benutzen. In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten wie beispielsweise Logikausführungen, Ressourcenpartitionierung oder gemeinsames Benutzen oder Duplikationsimplementierungen, Arten und Wechselbeziehungen von Systemkomponenten und Logikpartitionierung oder Integrationsentscheidungen erläutert, um ein gründlicheres Verstehen der vorliegenden Erfindung zu ermöglichen. Für den Fachmann ist es jedoch offensichtlich, dass die Erfindung auch ohne diese spezifischen Details realisierbar ist. In anderen Fällen sind Kontrollstrukturen, Gateebenenschaltungen und gesamte Softwarebefehlsfolgen im Detail nicht gezeigt worden, um die Erfindung nicht zu verschleiern. Der Durchschnittsfachmann wird anhand der eingebundenen Beschreibungen in der Lage sein, ohne unangemessenes Experimentieren sachgerechte Funktionalität zu realisieren.
-
Bezugnahmen in der Beschreibung auf „eine Ausführungsform”, „eine beispielhafte Ausführungsform” weisen darauf hin, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft umfassen kann, aber dass nicht unbedingt jede Ausführungsform das besondere Merkmal, die besondere Struktur oder die bestimmte Eigenschaft umfassen muss. Außerdem beziehen sich solche Ausdrücke nicht unbedingt auf dieselbe Ausführungsform. Wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft im Zusammenhang mit einer Ausführungsform beschrieben ist, so wird weiterhin unterstellt, dass der Fachmann die Kenntnis besitzt, solch ein Merkmal, eine Struktur oder Eigenschaft im Zusammenhang mit anderen Ausführungsformen zu beeinflussen, unabhängig davon, ob sie ausführlich beschrieben sind oder nicht.
-
Ausführungsformen der Erfindung können in Hardware, Firmware, Software oder irgendeiner Kombination davon implementiert sein. Ausführungsformen der Erfindung können ebenfalls als auf einem maschinenlesbaren Medium gespeicherte Anweisungen implementiert sein, die gelesen und durch ein oder mehrere Prozessoren ausgeführt werden können. Ein maschinenlesbares Speichermedium kann jeden Mechanismus für das Speichern oder Senden von Information in einer durch eine Maschine (z. B. ein Computing-Gerät) lesbaren Form enthalten.
-
Zum Beispiel kann ein maschinenlesbares Medium Read Only Memory (ROM), Random Access Memory (RAM), Magnetplattenspeichermedien, optische Speichermedien, Flash-Speicher-Geräte und elektrische, optische Formen von Signalen enthalten. Weiter können Firmware, Software, Programme und Anweisungen hier als bestimmte Aktionen ausführend beschrieben sein. Jedoch ist zu verstehen, dass solche Beschreibungen nur zur Annehmlichkeit dienen, und dass sich solche Aktionen tatsächlich aus Computing-Geräten, Prozessoren, Controllern und anderen Geräten ergeben, welche die Firmware, Software, Programme und Anweisungen ausführen.
-
Bei einer Ausführungsform kann eine Computerplattform eine oder mehrere Techniken unterstützen, um auf virtuellem Speicher basierende Mehrversionsdaten zwischen den heterogenen Prozessoren (z. B. eine CPU und eine GPU) zu teilen. Bei einer Ausführungsform kann eine Semantik des gemeinsam genutzten Speichers Grundelemente wie beispielsweise eine Freigabeoperation bereitstellen, die Speicherungen durch die CPU oder GPU ”logisch” in einem gemeinsamen Speicher aufnehmen lässt, und eine Erfassungsoperation, welche den CPU- oder GPU-Speicher veranlassen kann, sich ”logisch” mit dem gemeinsam genutzten Speicher zu synchronisieren.
-
Bei einer Ausführungsform kann die Freigabeoperation die Seiten im gemeinsamen Speicher nachverfolgen, die aktualisiert (oder modifiziert) sein können. Bei einer Ausführungsform kann eine ,Diff'-Operation einer Vorgängerversion und einer jetzigen Version der Seiten ausgeführt und das Ergebnis der Diff-Operation und eine zugehörige Versionsnummer können in einer separaten Speicherregion gespeichert werden. Bei einer Ausführungsform können die gemeinsam benutzten Seiten des virtuellen Speichers auf ,Schreibschutz'-Modus bei Freigabe gesetzt werden, um das Nachverfolgen von aktualisierten (oder modifizierten oder ungültigen) Seiten zu ermöglichen, was ebenfalls in einem Auffangen in einem Verarbeiter resultieren kann, der, während die Seite geschrieben wird, zu erzeugen ist. Bei einer Ausführungsform kann der Verarbeiter verwendet werden, um eine Datensicherungskopie der Seite (Doppelseite) zu erstellen. Bei einer Ausführungsform kann ein Zusatzspeicher verwendet werden, um eine Position (oder ein spezifisches Bit) zu kennzeichnen, um anzuzeigen, dass die Seite aktualisiert wird oder ungültig ist. Als ein Resultat können für die auf einem Erzeuger freigegebenen (zum Beispiel CPU) und die bei einem Verbraucher erlangten (zum Beispiel GPU) Datenstrukturen nur modifizierte Bytes für jede Version übertragen werden. Während der Verbraucher eine Erfassungsoperation bei einer bestimmten Versionsnummer ausführt, können die gespeicherten Differenzen in einem privaten Adressraum des Verbrauchers in Reihenfolge zusammengeführt werden. Bei einer Ausführungsform kann der geteilte virtuelle Speicher durch physische private Speicherplätze der heterogenen Prozessoren oder einen physischen von den heterogenen Prozessoren gemeinsam benutzten gemeinsamen Speicher unterstützt werden.
-
Eine Ausführungsform einer Plattform 100, die geteilte Mehrversionsdaten zwischen den heterogenen Prozessoren wie beispielsweise der CPU und der GPU bereitstellt, wird in 1 gezeigt. Bei einer Ausführungsform kann die Plattform 100 einen Hauptprozessor (CPU) 110, ein Betriebssystem (OS) 112 verbunden mit der CPU 110, einen privaten CPU-Platz 115, ein CPU-Compiler 118, einen gemeinsam benutzten virtuellen Speicher (oder gemeinsamer Mehrversionsspeicher) 130, einen Grafikprozessor (GPU) 180, ein Betriebssystem (OS) 182 verbunden mit der GPU 180, einen privaten GPU-Platz 185 und ein GPU-Compiler 188 umfassen. Bei einer Ausführungsform kann das OS 112 Ressourcen der CPU 110 und des privaten CPU-Platzes 115, der GPU 180 und des privaten GPU-Platzes 185 verwalten. Bei einer Ausführungsform können der private CPU-Platz 115 und der private GPU-Platz 185 Kopien von Mehrversionsdaten umfassen, um gemeinsam benutzten virtuellen Speicher 130 zu unterstützen. Bei einer Ausführungsform können die Metadaten wie beispielsweise Objekt 131 zur Aufrecherhaltung der Speicherkonsistenz verwendet werden, um die im privaten CPU-Platz 115 und dem privaten GPU-Platz 185 gespeicherten Kopien zu synchronisieren. Bei einer anderen Ausführungsform können die Mehrversionsdaten in einem physischen gemeinsamen Speicher wie beispielsweise einem gemeinsamen Speicher 650 gespeichert werden (von 6, die nachfolgend beschrieben ist).
-
Bei einer Ausführungsform können der CPU-Compiler 118 und der GPU-Compiler 188 mit CPU 110 und GPU 180 gekoppelt sein oder sie können auch entfernt auf anderen Plattformen oder Computersystemen bereitgestellt werden. Die Compiler 118 verbunden mit CPU 110 können einen kompilierten Code für CPU 110 generieren und die Compiler 188 verbunden mit GPU 180 können einen kompilierten Code für GPU 180 generieren.
-
Bei einer Ausführungsform können der CPU-Compiler 118 und der GPU-Compiler 188 einen kompilierten Code generieren, indem sie eine oder mehrere Elementfunktionen der Objekte, die von einem Benutzer in einer Hochsprache wie beispielsweise einer objektorientierten Sprache bereitgestellt werden, kompilieren. Bei einer Ausführungsform können der Compiler 118 und 188 ein Objekt 131, das gemeinsam benutzte Mehrversionsdaten 132 umfassen kann, veranlassen, von dem gemeinsam benutzten virtuellen Speicher 130 durch einen Erzeuger unterstützt und vom gemeinsam benutzten virtuellen Speicher 130 von einem Verbraucher erlangt zu werden. Bei einer Ausführungsform kann das Objekt 131 unterstützt durch den gemeinsam benutzten virtuellen Speicher 130 die gemeinsam benutzten Mehrversionsdaten 132 und ein oder mehrere Elementfunktionen, wie beispielsweise die virtuellen Funktionen VF 133-A bis 133-K und die nicht virtuellen Funktionen NVF 136-A bis 136-L umfassen. Bei einer Ausführungsform kann die Kommunikation zwischen CPU 110 und GPU 180 durch die Elementfunktionen wie beispielsweise VF 133 und NVF 136 des gemeinsam benutzten Objekts 131 bereitgestellt werden.
-
Eine Ausführungsform einer Operation der Plattform 100, um gemeinsam benutzte auf virtuellem Speicher basierende Mehrversionsdaten zu unterstützen, wird in einem Ablaufdiagramm von 2 gezeigt. Im Block 210 kann CPU 110 (ein Erzeuger) Mehrversionsdaten wie beispielsweise die gemeinsam benutzten Mehrversionsdaten 132 erzeugen, die im gemeinsam benutzten virtuellen Speicher 130 unterstützt werden können. Bei einer Ausführungsform kann CPU 110 den VersionDataCommit-Prozess verwenden, um die gemeinsam benutzten Mehrversionsdaten 132 zu erzeugen. Bei einer Ausführungsform kann CPU 110 die neue Versionsnummer berechnen. Bei einer Ausführungsform kann die neue Versionsnummer generiert werden, indem eine gegenwärtige Versionsnummer (CuVerNo) inkrementiert wird. Bei einer Ausführungsform kann die neue Versionsnummer gleich (CuVerNo +1) sein.
-
Bei einer Ausführungsform kann CPU 110 Differenzinhalt (Diff) zwischen einer Vorgängerversionsseite und einer gegenwärtigen Versionsseite bestimmen, wenn eine durch eine gegenwärtige Versionsnummer identifizierte aktuelle Seite aktualisiert wird. Bei einer Ausführungsform kann CPU 110 einen Diff-Knoten (oder aktualisierten Versionsknoten) konstruieren, der den Differenzinhalt und eine neue Versionsnummer umfassen kann. Bei einer Ausführungsform kann CPU 110 den Diff-Knoten in eine Diff-Liste einsetzen. Bei einer Ausführungsform können die gemeinsam benutzten Mehrversionsdaten 132 Seiten umfassen, die Vorgängerversionsseiten, gegenwärtige Versionsseiten und Speicherseiten mit aktualisierter Version umfassen. Bei einer Ausführungsform kann ein Aktualisieren auf eine gegenwärtige Versionsseite eine Speicherseite mit aktualisierter Version erzeugen. Bei einer Ausführungsform können die gemeinsam benutzten Mehrversionsdaten 132 vom Erzeuger (CPU 110) erzeugt und werden und ein Verbraucher (GPU 180) greift darauf zu.
-
Im Block 250 kann der Verbraucher (GPU 180) befähigt werden, die gemeinsam benutzten Mehrversionsdaten 132 unterstützt durch den gemeinsam benutzten virtuellen Speicher 130 zu erlangen. Bei einer Ausführungsform kann GPU 180 den VersionDataAcquire-Prozess verwenden, um die gemeinsam benutzten Mehrversionsdaten 132 unterstützt durch den gemeinsam benutzten virtuellen Speicher 130 zu erlangen oder auf sie zuzugreifen. Bei einer Ausführungsform kann GPU 180 eine Diff-Liste für die gegenwärtige Versionsseite abfragen und den Inhalt der Vorgängerversionsseiten und der gegenwärtigen Versionsseite zusammenführen. Bei einer Ausführungsform kann die Mergingoperation bei einer Startseite beginnen und alle Knoten der Diff-Liste von der Version der Startseite bis zur Versionsnummer können in der Startseite zusammengeführt werden, welche die VersionDataAcquire-Operation angibt. Bei einer Ausführungsform kann der Inhalt, der von den Vorgängerversionsseiten einschließlich einer Startseite zur gegenwärtigen Versionsseite zusammengeführt wird, in die Speicherseite mit aktualisierter Version zusammengeführt werden, auf die durch GPU 180 zugegriffen werden kann oder die von ihr erlangt werden können.
-
Eine Ausführungsform vom Erzeuger und Verbraucher, welche Funktionen ausführt, um das gemeinsame Benutzen von in einem gemeinsamen Speicher gespeicherten Mehrversionsdaten zu unterstützen, wird in einem Ablaufdiagramm von 3 gezeigt. In Block 310 kann CPU 110 (Erzeuger des gemeinsam benutzten Mehrversionsdatenobjekts 131) die aktualisierten (oder modifizierten) Versionsspeicherseiten im gemeinsamen benutzten virtuellen Speicher 130 verfolgen.
-
Im Block 320 kann CPU 110 eine Diff-Operation an der Vorgängerversionsseite und der gegenwärtigen Versionsseite ausführen, um eine Speicherseite mit aktualisierter Version zu generieren. Bei einer Ausführungsform kann CPU 110 eine aktualisierte Versionsseite UVP 139 (Versionsnummer = V3) generieren, indem sie eine ,Diff'-Operation an einer Vorgängerversionsseite PVP 137 (Versionsnummer = V1) und einer gegenwärtigen Versionsseite CVP 138 (Versionsnummer = V2) ausführt. Bei einer Ausführungsform kann CPU 110 eine neue Versionsnummer (V3) verbunden mit UVP 139 bereitstellen.
-
Im Block 340 kann CPU 110 die Ergebnisse der Diff-Operation (d. h. UVP 139 und die neue Versionsnummer V3) in einer gemeinsam benutzten (oder virtuellen) Speicherregion logisch speichern, die beispielsweise physisch im privaten CPU-Platz 115 gespeichert sein kann. Im Block 360 kann CPU 110 den modifizierten Bytes jeder Version erlauben, durch GPU 180 erlangt zu werden. Bei einer Ausführungsform kann CPU 110 die modifizierten Bytes und die verbundenen Versionsnummern freigeben, sodass GPU 180 die modifizierten Bytes unter Verwendung des VersionDataAcquire-Prozesses, wie oben beschrieben, erlangen kann.
-
Eine Ausführungsform des Erzeugers, der die aktualisierten (oder modifizierten) Seiten im gemeinsam benutzten virtuellen Speicher 130 verfolgt, wird in einem Ablaufdiagramm von 4 gezeigt. Im Block 410 kann CPU 110 (Erzeuger) die Speicherseiten mit aktualisierter Version im ,Schreibschutz'-Modus bei Freigabe teilen. Bei einer Ausführungsform kann infolge des gemeinsamen Benutzens der Speicherseiten mit aktualisierter Version im ,Schreibschutz'-Modus ein Auffangen in einem Verarbeiter generiert werden, während die Speicherseiten mit aktualisierter Version geschrieben werden können.
-
Im Block 450 kann CPU 110 eine Back-up-Kopie der Speicherseiten mit aktualisierter Version im Verarbeiter erzeugen. Bei einer Ausführungsform kann CPU 110 UVP 139 auf ,Schreibschutz'-Modus setzen, um das Verfolgen von aktualisierten (oder modifizierten oder ungültigen) Seiten wie beispielsweise UVP 139 zu ermöglichen. Bei einer Ausführungsform kann CPU 110 einen Verarbeiter verwenden, um eine Datensicherungskopie von UVP 139 (Doppelseite) zu erzeugen.
-
In Block 480 kann CPU 110 einen Zusatzspeicher kennzeichnen, um anzuzeigen, dass die Speicherseiten mit aktualisierter Version modifiziert (oder ungültig) sein können. Bei einer Ausführungsform kann das Kennzeichen eines Zusatzspeichers der CPU 110 ermöglichen, sich daran zu erinnern, dass die Speicherseite mit aktualisierter Version ungültig ist. Bei einer Ausführungsform kann CPU 110 eine Stelle (oder ein spezifisches Bit) in einem Zusatzspeicher wie beispielsweise eine PCI-Eintrittsfläche kennzeichnen, um anzuzeigen, dass UVP 139 eine aktualisierte oder modifizierte oder ungültige Seite ist.
-
Eine Ausführungsform der CPU 110, die eine Diff-Operation als mindestens einen Teil der Freigabeoperation ausführt und GPU 180, die eine Erfassungsoperation ausführt, sind in 5 abgebildet. Bei einer Ausführungsform kann CPU 110 eine VersionDataCommit()-Funktion (ein Teil der Freigabeoperation) ausführen, um die Speicherseiten mit aktualisierter Version im gemeinsam benutzten virtuellen Speicher 130 logisch aufzunehmen. Bei einer Ausführungsform kann der Verbraucher (GPU 180) auf die Daten von Seite 'i' 540 mit einer Versionsnummer, die V2 gleicht, zugreifen oder diese erlangen. Bei einer Ausführungsform kann CPU 110 eine Diff-Operation dargestellt durch einen Differenzgenerator 570 auf einer Seite 'i' 540 und einer Doppelseite 550 ausführen, welche eine aktualisierte Version der Seite 'i' sein kann, während sie die GetDataRelease()-Funktion ausführt. Bei einer Ausführungsform kann die Seite 'i' 540 eine unmodifizierte Version einer gegenwärtigen Versionsseite darstellen und Doppelseite 550 kann eine aktualisierte (oder modifizierte) Version der Seite 'i' 540 darstellen.
-
Bei einer Ausführungsform kann das Ergebnis generiert durch den Differenzgenerator 570, der nur die modifizierten Bytes umfassen kann, in einem Diff-3-Feld 581 gespeichert sein. Bei einer Ausführungsform kann das Diff-Feld 581 einen Diff-3 umfassen, während GPU 180 Version-3-Daten erlangt, indem Mehrversionsdaten bis zu Version-2 (V2) verwendet werden. Bei einer Ausführungsform kann die neue Versionsnummer wie beispielsweise V3 im Versionsidentifikatorfeld 582 gespeichert sein. Bei einer Ausführungsform kann das Diff-3-Feld 581 und die verbundene neue Versionsnummer (= V3) im Versionsidentifikatorfeld 582 in die Diff-Liste eingesetzt sein.
-
Bei einer Ausführungsform kann GPU 180 die Diff-Liste für die Seite 'i' 540 bis zu Version V2 abfragen, während sie den VersionDataAcquire()-Prozess ausführt. Bei einer Ausführungsform kann die Diff-Liste 520 für die Seite 'i' 540 bis zur Version V2 ein Diff-1-Feld 511 und ein verbundenes Versionsnummernfeld 512, das V1 gleicht und ein Diff-2-Feld 521 und ein verbundenes Versionsnummernfeld 522 das V2 gleicht, umfassen. Bei einer Ausführungsform kann GPU 180 die Diff-Liste 520 mit einer Startseite 501 verbunden mit einem Versionsnummernfeld 502, das V1 gleicht, zusammenführen. Bei einer Ausführungsform kann die Mergingoperation durch den Merginggenerator 530 repräsentiert werden. Bei einer Ausführungsform kann der resultierende Ausgang des Merginggenerators 530 mit dem Inhalt der Seite 'i' 540 zusammengeführt werden.
-
Bei einer Ausführungsform kann die gemeinsam benutzte Mehrversionsdatenstruktur in vielen Programmierbereichen wie beispielsweise Spieleanwendungen verwendet werden. Bei einer Ausführungsform kann ein Aktualisieren auf gemeinsam benutzte Mehrversionsdaten eine neue Version der Daten logisch erzeugen, ohne Kohärenzverkehr zu verursachen. Neben dem Optimieren des Kohärenzverkehrs kann die Verwendung der gemeinsam benutzten Mehrversionsdaten die zeitraubenden Operationen wie beispielsweise explizites Marshalling und Unmarshalling von Daten vermeiden, da ein Zeiger auf gemeinsamen Speicher in unterschiedlichem physischen Adressraum von CPU- und GPU-Seite bedeutungsvoll sein kann.
-
Außerdem kann solch ein Ansatz das Pipelining von Daten zwischen CPU 110 und GPU 180 vereinfachen. Bei einer Ausführungsform könnte der Benutzer die Pipeline nicht aufrechterhalten und implementieren, was gewöhnlich die Quelle von Fehlern darstellt. Bei einer Ausführungsform kann ein gemeinsam benutztes System des virtuellen Speichers einschließlich einer CPU-GPU-Plattform Unterstützung für die Programmierbarkeit bereitstellen und Mehrversionsstrukturen zu einem System von gemeinsamem Speicher erweitern. Bei einer Ausführungsform können die nachfolgend beschriebenen gemeinsam benutzten Mehrversionsdatentechniken sowohl in diskreten als auch in integrierten GPU-Konfigurationen verwendet werden und deshalb das Programmieren von API über unterschiedliche GPU-Konfigurationen vereinheitlichen.
-
Eine Ausführungsform eines Computersystems 600, das die heterogenen Prozessoren umfasst, welche das gemeinsame Benutzen von in einem gemeinsam benutzten virtuellen Speicher gespeicherten Mehrversionsdaten unterstützen, ist in 6 gezeigt. Es wird Bezug genommen auf 6, das Computersystem 600 kann einen Allzweckprozessor (oder CPU) 602 einschließlich einem Single Instruction Multiple Data-(SIMD)-Prozessor und eine Grafikprozessoreinheit (GPU) 605 umfassen. CPU 602 kann bei einer Ausführungsform Verbesserungsoperationen zusätzlich zur Ausführung verschiedener anderer Tasks ausführen oder eine Befehlssequenz speichern, um Verbesserungsoperationen im maschinenlesbaren Speichermedium 625 bereitzustellen. Jedoch kann die Befehlssequenz ebenfalls im privaten CPU-Speicher 620 oder in irgendeinem anderen geeigneten Speichermedium gespeichert werden. Bei einer Ausführungsform kann CPU 602 mit einem CPU-Legacy-Compiler 603 und einem CPU-Verknüpfer/Lader 604 verbunden sein. Bei einer Ausführungsform kann GPU 605 mit einem proprietären GPU-Compiler 606 und GPU-Verknüpfer/Lader 607 verbunden sein.
-
Während eine separate Grafikprozessoreinheit GPU 605 in 6 abgebildet ist, kann bei einigen Ausführungsformen der Prozessor 602 verwendet werden, um als ein weiteres Beispiel Verbesserungsoperationen auszuführen. Prozessor 602, der das Computersystem 600 betreibt, kann ein oder mehrere Prozessorkerne gekoppelt mit Logik 630 sein. Logik 630 kann mit einem oder mehreren I/O-Geräten 660 gekoppelt sein, welche die Schnittstelle des Computersystems 600 bereitstellen können. Logik 630 könnte zum Beispiel bei einer Ausführungsform Chipsatz-Logik sein. Logik 630 ist mit Speicher 620 gekoppelt, der irgendeine Art von Speicher, einschließlich optischen, magnetischen oder Halbleiter-Speichers, sein kann. Grafikprozessor-Einheit 605 ist durch einen Framepuffer mit einer Anzeige 640 gekoppelt.
-
Bei einer Ausführungsform kann CPU 602 (hier Erzeuger) und GPU 605 (hier Verbraucher) das gemeinsame Benutzen der Mehrversionsdatenstruktur gespeichert im gemeinsamen Speicher 650 unterstützen. Bei einer Ausführungsform kann, wie oben beschrieben, CPU 602 Supportvorgänge oder Funktionen wie beispielsweise VersionDataRelease() unterstützen, um gemeinsam benutzte Mehrversionsdaten zu erzeugen und diese Daten im gemeinsamen Speicher 650 zu speichern. Bei einer anderen Ausführungsform können die gemeinsam benutzten Mehrversionsdaten auch im privaten CPU-Speicher 620 und/oder privaten GPU-Speicher 630 gespeichert sein. Bei einer Ausführungsform kann, wie oben beschrieben, GPU 605 (Verbraucher) Prozesse oder Funktionen wie beispielsweise VersionDataAcquire() unterstützen, um die gemeinsam benutzten Mehrversionsdaten zu erlangen.
-
Die hierin beschriebenen Grafikverarbeitungs-Techniken können in verschiedenen Hardware-Architekturen implementiert werden. Beispielsweise kann Grafikfunktionalität innerhalb eines Chipsatzes integriert sein. Alternativ kann ein getrennter Grafikprozessor verwendet werden. Als eine weitere Ausführungsform können die Grafikfunktionen durch einen Allzweckprozessor, einschließlich einem Mehrkernprozessor oder als eine Reihe von in einem maschinell lesbaren Datenträger gespeicherten Softwarebefehlen implementiert sein.