-
Gebiet der Erfindung
-
Ausführungsformen der Erfindung beziehen sich generell auf das Gebiet der Datenverarbeitung und spezifischer auf das Gebiet des gemeinsamen Benutzens von Computerressourcen innerhalb eines Prozessors, wie beispielsweise einem Hauptprozessor (CPU), Grafikprozessor (GPU) oder beiden.
-
Hintergrund
-
Während mehr Anwendungen die Parallelbearbeitungsfähigkeiten von Multiprozessorsystemen und Mikroprozessoren auszunutzen, gibt es, basierend auf der Art der ausgeführten Arbeit, eine wachsende Notwendigkeit, Computerressourcen gemeinsam zu benutzen. Zum Beispiel können parallele Programme von spezieller Verarbeitungshardware, wie beispielsweise einer GPU Gebrauch machen, wohingegen vorwiegend sequenziell ausführende Programme von einer Allzweck-CPU Gebrauch machen können. Während parallele und sequenzielle Operationen in modernen Programmen vermischter sind, hilft die gleichzeitige oder serielle Verwendung von sowohl CPU- als auch GPU-Ressourcen dabei, die Computerressourcen für die Art der Operationen oder Programme, die ausgeführt werden, zu optimieren.
-
Kurze Beschreibung der Zeichnungen
-
Erfindungsgemäße Ausführungsformen werden exemplarisch und in keiner Weise einschränkend in den Figuren der begleitenden Zeichnungen dargestellt, wobei gleiche Bezugsnummern zum Verweis auf ähnliche Elemente verwendet werden und in denen:
-
1 ein Blockdiagramm eines Mehrprozessorsystems veranschaulicht, bei dem mindestens eine erfindungsgemäße Ausführungsform verwendet werden kann;
-
2 eine CPU und GPU veranschaulicht, die Ressourcen gemäß einer Ausführungsform gemeinsam benutzen.
-
3 eine 3D-Grafikrendering-Pipeline gemäß einer Ausführungsform veranschaulicht.
-
4 eine Gleitkommalogik veranschaulicht, die von mehreren Prozessorkernen gemäß einer Ausführungsform gemeinsam benutzt wird.
-
5 ein Flussdiagramm von Operationen ist, die mit mindestens einer Ausführungsform verwendet werden.
-
6 ein gemeinsam benutztes Kopplungsstruktursystem veranschaulicht, in dem mindestens eine Ausführungsform verwendet werden kann.
-
7 ein Punkt-Zu-Punkt-Kopplungsstruktur-Computersystem veranschaulicht, in dem mindestens eine Ausführungsform der Erfindung verwendet werden kann.
-
Ausführliche Beschreibung
-
Ausführungsformen der Erfindung beziehen sich auf verarbeitende Geräte und Systeme, einschließlich denjenigen, die parallele oder „Durchsatz”-Anwendungen sowie auch vorwiegend sequenziell ausgeführte Programme verarbeiten können. Einige Ausführungsformen umfassen mindestens zwei Recheneinheiten, wie beispielsweise eine CPU, um vorwiegend sequenziellen Code auszuführen, und eine GPU, um vorwiegend parallelen Code, wie beispielsweise 3D-Grafik, wissenschaftliche oder Finanzprogramme auszuführen, die von der Parallelbearbeitung Gebrauch machen, indem sie zum Beispiel Single-Instruction-Multiple-Data-(SIMD)- oder „gepackte” oder „Vektor”-Befehle verwenden. Bei einer Ausführungsform wird ein Programm ohne Rücksicht auf die zugrunde liegenden verarbeitenden Ressourcen (CPU oder GPU) geschrieben und die Bestimmung, welche verarbeitenden Ressourcen am besten verwendet werden, um die Befehle oder Threads eines Programms auszuführen, kann von der Hardware selbst, einer Middleware-Software, wie beispielsweise einer Treiberstufe oder einem treiberartigen Programm oder dem Manager einer virtuellen Maschine oder einem „Hypervisor” veranlasst werden. Des Weiteren kann bei einigen Ausführungsformen ein Thread oder eine Gruppe von Befehlen, die entweder auf der CPU oder auf der GPU ablaufen, verfügbare Verarbeitungsfähigkeit anderer verarbeitender Ressourcen, wie beispielsweise einer CPU oder GPU für Teile der Operationen verwenden, die durch den Thread oder die Befehle ausgeführt werden, indem sie Informationen entweder durch einen gemeinsam genutzten Speicherplatz oder direkt über eine direkte Link-Kopplungsstruktur gemeinsam benutzen.
-
Verschiedene Arten von Operationen und Programmen können von Ausführungsformen Gebrauch machen, in denen Tasks zwischen einer GPU und CPU gemeinsam benutzt werden, einschließlich 3D-Grafikrendering-Programmen, die Operationen gemäß einer GPU-operativen „Pipeline” ausführen. Zum Beispiel ist Stumpf-Clipping eine bei vielen 3D-Grafik-Anwendungen verwendete Operation, um zu bestimmen, welche Polygone in einem Stumpf zu einer gegebenen Zeit erscheinen. Dies kann eine sehr rechenintensive Operation sein und nicht notwendigerweise eine, die die parallelen Ressourcen einer GPU erfordert. Deshalb können bei einer Ausführungsform einige oder alle Operationen des Stumpf-Clippings bei einer CPU „abgeladen” werden, die verfügbare Verarbeitungsfähigkeit aufweist, während die GPU andere Operationen ausführt. Die Daten, die die CPU benötigt, um Stumpf-Clipping auszuführen, können entweder direkt durch einen direkten Link von der GPU zur CPU gesendet werden oder durch einen gemeinsam benutzten Speicherplatz, wie beispielsweise einen PCI-Speicher oder gemeinsam benutzten Cache usw. Die Ergebnisse des Stumpf-Clippings können dann von der CPU über den gemeinsam benutzten Speicher oder den direkten Link an die GPU zurückgegeben werden und die GPU kann dann mit dem Rendering der Szene mit den Stumpf-Clipping-Ergebnissen von der CPU fortfahren. Bei einer Ausführungsform erfolgt die Steuerung dieser Art des Ressourcen-Sharings durch die Logik innerhalb der CPU und/oder GPU (oder durch Logik außerhalb von beiden), wohingegen bei anderen Ausführungsformen die gemeinsame Benutzung der Ressourcen durch eine Middleware-Software, wie beispielsweise eine Treiberstufe, einen Hypervisor usw. gesteuert werden kann, sodass die Anwendersoftware sich des Ressourcen-Sharings nicht bewusst ist.
-
Ausführungsformen der Erfindung ermöglichen Softwareanwendungen, auf Informationen in mehreren Speicherstrukturen, die mehreren Prozessoren entsprechen, zuzugreifen und diese zu speichern. Das kann in einigen Fällen hilfreich sein, wenn man parallele Befehle oder Anwendungen verarbeitet, die von Single-Instruction-Multiple-Data-(SIMD)- oder Multiple-Instruction-Multiple-Data-(MIMD)-Operationen Gebrauch machen, da jede SIMD- oder MIMD-Operation auf Operandendatenelemente von gemeinsam benutzten Speicherstrukturen ohne Rücksicht auf die spezielle Speicherstruktur zugreifen kann, in der sie lokalisiert ist. Das kann insbesondere bei Anwendungen, wie beispielsweise 3D-Grafik- oder Finanzanwendungen, hilfreich sein, die Operationen an großen Informationsumfängen gleichzeitig ausführen können. Jedoch kann das auch bei einigen traditionellen, vorwiegend sequenziellen CPU-Anwendungen hilfreich sein, die Informationen verwenden, die an mehreren unterschiedlichen Stellen gespeichert sein können.
-
Bei einigen Ausführungsformen kann ein Programm oder Thread auf der CPU ablaufen, der Teile enthält, die geeignet sein können, um sie auf einer GPU zu verarbeiten. In diesem Fall können Befehle oder Threads, die man auf der GPU ablaufen lassen kann, auf der GPU in einer ähnlichen Art wie oben beschrieben ausgeführt werden, wobei das Ergebnis dann an die CPU zur weiteren Verarbeitung zurückgegeben werden kann. Da zum Beispiel GPUs normalerweise sehr parallele Gleitkommaressourcen umfassen, können auf der CPU geplante Gleitkommabefehle durch einen gemeinsam benutzten Speicher oder einen direkten Link an die GPU übertragen und dort ausgeführt werden, während die CPU andere Befehle verarbeitet. Die Gleitkommaoperationen können dann ihre Ergebnisse über den gemeinsam benutzten Speicher oder den direkten Link an die CPU zurückgeben und die CPU kann dann diese Ergebnisse in den Rest der Operationen, die im Programm ausgeführt werden, aufnehmen. Bei einer Ausführungsform enthält die CPU entweder keine Gleitkommaressourcen oder sehr wenige Gleitkommaressourcen und vertraut im Wesentlichen auf die Gleitkommaressourcen der GPU, sodass die GPU und CPU die Gleitkommaressourcen gemeinsam benutzen.
-
Bei einigen Ausführungsformen, bei denen Speicher gemäß Segmenten organisiert sind oder auf diese darüber zugegriffen wird, wie beispielsweise „Seiten”, erhalten die Prozessoren (oder die Speicherschnittstellenlogik), die auf die Seiten zugreifen, Strukturen (z. B. „Seitentabellen”) aufrecht, um die Seitengröße oder Organisation einer speziellen Speicherstruktur der Paging-Größe bzw. dem Paging-Schema des Prozessors oder Memory-Controllers zuzuordnen. Beispielsweise bei einer Ausführungsform, bei der ein Prozessor oder Memory-Controller physische Seiten eines speziellen Speichers einer festgesetzten Zahl an virtuellen Seiten zuordnen kann, die der Prozessor oder Memory-Controller als Antwort auf ein Programm, das auf die Seiten zugreift, öffnen und schließen kann.
-
Da bei einigen Ausführungsformen jeder Prozessor oder jede Speicherschnittstelle auf andere Speicherstrukturen zugreifen kann, die durch eine andere Prozessor-Speicherschnittstelle gesteuert werden oder in anderer Weise dieser entsprechen können, kann etwas Kommunikation zwischen den Prozessoren/Memory-Controllern wünschenswert sein, um die Kohärenz zwischen den Seitenzuständen (geöffnet/geschlossen) jedes Prozessors oder Memory-Controllers aufrechtzuerhalten. Bei einer Ausführungsform kann eine n-weite Kopplungsstruktur (wobei „n” eine variable Zahl an Kanälen/Pins/Bahnen/Traces von 1 zu mehreren anzeigen kann) verwendet werden, um den Seitenzustand zwischen den verschiedenen Prozessoren oder Memory-Controllern zu kommunizieren, sodass ein Prozessor eine Seite des Speichers, auf die ein anderer Prozessor möglicherweise zugreifen muss, nicht schließt. Durch das Kommunizieren des Seitenzustands zwischen den verschiedenen Prozessoren (wie beispielsweise einer GPU und einer CPU) oder Memory-Controllern, die auf einen oder mehrere Speicher zugreifen, können unnötige Seitenöffnungs- oder Seitenschließoperationen vermieden und dadurch das Zugriffsverhalten zwischen den verschiedenen Prozessoren oder Memory-Controllern verbessert werden. Des Weiteren kann bei einigen Ausführungsformen die n-weite Kopplungsstruktur von einer relativ niedrigen Bandbreite sein, um nicht unangemessene Pins, Leistung oder andere Ressourcen zu erfordern.
-
Vorteilhafterweise können Ausführungsformen der Erfindung einer Anwendung ermöglichen, auf mehreren Prozessoren ohne Rücksicht auf das Speichergerät, in dem Daten gespeichert sind oder gespeichert werden sollen, abzulaufen. Das ist insbesondere bei Grafik-Anwendungen nützlich, bei denen beispielsweise ein Grafikprozessor eine Bildschirmhälfte von Pixeln rendert und ein anderer Grafikprozessor die andere. In dieser Situation können Dreiecke, die auf die Begrenzung fallen, Latenzzeit verursachen, wenn sie gefiltert werden, da ein Prozessor auf angrenzende Texil-Informationen von einem Speicher zugreifen muss (entsprechend Texils auf der Bildschirmhälfte des entsprechenden Prozessors) und ein weiterer Prozessor auf angrenzende Texil-Informationen von einem anderen Speicher zugreifen muss (entsprechend Texils auf der Bildschirmhälfte des entsprechenden Prozessors). In dieser Situation müsste ein Prozessor, der Informationen von einem nicht entsprechenden Speicher benötigt, diese durch den entsprechenden Prozessor anfordern, der sie zum anfordernden Prozessor zurückgeben muss, was Bandbreite verbraucht, die einen Bus mit relativ hoher Bandbreite zwischen den Prozessoren erfordert. Andernfalls würden Softwareentwickler Beschränkungen auferlegen müssen, wo Daten gespeichert werden, was insbesondere im Falle grenzüberschreitender Rendering-Dreiecke ziemlich schwierig wäre.
-
Bei einer Ausführungsform ordnet eine Seitentabelle eine durch Software bereitgestellte Adresse Positionen in zwei Speichern zu, die zwei Prozessoren entsprechen, welche verwendet werden, um Durchsatz-Anwendungen auszuführen. Insbesondere verwendet die Seitentabelle Bits einer Adresse, um auf Einträge der Tabelle zuzugreifen, die Adressen von Informationen enthalten, die an abwechselnden Stellen innerhalb der zwei Speicher gespeichert sind. Wenn daher Software die Informationen speichert oder auf diese zugreift, routet die Seitentabelle automatisch den Zugriff zum geeigneten Speicher, ohne dass die anfordernde Software (OS oder Anwendung) versteht oder sich darum kümmert, wo die Informationen tatsächlich gespeichert werden. Auf diese Weise kann auf der Zugriff auf Informationen bei Burstgeschwindigkeiten von jedem Speicher auf eine abwechselnde Weise erfolgen, wodurch die Bandbreite der Speicherschnittstelle jedes Prozessors maximiert wird und ein Bus mit relativ hoher Bandbreite, um speicher/prozessorübergreifende Zugriffe zu unterstützen, vermieden wird.
-
Bei einigen Ausführungsformen können mehrere Prozessoren (z. B. CPU und GPU) Daten einer anfordernden Anwendung bereitstellen, indem sie die Anforderung auf eine effiziente Weise, wie beispielsweise mit einem Kohärenzfilter, handhaben. Bei einer Ausführungsform kann ein Kohärenzfilter ein oder mehrere Kohärenztabellen oder eine andere Struktur umfassen, die einem oder mehreren Prozessoren entspricht und für diese zugänglich ist, sodass eine Anforderung von Daten durch eine Anwendung, die auf einem Prozessor abläuft, diesen Prozessor veranlasst, auf eine Tabelle zuzugreifen, die eine Adresse von Daten anzeigt, die momentan durch einen anderen Prozessor zugänglich sein können (z. B. vis-à-vis im Cache des Prozessors, im Puffer oder in einer anderen Struktur, in einer Seite, die momentan im entsprechenden Speicher des Prozessors geöffnet ist, usw.). Wenn sich die aktuellste Version der angeforderten Daten im Cache des anderen Prozessors befindet, kann der Prozessor, der die Anforderung empfängt, dem anderen Prozessor signalisieren, die angeforderten Daten zur anfordernden Anwendung zurückzugeben, oder der Prozessor, der die Anforderung empfängt, kann die Daten vom Prozessor über die n-weite Zwischenprozessor-Kopplungsstruktur abfragen. Bei einigen Ausführungsformen kann jeder Prozessor mehrere Prozessoren umfassen, in welchem Fall jeder Prozessor einem Prozessor-Sockel entsprechen kann.
-
Bei einigen Ausführungsformen können die oben beschriebenen Techniken auf Prozessoren oder Systeme angewandt werden, die zwei, vier, acht oder mehr Prozessoren oder Kerne aufweisen, die entweder von derselben Art (CPU) oder von unterschiedlicher Art (CPU und GPU) sind, oder auf andere Beschleuniger. Des Weiteren können Ausführungsformen der Erfindung auf mehrere unterschiedliche System- oder Verarbeitungskonfigurationen oder -anwendungen angewandt werden, einschließlich Mehrzweckrechnern, Grafikspielkonsolen, Grafikkarten-Anwendungen usw. Bei einer Ausführungsform schließen hier beschriebene Techniken ein oder mehrere Prozessoren ein, um 3D-Grafiken oder andere Anwendungen, wie beispielsweise Finanzanwendungen, ärztliche Anwendungen, bildgebende Anwendungen usw., auszuführen. Bei anderen Ausführungsformen können hier beschriebene Techniken in Verbindung mit Allzweck-CPUs verwendet werden, um sequenzielle oder traditionellere Arbeitslasten auszuführen. Bei noch weiteren Ausführungsformen können hier beschriebene Techniken in Verbindung mit Hybrid-Prozessoren verwendet werden, die konzipiert sind, sowohl die traditionellen Arbeitslasten der CPU als auch Durchsatz-Anwendungen auszuführen, wie beispielsweise Prozessoren, die traditionelle CPU- und grafikspezifische Logik („CPU + GPU”) umfassen. Bei einer Ausführungsform werden hier beschriebene Techniken in Verbindung mit einem oder mehreren Prozessoren verwendet, die mehrere CPU-Prozessorkerne aufweisen, welche SIMD-Befehle gekoppelt mit einer Kopplungsstruktur zusammen mit parallelanwendungsspezifischer Logik, wie beispielsweise Grafikstruktur-Abtastlogik, ausführen können.
-
1 zeigt einen Mikroprozessor, bei dem mindestens eine erfindungsgemäße Ausführungsform verwendet werden kann. Insbesondere zeigt 1 einen Prozessor, der für herkömmliche CPU-Anwendungen, Durchsatz-Anwendungen (z. B. 3D-Grafikanwendungen) oder eine Kombination aus herkömmlichen CPU- und Durchsatz-Anwendungen verwendet werden kann. Der Prozessor 100 umfasst eine Anzahl von Verarbeitungskernen 100-1 bis 100-N, dedizierte Durchsatz-Anwendungs-Hardware 110 (z. B. Grafikstruktur-Sampling-Hardware) und Memory-Interface-Logik 120, welche entlang einer Ringkopplungsstruktur 130 angeordnet sind. Bei bestimmten Ausführungsformen kann der Prozessor 100 einen oder mehrere Last-Level-Cachespeicher 135 enthalten, welche alle Informationen aus den Cachespeichern 101-1 bis 101-N innerhalb jedes Kerns 100-1 bis 100-N umfassen. Bei einer Ausführungsform können ein oder mehrere Verarbeitungskerne 100-1 bis 100-N SIMD-Operationen ausführen.
-
Bei einer Ausführungsform kann jede der CPUs einige geplante Operationen auf der GPU-Hardware ausführen, indem diese Operationen über gemeinsam benutzten Speicher oder einen direkten Link (oder Ring-Link in der in 1 veranschaulichten Ausführungsform) übertragen werden. Umgekehrt können auf der Grafikhardware geplante Operationen unter Verwendung ähnlicher Mechanismen zu einer verfügbaren CPU übertragen werden.
-
Bei einigen Ausführungsformen kann auf Informationen, wie beispielsweise Grafikstrukturen oder andere Informationen, die eine relativ große Menge an Speicherbandbreite erfordern, von einem anderen Speicher zugegriffen werden, der einem anderen Prozessor (nicht gezeigt) entspricht, ohne dass Anwendersoftware sich des Speichers, in dem die Informationen gespeichert sind, bewusst ist oder sich um diesen kümmert. Bei einigen Ausführungsformen kann Prozessor 100 mehr oder weniger Memory-Controller umfassen als in 1 veranschaulicht sind. Des Weiteren können sich die Memory-Controller von 1 innerhalb von Prozessor 100 oder außerhalb von Prozessor 100 befinden.
-
2 veranschaulicht eine GPU und CPU, die Ressourcen gemäß einer Ausführungsform gemeinsam benutzen. Bei einer Ausführungsform wird die CPU 201 in erster Linie verwendet, um vorwiegend sequenzielle Programme auszuführen, wohingegen die GPU 205 verwendet wird, um vorwiegend parallele Programme auszuführen. Bei einer Ausführungsform können entweder auf der CPU oder auf der GPU eingeplante Befehle zwischen der CPU und GPU übertragen oder „migriert” werden, indem der gemeinsam benutzte Speicher 210 verwendet wird. Bei einer Ausführungsform ist der gemeinsam benutzte Speicher ein Speicherbereich, der als gemeinsam benutzter PCI-Speicher spezifiziert ist, in dem die CPU oder GPU Informationen im Zusammenhang mit den migrierten Befehlen schreibt und liest. Zum Beispiel kann bei einer Ausführungsform, bei der Grafikoperationen durch die GPU ausgeführt werden, ein Teil der Grafikoperationen an die CPU zur Verarbeitung übertragen werden, wenn die CPU verfügbar ist, indem die Befehle und Daten, die von der CPU auszuführen sind, in den gemeinsam benutzten Speicher geschrieben werden, und indem durch einen Interrupt oder einen anderen direkten Link zwischen der CPU und GPU angezeigt wird, dass die CPU die Informationen von der gemeinsam benutzten Speicherressource lesen und die darin angezeigten Operationen ausführen soll. Bei einer Ausführungsform kann die GPU darin die Verarbeitung anderer Operationen fortsetzen, während die CPU die übertragenen Tasks verarbeitet. Wenn die CPU die Tasks abschließt, kann sie ihre Ergebnisse in den gemeinsam benutzten Speicher schreiben und der GPU durch einen Interrupt oder direkten Kommunikationslink anzeigen, dass die Ergebnisse verfügbar sind, sodass die GPU die Ergebnisse lesen und sie in die Grafikrendering-Pipeline aufnehmen kann. Bei einer Ausführungsform kann die umgekehrte Verwendung der gemeinsam benutzten Speicherressource ausgeführt werden, wobei die CPU Operationen ausführt, von denen einige durch die GPU ausgeführt werden können.
-
Bei einer Ausführungsform wird ein direkter Link 215 verwendet, um entweder Informationen gemeinsam zu benutzen, die zwischen der CPU und GPU zu übertragen sind (statt z. B. einen gemeinsam benutzten Speicher zu verwenden) und/oder einander zu signalisieren, dass Informationen im gemeinsam benutzten Speicher verfügbar sind. Bei einer Ausführungsform wird der direkte Link verwendet, um Seiteninformationen gemeinsam zu benutzen, sodass ein Prozessor eine Seite nicht schließt, die der andere Prozessor vielleicht benötigt. Bei einer Ausführungsform wird die gemeinsame Benutzung von Ressourcen zwischen einer CPU und GPU durch die Logik in der CPU, GPU oder von beiden gesteuert bzw. die Logik befindet sich an anderer Stelle im System. Bei einigen Ausführungsformen wird die gemeinsame Benutzung von Ressourcen durch Middleware, eine Treiberstufe oder treiberartige Software oder den Manager einer virtuellen Maschine oder einen Hypervisor gesteuert. Vorteilhafterweise können Ausführungsformen verwendet werden, ohne dass die Anwendersoftware oder das OS irgendetwas über die gemeinsame Benutzung von Ressourcen wissen. Bei einer Ausführungsform können Teile einer Grafik-API die gemeinsame Benutzung der CPU- und GPU-Ressourcen steuern. Insbesondere kann eine API, die sich der zugrunde liegenden Ressourcen bewusst ist, von den Ressourcen basierend auf den in ihrer Grafikrendering-Pipeline ausgeführten Operationen Gebrauch machen.
-
3 veranschaulicht eine Grafikrendering-Pipeline gemäß einer Ausführungsform. Bei einer Ausführungsform umfasst die Grafikrendering-Pipeline von 3 einen Eingabe-Assembler-Schritt 301, einen Vertex-Shader-Schritt 305, einen Geometrie-Shader-Schritt 310, eine Stream-Ausgangsstufe 315, einen Rasterizer-Schritt 320, einen Pixelshader-Schritt 325 und einen Ausgabe-Merger-Schritt 330. Außerdem kann die Grafikrendering-Pipeline von einer gemeinsam benutzten Speicherressource, wie beispielsweise Puffer, die sich in der gemeinsam benutzten Speicherressource 335 befinden, Gebrauch machen.
-
Bei einer Ausführungsform können eine oder mehrere oder ein Teil von einer oder mehreren in 3 veranschaulichten Grafikrendering-Pipeline-Schritten entweder zu einer CPU-Ressource oder zu einer anderen GPU-Ressource übertragen werden, abhängig von den auszuführenden Operationen und der Verfügbarkeit von Hardware-Ressourcen. Zum Beispiel wird bei einer Ausführungsform der Vertex-Shader-Schritt durch eine CPU ausgeführt, die verfügbare Hardware-Ressourcen aufweist, indem Befehle von der API zur CPU übertragen oder eingeplant werden, beispielsweise unter Verwendung der gemeinsam benutzten Speicherressource. Sobald die CPU diese Operationen abgeschlossen hat, kann sie dann ihre Ergebnisse unter Verwendung der gemeinsam benutzten Speicherressource zur GPU übertragen. Bei einer Ausführungsform kann die API oder eine andere Software Befehle einplanen, die auf der CPU (und einige auf der GPU) ausgeführt werden, wobei die CPU und GPU jeweils ihre eigene Einplanungslogik oder eine gemeinsam benutzte Einplanungslogik und eine gemeinsam benutzte Ressource, wie beispielsweise Gleitkommalogik, besitzen. Bei einer Ausführungsform können Ganzzahloperationen bei der Ganzzahllogik eingeplant sein (die innerhalb einer CPU lokalisiert sein kann) und Gleitkommaoperationen können bei der Gleitkommalogik eingeplant sein (die innerhalb der GPU lokalisiert sein kann).
-
4 veranschaulicht eine Ausführungsform, in der eine CPU und GPU Gleitkomma- und Ganzzahlressourcen gemeinsam benutzen. Insbesondere veranschaulicht 4 einen Prozessor 400 mit der Abruflogik 401, um Befehle abzurufen, Decodierlogik 405, um Befehle zu decodieren, L1-Datencache 410a–b, um von den Befehlen verwendete Daten zu speichern, einen gemeinsam benutzten L2-Cache 415 und einen gemeinsam benutzten L3-Cache 420 für die Verwendung durch mehrere Agenten. Des Weiteren veranschaulicht 4 Ganzzahlausführungsressourcen 425a–h, um Ganzzahlbefehle auszuführen, und Gleitkommaausführungsressourcen 430a–b, um Gleitkommabefehle auszuführen. Des Weiteren besitzen bei einer Ausführungsform die Gleitkommaausführungsressourcen und die Ganzzahlausführungsressourcen ihre eigene dedizierte Einplanungslogik 435a–b und 440. Bei einer Ausführungsform umfassen die Gleitkommaressourcen 128-Bit-Floating Point Multiply Accumulate-(FMAC)-Logik. Bei einigen Ausführungsformen werden die Einplanungsressourcen mindestens teilweise gemeinsam benutzt.
-
Bei einer Ausführungsform können Befehle, die Gleitkommaressourcen erfordern, bei den Gleitkommaressourcen eingeplant sein, indem Gleitkomma-Scheduler verwendet werden, wohingegen Befehle, die Ganzzahlausführungsressourcen erfordern, bei den Ganzzahlausführungseinheiten mit einem Ganzzahl-Scheduler eingeplant sein können. Bei einer Ausführungsform kann ein Hypervisor, eine Middleware, Treiberstufe oder API Teile eines Programms, die Gleitkommaressourcen erfordern, bei den Gleitkommaausführungseinheiten einplanen, indem die Gleitkomma-Scheduler-Logik gleichzeitig oder seriell mit Ganzzahlbefehlen, die bei den Ganzzahlausführungsressourcen durch die Ganzzahl-Scheduler eingeplant sind, verwendet wird. Bei einer Ausführungsform veranschaulicht 4 eine CPU, bei anderen Ausführungsformen veranschaulicht sie eine GPU und bei weiteren Ausführungsformen eine CPU und eine GPU.
-
5 ist ein Flussdiagramm, das Operationen, die gemäß einer Ausführungsform verwendet werden können, veranschaulicht. Bei 501 sind Befehle bei einer GPU oder CPU eingeplant. Bei Operation 505 benutzen Befehle, die bei einer GPU oder CPU eingeplant sind, Informationen gemeinsam, indem sie einen gemeinsam benutzten Speicher oder direkten Link beim Schreiben von Informationen zum gemeinsam benutzten Speicher oder direkten Link verwenden. Bei Operation 510 liest ein Benutzer der gemeinsam benutzten Informationen die Informationen vom gemeinsam benutzten Speicher oder direkten Link. Bei anderen Ausführungsformen können andere Operationen ausgeführt werden.
-
6 veranschaulicht zum Beispiel ein Computersystem mit gemeinsam benutztem Bus(z. B. ein Frontside-Bus- FSB)-Computersystem), in dem eine Ausführungsform der Erfindung verwendet werden kann. Jeder Prozessor 601, 605, 610 oder 615 kann asymmetrische Kerne umfassen (die sich in Betriebsverhalten, Leistung, Betriebsspannung, Taktrate oder ISA unterscheiden), die auf Informationen von jedem lokalen Level Eins-(L1)-Cache-Speicher 620, 625, 630, 635, 640, 645, 650, 655 innerhalb oder anderweitig verbunden mit einem der Prozessorkerne 623, 627, 633, 637, 643, 647, 653, 657 zugreifen können. Außerdem kann jeder Prozessor 601, 605, 610 oder 615 auf Informationen von jedem der gemeinsam genutzten Level Zwei-(L2)-Caches 603, 607, 613, 617 oder vom Systemspeicher 660 über den Chipsatz 665 zugreifen.
-
Ausführungsformen der Erfindung können in jedem der Prozessoren oder der in 6 veranschaulichten Agenten vorhanden sein. Zum Beispiel kann die Logik 619 innerhalb von irgendeinem oder allen Prozessoren 623, 627, 633, 637, 643, 647, 653, 657 aufgenommen werden, um Aspekte von mindestens einer Ausführungsform auszuführen. Insbesondere kann Logik 619 verwendet werden, um Signale von anderen Agenten innerhalb des Systems zu erkennen, zu übertragen und zu interpretieren, um zu bestimmen, ob eine Seite des Speichers zu öffnen oder zu schließen ist, je nachdem, ob auf eine Seite momentan von einem anderen Agenten zugegriffen wird. Bei anderen Ausführungsformen ist die Logik 619 unter mehreren Agenten verteilt. Bei noch weiteren Ausführungsformen kann die Logik 660 Software, Hardware oder eine Kombination davon umfassen.
-
Zusätzlich zu dem in 6 gezeigten FSB-Computersystem können andere Systemkonfigurationen in Verbindung mit verschiedenen Ausführungsformen der Erfindung, einschließlich Punkt-zu-Punkt-(P2P)-Kopplungssystemen und Ringkopplungssystemen, verwendet werden. Das P2P-System von 7 kann z. B. mehrere Prozessoren umfassen, von denen nur zwei, Prozessor 770, 780, exemplarisch gezeigt werden. Die Prozessoren 770, 780 können je einen lokalen Memory Controller Hub (MCH) 772, 782 für die Verbindung mit dem Speicher 72, 74 enthalten. Die Prozessoren 770, 780 können über eine P2P-Schnittstelle 750 unter Verwendung der P2P-Schnittstellenschaltungen 778, 788 Daten austauschen. Bei den Prozessoren 770, 780 erfolgt der Datenaustausch mit einem Chipsatz 790 über einzelne P2P-Schnittstellen 752, 754, wobei P2P-Schnittstellenschaltungen 776, 794, 786, 798 verwendet werden. Der Chipsatz 790 kann mit einer Hochleistungsgrafikschaltung 738 über eine Hochleistungsgrafikschnittstelle 739 Daten austauschen.
-
Ausführungsformen der Erfindung können in jedem Prozessor oder Agenten innerhalb von 7 enthalten sein. Zum Beispiel kann Logik 799 innerhalb von einem oder beiden Prozessoren 770, 780 aufgenommen werden, um Aspekte von mindestens einer Ausführungsform auszuführen. Insbesondere kann Logik 799 verwendet werden, um Signale von anderen Agenten innerhalb des Systems zu erkennen, zu übertragen und zu interpretieren, um zu bestimmen, ob eine Seite des Speichers zu öffnen oder zu schließen ist, je nachdem, ob auf eine Seite momentan von einem anderen Agenten zugegriffen wird. Bei anderen Ausführungsformen ist die Logik 799 unter mehreren Agenten verteilt. Bei noch weiteren Ausführungsformen kann die Logik 799 Software, Hardware oder eine Kombination davon umfassen.
-
Viele unterschiedliche Arten von verarbeitenden Geräten könnten aus der Verwendung solcher Prozess-Neuzuweisungstechniken Nutzen ziehen. Zum Beispiel können die Recheneinheiten 600-1 bis 600-N Allzweckprozessoren (z. B. Mikroprozessoren) sein oder sie können Mikroprozessor-Kerne bei einem Mehrkern-(auf einer einzelnen Chiplage)-Mikroprozessor sein. Alternativ können Digitalsignal-Prozessoren, Grafikprozessoren, Netzwerkprozessoren oder jede Art von Spezialprozessor, der in einem System mit mehreren parallelen Einheiten oder Kernen verwendet werden kann, Nutzen aus thermisch (oder leistungs-)motivierter Prozessverlagerung zwischen Recheneinheiten ziehen. Die Recheneinheiten oder Prozessoren können identisch sein oder eine mindestens partielle funktionelle Überlappung aufweisen. D. h. jede Recheneinheit hat in gewissem Maß einen gemeinsamen Satz von Anweisungen oder Befehlen, sodass es mindestens einige (wenn nicht alle) Prozesse gibt, die auf mehr als einer Recheneinheit oder einem Prozessor ausgeführt werden können. Bei anderen Ausführungsformen können die Recheneinheiten in einem solchen Umfang asymmetrisch sein, wie sie unterschiedliche Leistungsfähigkeit, Zahl an Transistoren, Energieverbrauchs- oder thermische Merkmale, Taktfrequenzen oder ISA oder eine unterschiedliche Kombination davon aufweisen.
-
Um die zweckdienliche Verarbeitung und die Rückgabe der angeforderten Daten zu erleichtern, kann mindestens eine Ausführungsform einen Kohärenzfilter umfassen, um die beste (z. B. schnellste) Möglichkeit zu bestimmen, durch eine Anwendung angeforderte Daten abzufragen. Zum Beispiel kann bei einer Ausführungsform ein Kohärenzfilter eine Kohärenztabelle umfassen, deren Einträge Informationen über Daten umfassen, auf die momentan durch einen Prozessor oder Prozessoren im System zugegriffen werden kann. Bei einer Ausführungsform umfasst die Kohärenztabelle für einen Prozessor eine Liste von Adressen, welche die Daten anzeigen, die innerhalb eines Caches, Puffers oder einer anderen Speicher-Struktur eines anderen Prozessors im System verfügbar sein können, sodass der Prozessor zuerst seine Kohärenztabelle prüft, wenn eine Anwendung Daten anfordert, um zu sehen, ob ein anderer Prozessor momentan die Daten hat. Wenn dem so ist, können die Daten durch den Prozessor abgefragt werden, der die Anforderung bedient, indem er die Daten über die n-weite Zwischenprozessor-Kopplungsstruktur abfragt. Da die Tabelle bei einer Ausführungsform nur einige der Daten anzeigen würde, die in Cache/Puffern/usw. jedes Prozessors verfügbar sind (tatsächlich könnte die Tabelle in der Menge der darin enthaltenen Info abweichen), könnte der Verkehr auf der n-weiten Zwischenprozessor-Kopplungsstruktur reduziert sein oder zumindest gemäß der Information oder Größe der Kohärenztabellen gesteuert werden.
-
12 veranschaulicht ein System, in dem eine Ausführungsform der Erfindung, einschließlich eines Kohärenzfilters, verwendet werden kann. In 12 können eine Anwendung oder Thread 1240, die auf Prozessor 1205 ausgeführt werden, Daten anfordern, indem sie eine Adresse an Prozessor 1205 bereitstellen. Prozessor 1205 kann dann auf eine Kohärenztabelle 1245 zugreifen, die im Prozessor oder einem Speicher, der durch den Prozessor zugänglich ist, gespeichert ist, um zu bestimmen, ob sich die angeforderten Daten momentan innerhalb eines Caches oder Puffers innerhalb von Prozessor 1200 befinden. Wenn zum Beispiel die Tabelle anzeigt, dass die angeforderten Daten momentan im Prozessor 1200 verfügbar sind, kann der Prozessor 1205 die Daten vom Prozessor 1200 über die Kopplungsstruktur 1208 abfragen und dadurch die Daten dem Programm in der zweckdienlichsten Weise bereitstellen. Bei einer Ausführungsform ist die Tabelle mit einem Teil der Adresse referenziert, welche von der Anwendung oder dem Thread 1240 an den Prozessor 1205 bereitgestellt wird. Des Weiteren entspricht bei mindestens einer Ausführungsform eine unterschiedliche Tabelle (oder dieselbe Tabelle) jedem Prozessor im System und sie wird aufrechterhalten, indem ein Eintrag innerhalb der Tabelle für jede angeforderte Adresse erstellt wird, die in einem anderen Prozessor gefunden wird. Des Weiteren kann jeder Eintrag Informationen umfassen, um anzuzeigen, wenn die Daten innerhalb eines anderen Prozessors nicht gefunden werden können oder der Eintrag vollständig entfernt werden kann. Verschiedene Kohärenztabellen-Wartungsschemen und -Algorithmen können verwendet werden, um die Informationen nachzuverfolgen, die zwischen den Prozessoren über die Kopplungsstruktur 1208 gemeinsam benutzt werden sollen.
-
Einer oder mehrere Aspekte mindestens einer Ausführungsform können implementiert werden, indem die hier beschriebenen Techniken durch repräsentative Daten ausgeführt werden, die auf einem maschinenlesbaren Datenträger gespeichert sind, welcher verschiedene Logiken innerhalb des Prozessors repräsentiert, die beim Lesen durch eine Maschine die Maschine veranlassen, die Logik zu fabrizieren. Solche Repräsentationen, auch als „IP-Kerne” bekannt, können auf einem konkreten, maschinenlesbaren Datenträger („Band”) gespeichert und an verschiedene Kunden oder Fertigungsanlagen geliefert werden, wo sie in Fabrikationsmaschinen geladen werden, welche die Logik oder den Prozessor herstellen.
-
Somit wurde hier ein Verfahren und eine Vorrichtung für die Leitung von Zugriffen auf Mikroarchitektur-Speicherregionen beschrieben. Es ist offenbar, dass die vorstehende Beschreibung rein illustrativ und in keiner Weise einschränkend ist. Viele andere Ausführungsformen sind für Fachleute offenkundig, nachdem sie die vorstehende Beschreibung gelesen und verstanden haben. Der Umfang der Erfindung ist deshalb mit Verweis auf die angehängten Ansprüche festgelegt, zusammen mit dem vollen Umfang von gleichwertigen Ausführungen, zu denen die Ansprüche berechtigen.