DE102010055267A1 - Gemeinsames Benutzen von Ressourcen zwischen einer CPU und GPU - Google Patents

Gemeinsames Benutzen von Ressourcen zwischen einer CPU und GPU Download PDF

Info

Publication number
DE102010055267A1
DE102010055267A1 DE102010055267A DE102010055267A DE102010055267A1 DE 102010055267 A1 DE102010055267 A1 DE 102010055267A1 DE 102010055267 A DE102010055267 A DE 102010055267A DE 102010055267 A DE102010055267 A DE 102010055267A DE 102010055267 A1 DE102010055267 A1 DE 102010055267A1
Authority
DE
Germany
Prior art keywords
cpu
gpu
processor
logic
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE102010055267A
Other languages
English (en)
Inventor
Eric Tex. Sprangle
Matthew Tex. Craighead
Christ Tex. Goodman
Belliappa Tex. Kuttanna
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102010055267A1 publication Critical patent/DE102010055267A1/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor

Abstract

Eine Technik, um Ausführungsressourcen gemeinsam zu benutzen. Bei einer Ausführungsform benutzen eine CPU und eine GPU Ressourcen gemäß der Arbeitslast, den Leistungserwägungen oder den verfügbaren Ressourcen gemeinsam, indem sie Befehle und Informationen zwischen der CPU und GPU einplanen oder übertragen.

Description

  • 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.

Claims (30)

  1. Vorrichtung, umfassend: ein Hauptprozessor (CPU); ein Grafikprozessor (GPU), gekoppelt mit der CPU; Logik, um Ausführungsressourcen zwischen der CPU und GPU gemeinsam zu benutzen.
  2. Vorrichtung nach Anspruch 1, weiter umfassend Logik, um Seiteninformationen zwischen der CPU und GPU zu kommunizieren.
  3. Vorrichtung nach Anspruch 1, wobei die Logik eine gemeinsam benutzte Speicherressource umfasst, um von der CPU und GPU gemeinsam benutzte Informationen zu speichern.
  4. Vorrichtung nach Anspruch 1, wobei die Logik einen direkten Link zwischen der CPU und GPU umfasst, um den Informationsaustausch zu erleichtern.
  5. Vorrichtung nach Anspruch 2, wobei die GPU Gleitkommaausführungsressourcen umfasst, die von der CPU zu verwenden sind.
  6. Vorrichtung nach Anspruch 2, wobei die CPU Ganzzahlausführungsressourcen umfasst, die von der GPU zu verwenden sind.
  7. Vorrichtung nach Anspruch 1, wobei bei der GPU eingeplante Befehle zur CPU migriert und ein Ergebnis der migrierten Befehle zur GPU übertragen werden.
  8. Vorrichtung nach Anspruch 1, wobei bei der CPU eingeplante Befehle zur GPU migriert und ein Ergebnis der migrierten Befehle zur CPU übertragen werden.
  9. System, umfassend: ein Hauptprozessor (CPU); ein Grafikprozessor (GPU), gekoppelt mit der CPU; Logik, um Ausführungsressourcen zwischen der CPU und GPU gemeinsam zu benutzen; Systemspeicher, der von der CPU oder GPU zu verwenden ist.
  10. System nach Anspruch 9, weiter umfassend Logik, um Seiteninformationen zwischen der CPU und GPU zu kommunizieren.
  11. System nach Anspruch 9, wobei die Logik eine gemeinsam benutzte Speicherressource umfasst, um von der CPU und GPU gemeinsam benutzte Informationen zu speichern.
  12. System nach Anspruch 9, wobei die Logik einen direkten Link zwischen der CPU und GPU umfasst, um den Informationsaustausch zu erleichtern.
  13. System nach Anspruch 10, wobei die GPU Gleitkommaausführungsressourcen umfasst, die von der CPU zu verwenden sind.
  14. System nach Anspruch 10, wobei die CPU Ganzzahlausführungsressourcen umfasst, die von der GPU zu verwenden sind.
  15. System nach Anspruch 9, wobei bei der GPU eingeplante Befehle zur CPU migriert und ein Ergebnis der migrierten Befehle zur GPU übertragen werden.
  16. System nach Anspruch 9, wobei bei der CPU eingeplante Befehle zur GPU migriert und ein Ergebnis der migrierten Befehle zur CPU übertragen werden.
  17. Prozessor, umfassend: ein Hauptprozessor (CPU); ein Grafikprozessor (GPU), gekoppelt mit der CPU; Logik, um Ausführungsressourcen zwischen der CPU und GPU gemeinsam zu benutzen; Decodierlogik gekoppelt mit der CPU und GPU, um Befehle zu decodieren; Befehlscache, um die Befehle zu speichern; Einplanungslogik, um die Befehle einzuplanen.
  18. Prozessor nach Anspruch 17, weiter umfassend Logik, um Seiteninformationen zwischen der CPU und GPU zu kommunizieren.
  19. Prozessor nach Anspruch 17, wobei die Logik eine gemeinsam benutzte Speicherressource umfasst, um von der CPU und GPU gemeinsam benutzte Informationen zu speichern.
  20. Prozessor nach Anspruch 17, wobei die Logik einen direkten Link zwischen der CPU und GPU umfasst, um den Informationsaustausch zu erleichtern.
  21. Prozessor nach Anspruch 19, wobei die GPU Gleitkommaausführungsressourcen umfasst, die von der CPU zu verwenden sind.
  22. Prozessor nach Anspruch 19, wobei die CPU Ganzzahlausführungsressourcen umfasst, die von der GPU zu verwenden sind.
  23. Prozessor nach Anspruch 17, wobei bei der GPU eingeplante Befehle zur CPU migriert und ein Ergebnis der migrierten Befehle zur GPU übertragen werden.
  24. Prozessor nach Anspruch 17, wobei bei der CPU eingeplante Befehle zur GPU migriert und ein Ergebnis der migrierten Befehle zur CPU übertragen werden.
  25. Prozessor nach Anspruch 17, wobei die Scheduler-Logik eine erste Scheduler-Logik umfasst, um Ganzzahlbefehle einzuplanen, und eine zweite Scheduler-Logik, um Gleitkommabefehle einzuplanen.
  26. Prozessor nach Anspruch 25, wobei die CPU und GPU die zweite Scheduler-Logik gemeinsam benutzen.
  27. Verfahren, umfassend: das Einplanen eines Befehls bei einem ersten Prozessor, der einen ersten Satz von Ausführungsressourcen aufweist; das Migrieren des Befehls zu einem zweiten Prozessor, der einen zweiten Satz von Ausführungsressourcen aufweist; das Übertragen der Informationen, die sich aus der Ausführung des Befehls auf dem zweiten Prozessor ergeben, zum ersten Prozessor.
  28. Verfahren nach Anspruch 27, wobei der erste Prozessor ein Hauptprozessor (CPU) und der zweite Prozessor ein Grafikprozessor (GPU) ist.
  29. Verfahren nach Anspruch 27, wobei der erste Prozessor eine GPU und der zweite Prozessor eine CPU ist.
  30. Verfahren nach Anspruch 27, weiter umfassend das Kommunizieren von Paging-Informationen zwischen dem ersten und zweiten Prozessor.
DE102010055267A 2009-12-31 2010-12-20 Gemeinsames Benutzen von Ressourcen zwischen einer CPU und GPU Ceased DE102010055267A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/655,577 US8669990B2 (en) 2009-12-31 2009-12-31 Sharing resources between a CPU and GPU
US12/655,577 2009-12-31

Publications (1)

Publication Number Publication Date
DE102010055267A1 true DE102010055267A1 (de) 2011-07-28

Family

ID=44186959

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102010055267A Ceased DE102010055267A1 (de) 2009-12-31 2010-12-20 Gemeinsames Benutzen von Ressourcen zwischen einer CPU und GPU

Country Status (5)

Country Link
US (2) US8669990B2 (de)
JP (2) JP5484305B2 (de)
CN (1) CN102117260B (de)
DE (1) DE102010055267A1 (de)
TW (2) TWI620128B (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2677427A1 (de) * 2012-06-22 2013-12-25 Intel Corporation Techniken für den direkten Zugang zu einem grafischen Verarbeitungseinheitsspeicher über eine Applikation

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8669990B2 (en) * 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
US8723877B2 (en) * 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
US9519943B2 (en) * 2010-12-07 2016-12-13 Advanced Micro Devices, Inc. Priority-based command execution
US8830245B2 (en) * 2010-12-14 2014-09-09 Amazon Technologies, Inc. Load balancing between general purpose processors and graphics processors
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing
GB201103698D0 (en) * 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphics processing
CN102323917B (zh) * 2011-09-06 2013-05-15 中国人民解放军国防科学技术大学 一种基于共享内存实现多进程共享gpu的方法
US20130159630A1 (en) * 2011-12-20 2013-06-20 Ati Technologies Ulc Selective cache for inter-operations in a processor-based environment
US9990287B2 (en) * 2011-12-21 2018-06-05 Intel Corporation Apparatus and method for memory-hierarchy aware producer-consumer instruction
US9058201B2 (en) * 2011-12-28 2015-06-16 Intel Corporation Managing and tracking thread access to operating system extended features using map-tables containing location references and thread identifiers
WO2013119226A1 (en) * 2012-02-08 2013-08-15 Intel Corporation Dynamic cpu gpu load balancing using power
US9430807B2 (en) * 2012-02-27 2016-08-30 Qualcomm Incorporated Execution model for heterogeneous computing
US10255104B2 (en) * 2012-03-29 2019-04-09 Advanced Micro Devices, Inc. System call queue between visible and invisible computing devices
CN108681519B (zh) * 2012-03-30 2022-04-08 英特尔公司 用于从多线程发送请求至加速器的机制
CN102890643B (zh) * 2012-07-26 2015-01-21 上海交通大学 基于应用效果即时反馈的显卡虚拟化下的资源调度系统
US9009419B2 (en) * 2012-07-31 2015-04-14 Advanced Micro Devices, Inc. Shared memory space in a unified memory model
US8938602B2 (en) * 2012-08-02 2015-01-20 Qualcomm Incorporated Multiple sets of attribute fields within a single page table entry
US9319254B2 (en) * 2012-08-03 2016-04-19 Ati Technologies Ulc Methods and systems for processing network messages in an accelerated processing device
US9218289B2 (en) * 2012-08-06 2015-12-22 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US9378572B2 (en) * 2012-08-17 2016-06-28 Intel Corporation Shared virtual memory
US9373182B2 (en) * 2012-08-17 2016-06-21 Intel Corporation Memory sharing via a unified memory architecture
US9110795B2 (en) 2012-12-10 2015-08-18 Qualcomm Incorporated System and method for dynamically allocating memory in a memory subsystem having asymmetric memory components
US9092327B2 (en) 2012-12-10 2015-07-28 Qualcomm Incorporated System and method for allocating memory to dissimilar memory devices using quality of service
US8959298B2 (en) 2012-12-10 2015-02-17 Qualcomm Incorporated System and method for managing performance of a computing device having dissimilar memory types
WO2014108743A1 (en) * 2013-01-09 2014-07-17 Freescale Semiconductor, Inc. A method and apparatus for using a cpu cache memory for non-cpu related tasks
CN103164839B (zh) * 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
KR101442643B1 (ko) * 2013-04-30 2014-09-19 전자부품연구원 Cpu와 gpu 간의 협업 시스템 및 그 방법
CN105892931A (zh) * 2014-05-16 2016-08-24 上海京知信息科技有限公司 一种支持基于智能闪存缓存的异构cpu-gpu系统架构的操作系统原型
US10996959B2 (en) * 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
JP2016162303A (ja) * 2015-03-03 2016-09-05 株式会社東芝 無線通信装置
US9704217B2 (en) 2015-04-20 2017-07-11 Intel Corporation Apparatus and method for non-uniform frame buffer rasterization
JP6345627B2 (ja) * 2015-05-20 2018-06-20 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置および情報処理方法
KR102001222B1 (ko) * 2015-07-07 2019-07-17 삼성전자주식회사 신호 처리 장치 및 방법
CN107124286B (zh) * 2016-02-24 2020-05-26 深圳市知穹科技有限公司 一种海量数据高速处理、交互的系统及方法
EP3436929A4 (de) * 2016-06-17 2019-10-16 Hewlett-Packard Development Company, L.P. Gemeinsame maschinenlerndatenstruktur
US10310908B2 (en) 2016-08-19 2019-06-04 International Business Machines Corporation Dynamic usage balance of central processing units and accelerators
US10580189B2 (en) * 2016-09-16 2020-03-03 Intel Corporation Apparatus and method for optimized ray tracing
US10203988B2 (en) 2016-10-13 2019-02-12 International Business Machines Corporation Adaptive parallelism of task execution on machines with accelerators
US10297078B2 (en) * 2016-11-21 2019-05-21 Samsung Electronics Co., Ltd. Method and apparatus for rendering curve
US10776144B2 (en) 2017-01-08 2020-09-15 International Business Machines Corporation Address space management with respect to a coherent accelerator processor interface architecture
US10459817B2 (en) * 2017-01-18 2019-10-29 International Business Machines Corporation Evaluating performance improvement of executing instructions in a first processor over execution on a second processor
US10409614B2 (en) * 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US11237872B2 (en) * 2017-05-23 2022-02-01 Kla-Tencor Corporation Semiconductor inspection and metrology systems for distributing job among the CPUs or GPUs based on logical image processing boundaries
US10685473B2 (en) * 2017-05-31 2020-06-16 Vmware, Inc. Emulation of geometry shaders and stream output using compute shaders
US10585703B2 (en) 2017-06-03 2020-03-10 Apple Inc. Dynamic operation allocation for neural networks
US10552161B2 (en) 2017-06-21 2020-02-04 International Business Machines Corporation Cluster graphical processing unit (GPU) resource sharing efficiency by directed acyclic graph (DAG) generation
KR102403379B1 (ko) * 2017-09-12 2022-06-02 주식회사 코코링크 다중 gpu간 데이터 공유 방법
US10732694B2 (en) 2017-09-22 2020-08-04 Qualcomm Incorporated Power state control of a mobile device
CN109726005B (zh) * 2017-10-27 2023-02-28 伊姆西Ip控股有限责任公司 用于管理资源的方法、服务器系统和计算机可读介质
US10672095B2 (en) * 2017-12-15 2020-06-02 Ati Technologies Ulc Parallel data transfer to increase bandwidth for accelerated processing devices
JPWO2020045269A1 (ja) * 2018-08-28 2021-08-10 tonoi株式会社 システム、情報処理方法、及びプログラム
WO2020056620A1 (en) * 2018-09-19 2020-03-26 Intel Corporation Hybrid virtual gpu co-scheduling
WO2020080458A1 (ja) * 2018-10-19 2020-04-23 日本電信電話株式会社 データ処理システム、中央演算処理装置及びデータ処理方法
US11029866B2 (en) * 2018-10-31 2021-06-08 EMC IP Holding Company LLC Methods, devices, and computer program products for processing data
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2020190802A1 (en) 2019-03-15 2020-09-24 Intel Corporation Compression techniques
CN112534404A (zh) 2019-03-15 2021-03-19 英特尔公司 用于矩阵加速器架构的稀疏优化
CN111030747B (zh) * 2019-11-22 2021-08-31 中国科学院国家空间科学中心 一种基于FPGA的SpaceFibre节点IP核
US11579942B2 (en) * 2020-06-02 2023-02-14 Vmware, Inc. VGPU scheduling policy-aware migration
CN112199149A (zh) * 2020-10-16 2021-01-08 维沃移动通信有限公司 界面渲染方法、装置及电子设备
US11947941B2 (en) 2021-08-24 2024-04-02 Red Hat, Inc. Dynamic computation offloading to graphics processing unit

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63271537A (ja) * 1987-04-28 1988-11-09 Seiko Epson Corp 割り込み制御装置
JP2845857B2 (ja) * 1997-04-01 1999-01-13 コナミ株式会社 画像の半透明表示装置,半透明表示方法,及びコンピュータプログラムを記録した機械読取り可能な記録媒体
JP2001067237A (ja) * 1999-08-25 2001-03-16 Nec Corp 計算機システム及びその処理方法
US6868481B1 (en) * 2000-10-31 2005-03-15 Hewlett-Packard Development Company, L.P. Cache coherence protocol for a multiple bus multiprocessor system
US6891543B2 (en) 2002-05-08 2005-05-10 Intel Corporation Method and system for optimally sharing memory between a host processor and graphics processor
JP2004171234A (ja) * 2002-11-19 2004-06-17 Toshiba Corp マルチプロセッサシステムにおけるタスク割り付け方法、タスク割り付けプログラム及びマルチプロセッサシステム
US6947051B2 (en) * 2003-02-18 2005-09-20 Microsoft Corporation Video memory management
US20080074431A1 (en) * 2003-11-19 2008-03-27 Reuven Bakalash Computing system capable of parallelizing the operation of multiple graphics processing units (GPUS) supported on external graphics cards
US20050237329A1 (en) 2004-04-27 2005-10-27 Nvidia Corporation GPU rendering to system memory
US7490215B2 (en) * 2004-12-22 2009-02-10 Intel Corporation Media memory system and method for providing concurrent memory access to a plurality of processors through separate translation table information
US7839854B2 (en) * 2005-03-08 2010-11-23 Thomas Alexander System and method for a fast, programmable packet processing system
US7743233B2 (en) * 2005-04-05 2010-06-22 Intel Corporation Sequencer address management
US8341624B1 (en) * 2006-09-28 2012-12-25 Teradici Corporation Scheduling a virtual machine resource based on quality prediction of encoded transmission of images generated by the virtual machine
US7769983B2 (en) * 2005-05-18 2010-08-03 Qualcomm Incorporated Caching instructions for a multiple-state processor
US7818806B1 (en) * 2005-11-08 2010-10-19 Nvidia Corporation Apparatus, system, and method for offloading pattern matching scanning
JP2008097358A (ja) * 2006-10-12 2008-04-24 Toyota Infotechnology Center Co Ltd 分散処理システム
JP2008234191A (ja) * 2007-03-19 2008-10-02 Toshiba Corp ハードウエアモニタ管理装置及びハードウエアモニタ機能の実行方法
KR100864834B1 (ko) * 2007-04-30 2008-10-23 한국전자통신연구원 메모리 재할당을 이용한 다중 프로세서 간의 데이터 전송장치 및 방법
US8861591B2 (en) * 2007-05-11 2014-10-14 Advanced Micro Devices, Inc. Software video encoder with GPU acceleration
US8230425B2 (en) 2007-07-30 2012-07-24 International Business Machines Corporation Assigning tasks to processors in heterogeneous multiprocessors
US20090160863A1 (en) * 2007-12-21 2009-06-25 Michael Frank Unified Processor Architecture For Processing General and Graphics Workload
KR101520067B1 (ko) * 2008-10-02 2015-05-13 삼성전자 주식회사 윈도우 시스템을 구현한 그래픽 처리 방법 및 그 장치
CN101526934A (zh) * 2009-04-21 2009-09-09 浪潮电子信息产业股份有限公司 一种gpu与cpu复合处理器的组建方法
JP5035299B2 (ja) * 2009-06-15 2012-09-26 株式会社日立製作所 マルチコアプロセッサ制御方法、その計算機システム、及び管理計算機のプログラム
US8669990B2 (en) * 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
US8723877B2 (en) 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
CN102323917B (zh) 2011-09-06 2013-05-15 中国人民解放军国防科学技术大学 一种基于共享内存实现多进程共享gpu的方法
WO2013119226A1 (en) 2012-02-08 2013-08-15 Intel Corporation Dynamic cpu gpu load balancing using power

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2677427A1 (de) * 2012-06-22 2013-12-25 Intel Corporation Techniken für den direkten Zugang zu einem grafischen Verarbeitungseinheitsspeicher über eine Applikation

Also Published As

Publication number Publication date
TW201614493A (en) 2016-04-16
TWI620128B (zh) 2018-04-01
TWI520071B (zh) 2016-02-01
CN102117260B (zh) 2017-06-27
US20140078159A1 (en) 2014-03-20
JP5918739B2 (ja) 2016-05-18
CN102117260A (zh) 2011-07-06
US8669990B2 (en) 2014-03-11
TW201145172A (en) 2011-12-16
JP2011175624A (ja) 2011-09-08
US10181171B2 (en) 2019-01-15
JP5484305B2 (ja) 2014-05-07
JP2014053033A (ja) 2014-03-20
US20110157195A1 (en) 2011-06-30

Similar Documents

Publication Publication Date Title
DE102010055267A1 (de) Gemeinsames Benutzen von Ressourcen zwischen einer CPU und GPU
DE112020000850T5 (de) Cache-Struktur und -Nutzung
DE102007006190B4 (de) Techniken zur Verwendung von Speicher-Attributen
DE102009047518B4 (de) Computersystem und Verfahren geeignet zum Vermeiden von Datenkommunikationsverklemmungssituationen durch Markieren von CPU-Datenverkehr als speziell
DE112017003389T5 (de) Verfahren und vorrichtung für shared virtual memory zum managen von datenkohärenz in einem heterogenen verarbeitungssystem
DE102013202495A1 (de) Verfahren zur Durchführung von interaktivem Debugging auf nicht unterbrechbaren Graphikverarbeitungseinheiten
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102013016871A1 (de) Technik zur Steigerung der Effizienz in mehrsträngigen Verarbeitungseinrichtngen
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE112010005821T5 (de) Kontextwechsel
DE112017000721T5 (de) Verfahren, einrichtung und befehle für thread-aussetzung auf benutzerebene
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE112005000706T5 (de) Verfahren und System zum Bereitstellen von Multi-Threading auf Nutzerebene
DE102013017510A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102013100179A1 (de) Verfahren und System zum Auflösen von Thread-Divergenzen
DE112009000373T5 (de) Technik, um Information zwischen unterschiedlichen Kohärenz-Domains von Caches zu nutzen
DE112010003758T5 (de) Instruktionen zum Verwalten einer parallelen Cache-Hierarchie
DE102013017511A1 (de) Effiziente speichervirtualisierung in mehrsträngigen verarbeitungseinheiten
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102013202173A1 (de) Einheitliche Lade-Verarbeitung für Teilsätze von parallelen Threads
DE112017003234T5 (de) Reduzieren von Speicherzugrifflatenzen während der Strahltraversierung
DE102013205886A1 (de) Dynamische Bankmodus-Adressierung für Speicherzugriff
DE112012007115T5 (de) Wahlweise Logikprozessor-Zählung und Typauswahl für eine gegebene Arbeitsbelastung basierend auf Wärme- und Leistungsbudget-Einschränkungen der Plattform
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren

Legal Events

Date Code Title Description
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R130 Divisional application to

Ref document number: 102010064616

Country of ref document: DE

R003 Refusal decision now final