DE102008024521B4 - Dynamisches Linken und Laden von Nachbearbeitungskerneln - Google Patents

Dynamisches Linken und Laden von Nachbearbeitungskerneln Download PDF

Info

Publication number
DE102008024521B4
DE102008024521B4 DE200810024521 DE102008024521A DE102008024521B4 DE 102008024521 B4 DE102008024521 B4 DE 102008024521B4 DE 200810024521 DE200810024521 DE 200810024521 DE 102008024521 A DE102008024521 A DE 102008024521A DE 102008024521 B4 DE102008024521 B4 DE 102008024521B4
Authority
DE
Germany
Prior art keywords
kernel
code
combined
combined kernel
composer
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.)
Expired - Fee Related
Application number
DE200810024521
Other languages
English (en)
Other versions
DE102008024521A1 (de
Inventor
Guei-Yuan San Jose LUEH
Xuefeng Zhang
Yuenian Granite Bay Yang
Ping Sunnyvale Liu
Xiaoying Palo Alto He
Hong El Dorado Hills Jiang
Maxim Sunnyvale Lukyanov
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 DE102008024521A1 publication Critical patent/DE102008024521A1/de
Application granted granted Critical
Publication of DE102008024521B4 publication Critical patent/DE102008024521B4/de
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Image Processing (AREA)
  • Storage Device Security (AREA)

Abstract

Verfahren der Ausführung von Bearbeitungsfunktionen, einer Programmierschnittstelle (220) und eines Treibers (250) umfassend einen Code-Manager (254) und einen Code-Composer (258), durch einen Graphik-Controller,
wobei
a) der Code-Manager (254) eine Suchanfrage von der Programmierabschnittstelle (220) empfängt, um einen kombinierten Kernel abzurufen,
b) wobei der kombinierte Kernel während der Laufzeit aus den Bearbeitungsfunktionen dynamisch zusammengelinkt wird mit folgenden Schritten:
b.1) der Code-Manager bestimmt mehrere Komponentenkernel aus denen der kombinierte Kernel zusammengestellt werden soll;
b.2) der Code-Composer empfängt eine Anfrage des Code-Managers um den kombinierten Kernel zu erzeugen und bestimmt den Speicherbereich, der benötigt wird, um den kombinierten Kernel zu speichern und kopiert die Binaries der bestimmten Komponentenkernel in den bestimmten Speicherbereich;
b.3) der Code-Composer bestimmt die Eingabe- und Ausgaberegisterbereiche, die von den ausgewählten Komponentenkernel benutzt werden, wobei die Registerbereiche bis zur Laufzeit auf einen Standardwert gesetzt sind und die tatsächlichen Werte zur Laufzeit bestimmt werden.

Description

  • HINTERGRUND
  • Ein Computersystem umfasst im allgemeinen Bearbeitungseinrichtungen, Speichereinrichtungen, Schnittstelleneinrichtungen und Eingabe-/Ausgabe-(I/O)-Geräte. Wenn Videosignale bearbeitet werden, kann das Computersystem Nachbearbeitungsfunktionen durchführen, wie etwa Filmmodusdetektion, Deinterlacing, ProcAmp-Kontrollanpassung, Videoskalierung, Alpha-Bending und Farbraumumwandlung. Es kann eine Mehrzahl unabhängiger Kernel entwickelt werden, von denen jeder eine oder mehrere der oben aufgeführten Nachbearbeitungsfunktionen umfasst. Jeder aus der Mehrzahl der Kernel kann dedizierte Speicherräume im Speicher besetzen, um Eingabedaten zu lesen und Ergebnisse zu schreiben. Allerdings kann das Kommunizieren von Daten zwischen verschiedenen Nachbearbeitungsfunktionen über den Speicher höhere Prozessorzyklen verbrauchen.
  • Das Dokument „The role of Software Packaging in the Patch Management Process. White Paper, March 15, 2006. Altiris Inc. (http://www.2.wise.com/Library/WP WPS Patch.pdf) offenbart Werkzeuge zum Management von Patches eines Betriebssystems.
  • Der Beitrag „GPGPU” aus Wikipedia, the free encyclopedia in der Version vom 20. Mai 2007 offenbart, dass Graphikprozessoren (GPU) zunehmend für nichtgraphik-relevante Anwendungen verwedent werden. Dies liegt besonders an der stark parallelen Natur der Graphik-Pipeline der GPU. die sich insbesondere für Programme zur Stream-Bearbeitung und für Echtzeitberechnungsprobleme als hilfreich erweist.
  • Aus dem Beitrag „overlay (programming)” aus Wikipedia, the free encyclopedia, in der Version vom 11. März 2007 sind overlays bekannt, wobei es sich um eigenständige Objektcodeblöcke eines Programms handelt.
  • Aus dem Beitrag „Library (computing)” aus Wikipedia. the free encyclopedia, in der Version vom 31. Mai 2007 ist das dynamische Linken von Subroutinen einer Library in Echtzeit in einem Anwendungsprogramm bekannt.
  • Es ist die Aufgabe mit der vorliegenden Erfindung ein Verfahren bereitzustellen, mit dem ein kombinierter Kernel von Nachbearbeitungsfunktionen dynamisch zur Verfügung gestellt werden kann.
  • Die Aufgabe wird gelöst durch ein Verfahren mit den Merkmalen gemäß Hauptanspruch 1.
  • Vorteilhafte Ausführungsformen der Erfindung sind in dem Unteransprüchen angegeben.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die hier beschriebene Erfindung wird in den beigefügten Zeichnungen beispielhaft und nicht einschränkend dargestellt. Zur Einfachheit und Klarheit der Darstellung sind in den Figuren gezeigte Elemente nicht notwendigerweise maßstabsgetreu. Beispielsweise können die Abmessungen einiger Elemente im Verhältnis zu anderen Elementen zwecks besserer Klarheit übertrieben dargestellt sein. Außerdem wurden Bezugszeichen zwischen den Figuren, wo es nötig erschien, wiederholt, um korrespondierende oder analoge Elemente zu bezeichnen.
  • 1 zeigt eine Ausführungsform eines Computersystems.
  • 2 zeigt eine Ausführungsform eines „Graphics Memory Controller Hub” (GMCH) von 1.
  • 3 zeigt eine Funktionsweise einer Ausführungsform eines Codepatch-Erzeugers von 2.
  • 4 zeigt eine Funktionsweise einer Ausführungsform eines Code-Managers aus 2.
  • 5 zeigt eine Funktionsweise einer Ausführungsform eines Kernel-Composers aus 2.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die folgende Beschreibung beschreibt ein System zum dynamischen Linken und Laden von Nachbearbeitungskerneln. In der folgenden Beschreibung werden zahlreiche spezielle Details, wie logische Implementierungen, sowie Implementierungen zum Einteilen, Teilen oder Verdoppeln von Ressourcen, Typen und Zusammenhänge zwischen Systemkomponenten, sowie Logikpartitionierungen oder Integrationsmöglichkeiten benutzt, um ein näheres Verständnis der vorliegenden Erfindung zu vermitteln. Ein Fachmann wird jedoch erkennen, dass die Erfindung ohne solche speziellen Details ausgeführt werden kann. In anderen Beispielen wurden Kontrollstrukturen, Schaltkreise auf Gatterebene und vollständige Software-Befehlssequenzen nicht im Detail gezeigt, um die Erfindung nicht zu verschleiern.
  • Fachleute werden mit den enthaltenen Beschreibungen in der Lage sein, die entsprechende Funktionalität ohne unangemessenes Experimentieren zu implementieren.
  • Bezüge auf „eine (1) Ausführungsform”, „eine Ausführungsform”, „eine beispielhafte Ausführungsform” in der Beschreibung zeigen, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine Struktur oder ein Charakteristikum umfassen kann; aber nicht jede Ausführungsform muss notwendigerweise das bestimmte Merkmal, die Struktur oder das Charakteristikum umfassen. Vielmehr beziehen sich solche Phrasen nicht notwendigerweise auf die gleiche Ausführungsform. Ferner wird, sobald ein bestimmtes Merkmal, eine Struktur oder ein Charakteristikum in Verbindung mit einer Ausführungsform beschrieben wird, vorausgeschickt, dass es innerhalb des Wissens von Fachleuten liegt, ein solches Merkmal, eine Struktur oder ein Charakteristikum in Verbindung mit anderen Ausführungsformen anzubringen, sei es nun ausführlich beschrieben oder nicht.
  • Ausführungsformen der Erfindung können in Hardware, Firmware, Software oder irgendeiner Kombination derselben implementiert werden. Ausführungsformen der Erfindung können außerdem als Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, welches von einem oder mehreren Prozessoren gelesen und ausgeführt werden kann. Ein maschinenlesbares Medium kann einen beliebigen Mechanismus zum Speichern oder Übertragen von Information in eine durch eine Maschine (zum Beispiel Recheneinrichtungen) lesbare Form umfassen.
  • Beispielsweise kann ein maschinenlesbares Medium umfassen: schreibgeschützten Speicher (Read Only Memory (ROM)); direkt zugreifbaren Speicher (Random Access Memory (RAM)); Magnetspeichermedien; optische Speichermedien; Flash-Speichereinrichtungen; elektrische, optische, akustische oder andere Formen von sich ausbreitenden Signalen (zum Beispiel Trägerwellen, Infrarotsignale und digitale Signale). Ferner können Firmware, Software, Routinen und Befehle im folgenden so beschrieben werden, dass sie gewisse Handlungen ausführen. Es sollte allerdings zur Kenntnis genommen werden, dass solche Beschreibungen eher der Bequemlichkeit dienen und dass solche Handlungen eigentlich von Recheneinrichtungen, Prozessoren, Controller und anderen Einrichtungen herrühren, welche Firmware, Software, Routinen und Befehle ausführen.
  • Eine Ausführungsform eines Computersystems 100 ist in 1 gezeigt. Das Computersystem 100 kann einen Prozessor 110, einen Speicher 120, einen Chipsatz 130, ein oder mehrere I/O-Einrichtungen 160, eine Videografikkartenschnittstelle (Video Graphics Array (VGA)) 170 und eine beschleunigte Grafikschnittstelle (Accelerated Graphics Port (AGP)) 180 umfassen.
  • Der Prozessor 110 kann verschiedene Ressourcen und Prozesse innerhalb des Computersystems 100 steuern und auch Softwarebefehle ausführen. Der Prozessor 110 kann zum Beispiel einen oder mehrere Mikroprozessoren der Pentium®- oder Itanium®-Familien von Intel®-Mikroprozessoren umfassen. Der Prozessor 110 kann mit dem Chipsatz 130 gekoppelt sein, um aus dem Speicher 120 zu lesen und in den Speicher 120 zu speichern.
  • Der Speicher 120 kann Daten und Befehle speichern und einen oder mehrere Typen von Speichereinrichtungen, wie DRAM(Dynamic Random Access Memory)-Einrichtungen, SDRAM(Synchronous DRAM)-Einrichtungen, DDR (Double Data Rate) oder andere flüchtige und nichtflüchtige Speichereinrichtungen umfassen, die in Computer genutzt werden.
  • Die I/O-Einrichtung 160 kann Einrichtungen wie eine Tastatur, Maus, eine Netzwerkkarte und andere Einrichtungen umfassen. Die Dateneinheiten können zwischen dem Chipsatz 130 und den I/O-Einrichtungen 160 über Busse übertragen werden, die „Peripheral Component Interconnect” (PCI), „Serial Advanced Technology Attachment” (SATA), „Low Pin Count” (LPC), „Integrated Device Electronics” (IDE) und andere solche Verbindungstechnologien umfassen.
  • Der Chipsatz 130 kann einen oder mehrere integrierte Schaltkreise oder Chips umfassen, die den Prozessor 110, den Speicher 120, die I/O-Einrichtungen 160, die VGA-Schnittstelle 170 und die AGP-Schnittstelle 180 koppeln. Der Chipsatz 130 kann einer aus den Intel®-Familien von Chipsätzen sein. In einer Ausführungsform kann der Chipsatz 130 einen Speicher-Kontroll-Hub 143, einen Grafik- und Speicher-Kontroll-Hub (Graphics and Memory Controller Hub (GMCH)) 145 und einen I/O-Kontroll-Hub (ICH) 150 umfassen. Der ICH 150 kann eine Schnittstelle zwischen den I/O-Einrichtungen 160 bereitstellen, die an den ICH 150 und den Prozessor 110 und den Speicher 120 gekoppelt ist. Beispielsweise kann der ICH 150 Festplattenlaufwerk, Diskettenlaufwerk, CD-Laufwerke, Modems, Tastaturen, Drucker, Mäuse, Endpunkte, Ethernet und SCSI-Einrichtungen unterstützen. Der MCH 143 kann eine Schnittstelle zwischen dem Prozessor 110 und dem Speicher 130 bereitstellen.
  • In einer Ausführungsform kann der GMCH 145 die Übertragungen und den Transfer der entsprechenden Daten zwischen dem Speicher 120, dem ICH 150, dem Prozessor 110 und den Einrichtungen, die an die VGA-Schnittstelle 170 und die AGP-Schnittstelle 180 gekoppelt sind, durchführen. In einer Ausführungsform kann der GMCH 145 dynamisches Linken und Laden von Nachbearbeitungskerneln unterstützen. In einer Ausführungsform können die Videonachbearbeitungskernel eine geordnete Sequenz von zwei oder mehr Nachbearbeitungsfunktionen, wie Filmmodusdetektion, Deinterlacing, ProcAmp-Kontrollanpassung, Videoskalierung, Alpha-Bending und Farbraumumwandlung, umfassen.
  • Beispielsweise kann ein erster kombinierter Kernel K1 Nachbearbeitungsfunktionen, wie Filmmodusdetektion, Deinterlacing und Alpha-Bending, in dieser Reihenfolge umfassen. Ein zweiter kombinierter Kernel K2 kann Nachbearbeitungsfunktionen, wie etwa Filmmodusdetektion, Deinterlacing, Videoskalierung und Farbraumumwandlung, in dieser Reihenfolge umfassen. In einer Ausführungsform können die kombinierten Kernel K1 und K2 zusammengesetzt werden, bevor der Kernel aufgerufen wird. Als Ergebnis kann vermieden werden, dass ein dedizierter Platz benötigt wird, um jeden der statisch zusammengesetzten Kernel zu speichern. In einer Ausführungsform können die Nachbearbeitungsfunktionen, die zum Bilden eines kombinierten Kerns benötigt werden, während der Übersetzungszeit identifiziert werden, und die Nachbearbeitungsfunktionen können dynamisch zusammengelinkt werden, um einen kombinierten Kernel während der Laufzeit zu bilden.
  • Eine Ausführungsform des GMCH 145, der dynamisches Linken und Laden von Nachbearbeitungskerneln unterstützt, ist in 2 abgebildet. In einer Ausführungsform kann der GMCH 145 Anwendungen 210, eine Programmierschnittstelle 220, einen Codepatch-Erzeuger 230, einen Treiber 250 und eine Grafikhardware 280 umfassen. In einer Ausführungsform kann die Grafikhardware 280 mit dem Treiber 250 gekoppelt sein, um die Funktionen durchzuführen, die von dem Treiber 250 aufgezeigt werden. In einer Ausführungsform kann die Grafikhardware 280 einen integrierten Grafik-Controller aus einer Intel®-Familie umfassen.
  • In einer Ausführungsform können die Anwendungen 210 Multimediaanwendungen umfassen, mit denen der Benutzer des Computersystems 100 interagieren kann. In einer Ausführungsform kann die Programmierschnittstelle 220 eine oder mehrere Routinen umfassen, die von den Anwendungen 210 benutzt werden können, um mit den Diensten niedrigerer Ebene zu interagieren, welche von einem darunter liegenden Betriebssystem zur Verfügung bereitgestellt werden.
  • In einer Ausführungsform kann die Programmierschnittstelle 220 eine Programmierschnittstelle zwischen den Anwendungen 210 und dem Codepatch-Erzeuger 230 und dem Treiber 250 bereitstellen. In einer Ausführungsform kann die Programmierschnittstelle 220 eine Nachbearbeitungsfunktionsanfrage an den Treiber 250 stellen, welche auf den Eingabewerten basiert, die von den Anwendungen 210 empfangen wurden. In einer Ausführungsform kann die Programmierschnittstelle 220 eine Microsoft®-DxVA-(Direct X Video Acceleration)-Programmierschnittstelle umfassen.
  • In einer Ausführungsform kann der Codepatch-Erzeuger 230 jede Kernelkomponente statisch zu einem Binary kompilieren, gemeinsam mit einem Ersatz-Codepatch, der ein dynamisches Linken während der Laufzeit ermöglicht. Das Binary und der Ersatz-Codepatch können während der Startzeit des Treibers 250 in den Kernel-Composer 258 des Treibers 250 geladen werden. In einer Ausführungsform kann der Codepatch-Erzeuger 230 I/O-Bereiche spezifizieren, die eine erste Kernelkomponente zum Lesen und Schreiben von Daten benutzen kann. Allerdings kann der Codepatch-Erzeuger 230 nicht angeben, mit welchen anderen Komponentenkerneln der erste Komponentenkernel zusammengebunden werden kann, und dieses Linken von Komponentenkerneln kann während der Laufzeit stattfinden.
  • Der Treiber 250 kann obere Schichten, wie die Anwendungen 210, an die Grafikhardware 280 koppeln. In einer Ausfühnungsform kann der Treiber 250 einen Code-Manager 254 und einen Code-Composer 258 umfassen. In einer Ausführungsform kann der Treiber 250 einen Grafiktreiber aus einer Intel®-Familie umfassen.
  • In einer Ausführungsform kann der Code-Manager 254 eine Suchanfrage von der Programmierschnittstelle 220 empfangen, um einen spezifizierten kombinierten Kernel abzurufen. Der Code-Manager 254 kann bestimmen, ob der spezifizierte kombinierte Kernel in der Datenbank, die durch den Code-Manager 254 unterstützt wird, vorhanden ist. Der Code-Manager 254 kann ein Signal an die Programmierschnittstelle 220 senden, die das Vorhandensein des spezifizierten kombinierten Kernels anzeigt, falls der spezifizierte Kernel in der Datenbank vorhanden ist. Der Code-Manger 254 kann eine Anfrage an den Code-Composer 258 senden, um den spezifizierten Kernel zusammenzustellen, falls der spezifizierte kombinierte Kernel nicht vorhanden ist. In einer Ausführungsform kann der Code-Manager 254 auch bestimmen, welche Komponentenkernel benötigt werden, um den spezifizierten kombinierten Kernel zusammenzustellen.
  • In einer Ausführungsform kann der Code-Manager 254 Speicherplatz zur Verfügung stellen, um den neu zusammengestellten spezifizierten kombinierten Kernel als Antwort auf das Empfangen einer Anfrage zum Zuordnen von Platz für den neu zusammengestellten spezifizierten kombinierten Kernel zu speichern. In einer Ausführungsform kann der Code-Manager 254 den neu zusammengestellten spezifizierten kombinierten Kernel speichern und außerdem dem neu zusammengestellten spezifizierten kombinierten Kernel einen eindeutigen Bezeichner als Antwort auf das Empfangen eines Signals zuordnen, das angibt, dass der angegebene kombinierte Kernel zusammengesetzt wurde. In einer Ausführungsform kann der Code-Manager 254 auch den Platz zum Speichern der kombinierten Kernel verwalten, indem die veralteten kombinierten Kernel gelöscht werden.
  • In einer Ausführungsform kann der Code-Composer 258 ein Signal zum Zusammensetzen des spezifizierten kombinierten Kernels empfangen. Der Code-Composer 258 kann außerdem die Komponentenkernel empfangen, die zum Zusammenstellen des spezifizierten kombinierten Kernels benötigt werden. In einer Ausführungsform kann der Code-Composer 258 den Platz bestimmen, der benötigt wird, um den neu zusammengesetzten spezifizierten kombinierten Kernel zu speichern, und kann eine Anfrage versenden, um Speicherplatz zur Verfügung zu stellen.
  • In einer Ausführungsform kann der Code-Composer 258 den kombinierten Kernel zusammenstellen, indem die I/O-Registerbereiche bestimmt werden, die für jede Kernelkomponente angegeben sind. In einer Ausführungsform kann der Code-Composer 258 die binären Dateien der Komponentenkernel abrufen und an den zugewiesenen Platz kopieren. Der Code-Composer 258 kann auch assoziierte Codepatches anwenden, um die binären Dateien dazu zu bringen, Eingabedaten aus den Eingaberegisterbereichen zu lesen und Ausgaben an die Ausgaberegisterbereiche zu schreiben. Der Code-Composer 258 kann ein Signal senden, das anzeigt, dass der spezifizierte kombinierte Kernel zusammengesetzt wurde.
  • Eine Ausführungsform einer Funktionsweise eines Codepatch-Erzeugers 230 ist in 3 gezeigt. In Block 310 kann der Codepatch-Erzeuger 230 Komponentenkernel zusammensetzen, um Binaries sowie Ersatz-Codepatches zu erzeugen, die ein Linken während der Laufzeit ermöglichen. In einer Ausführungsform kann der Codepatch-Erzeuger 230 einen Gen4-Assembler umfassen, der eine „.declare”-Syntax benutzen kann. In einer Ausführungsform kann der Gen4-Assembler „.declare”-Syntax verwenden, um die Befehle, die Daten von dem vorherigen Kernel lesen, sowie die Befehle, die Daten an den nachfolgenden Kernel schreiben, zu identifizeren. In einer Ausführungsform kann die „.declare”-Syntax für Eingabe- und Ausgabe-Bereiche wie folgt aussehen:
    .declareINBase=r4, Elementsize=4, Type=d, Width(8), Height(4)PP_IN
    .declareOUTBase=r8, Elementsize=4, Type=d, Width(8), Height(4)PP_OUT
  • In einer Ausführungsform zeigen PP_IN und PP_OUT an, dass „.declare” benutzt wird, um auf die Daten, die von dem vorherigen Kernel erzeugt werden, und auf den zum Schreiben von Daten vorgesehenen Bereich zuzugreifen, um die Ausgabedaten zu schreiben, die von dem nachfolgenden Kernel gelesen werden können. Der Inhalt von PP_IN und PP_OUT kann bis zur Laufzeit auf einen Standardwert gesetzt werden. Die tatsächlichen Werte, die während der Laufzeit bestimmt werden, können benutzt werden, um den Inhalt von PP_IN und PP_OUT zu konfigurieren. In einer Ausführungsform kann der Gen4-Assembler „.declare” mit PP_IN und PP_OUT verfolgen, bevor er einen Ersatz-Codepatch erzeugt.
  • In Block 350 kann der Codepatch-Erzeuger 230 die Binaries und die Ersatz-Codepatches in den Treiber 250 laden.
  • Eine Ausführungsform der Funktionsweise des Code-Managers 254 ist in 4 gezeigt. In Block 410 kann der Code-Manger 254 eine erste Anfrage zum Abrufen eines kombinierten Kernels K empfangen. In Block 420 kann der Code-Manager 254 prüfen, ob der kombinierte Kernel K vorhanden ist, und wird die Kontrolle an Block 425 übergeben, falls der kombinierte Kernel K vorhanden ist, andernfalls an Block 430.
  • In Block 425 kann der Code-Manager 254 das Alter aller existierenden kombinierten Kernel erhöhen. Ein solcher Ansatz kann die Identifikation der kombinierten Kernel erlauben, die zuletzt benutzt worden sind. In einer Ausführungsform sind die kombinierten Kernel mit geringerem Alterswert die zuletzt benutzten kombinierten Kernel.
  • In Block 430 kann der Code-Manager 254 bestimmen, ob der Kernelspeicherplatz wieder beansprucht werden kann, und geht die Kontrolle über an Block 435, falls der Kernelspeicherplatz beansprucht werden kann, andernfalls an Block 440.
  • In Block 435 kann der Code-Manager 254 kombinierte Kernel mit einem Alter, das größer als ein Schwellenwertalter ist, löschen. In einer Ausführungsform kann der Code-Manager 254 das Alter jedes kombinierten Kernels mit einem Schwellenwertalter vergleichen, um zu bestimmen, ob das Alter des kombinierten Kernels größer ist als das Schwellenwertalter.
  • In Block 440 kann der Code-Manager 254 die ausgewählten Kernelkomponenten bestimmen, die benötigt werden, um den kombinierten Kernel K zu erzeugen. In Block 450 kann der Code-Manager 254 eine zweite Anfrage senden, um den kombinierten Kernel K sowie die ausgewählten Komponentenkernel zusammenzusetzen. In einer Ausführungsform kann der Code-Manager 254 die zweite Anfrage an den Code-Composer 258 in Form eines booleschen Arrays senden. Beispielsweise kann der boolesche Array wie bool component_kernels[Liste der Komponentenkernel] aussehen. Die Komponentenkernel können ausgewählt werden, falls die booleschen Werte der Komponentenkernel wahr sind.
  • In Block 460 kann der Code-Manager 254 Platz zur Verfügung stellen, um den kombinierten Kernel K als Antwort auf das Empfangen eines ersten Signals vom Code-Composer 258 zu speichern. In Block 470 kann der Code-Manager 254 ein zweites Signal senden, das anzeigt, dass der Platz zum Speichern des kombinierten Kernels K zugewiesen ist.
  • In Block 480 kann der Code-Manager 254 prüfen, ob ein drittes Signal empfangen wurde, das anzeigt, ob der kombinierte Kernel zusammengesetzt ist, und geht die Kontrolle an Block 490 über, falls der kombinierte Kernel K zusammengesetzt ist, andernfalls an Block 480.
  • In Block 490 kann der Code-Manager 254 den kombinierten Kernel K gemeinsam mit einem eindeutigen Bezeichner, der dem kombinierten Kernel K zugewiesen wurde, zwischenspeichern oder speichern.
  • Eine Ausführungsform der Funktionsweise des Code-Composers 258 ist in 5 gezeigt. In Block 510 kann der Code-Composer 258 die erste Anfrage empfangen, um den kombinierten Kernel K zu erzeugen. In Block 520 kann der Code-Composer 258 den Platz bestimmen, der benötigt wird, um den kombinierten Kernel K zu speichern.
  • In Block 530 kann der Code-Composer 258 das erste Signal senden, um Platz für den kombinierten Kernel K zur Verfügung zu stellen. In Block 540 kann der Code-Composer 258 die Reihenfolge der ausgewählten Komponentenkernel bestimmen, um den kombinierten Kernel K zu erzeugen, nachdem das zweite Signal empfangen wurde, welches angibt, dass der Platz, der zum Speichern des kombinierten Kernels K benötigt wird, zur Verfügung gestellt wurde.
  • In Block 550 kann der Code-Composer 258 die Eingabe- und Ausgaberegisterbereiche bestimmen, die von den ausgewählten Komponentenkernel benutzt werden. In Block 560 kann der Code-Composer 258 die Binaries der ausgewählten Kernelkomponenten abrufen.
  • In Block 570 kann der Code-Composer 258 die Binaries in den zugewiesenen Speicherbereich kopieren. An Block 580 kann der Code-Composer 258 die Codepatches anwenden, um die Binaries zu veranlassen, die Eingabedaten aus dem Eingaberegisterbereich zu lesen und die Ausgabedaten in den Ausgaberegisterbereich zu schreiben.
  • An Block 590 kann der Code-Composer 258 ein drittes Signal senden, welches angibt, dass der kombinierte Kernel K zusammengesetzt wurde. Ein solches Signal kann an den Code-Manager 254 gesendet werden.
  • Gewisse Merkmale der Erfindung wurden unter Bezug auf beispielhafte Ausführungsformen beschrieben. Allerdings soll die Beschreibung nicht in einschränkender Weise gedeutet werden. Verschiedene Modifikationen der beispielhaften Ausführungsformen, ebenso wie andere Ausführungsformen der Erfindung, welche für Fachleute auf dem Gebiet, auf das sich die Erfindung bezieht, offensichtlich sind, gelten als innerhalb von Geist und Schutzbereich der Erfindung liegend.

Claims (9)

  1. Verfahren der Ausführung von Bearbeitungsfunktionen, einer Programmierschnittstelle (220) und eines Treibers (250) umfassend einen Code-Manager (254) und einen Code-Composer (258), durch einen Graphik-Controller, wobei a) der Code-Manager (254) eine Suchanfrage von der Programmierabschnittstelle (220) empfängt, um einen kombinierten Kernel abzurufen, b) wobei der kombinierte Kernel während der Laufzeit aus den Bearbeitungsfunktionen dynamisch zusammengelinkt wird mit folgenden Schritten: b.1) der Code-Manager bestimmt mehrere Komponentenkernel aus denen der kombinierte Kernel zusammengestellt werden soll; b.2) der Code-Composer empfängt eine Anfrage des Code-Managers um den kombinierten Kernel zu erzeugen und bestimmt den Speicherbereich, der benötigt wird, um den kombinierten Kernel zu speichern und kopiert die Binaries der bestimmten Komponentenkernel in den bestimmten Speicherbereich; b.3) der Code-Composer bestimmt die Eingabe- und Ausgaberegisterbereiche, die von den ausgewählten Komponentenkernel benutzt werden, wobei die Registerbereiche bis zur Laufzeit auf einen Standardwert gesetzt sind und die tatsächlichen Werte zur Laufzeit bestimmt werden.
  2. Verfahren nach Anspruch 1, ferner umfassend: Bestimmen, ob der kombinierte Kernel in einem Code-Manager (254) vorhanden ist, in Reaktion auf das Empfangen der Anfrage, Erzeugen einer Mehrzahl von Komponentenkerneln in einem Codepatch-Erzeuger (230), falls der kombinierte Kernel in dem Code-Manager (254) nicht vorhanden ist, Statisches Kompilieren jeder Kernelkomponente, um jeweils einen Binärcode und einen Ersatz-Codepatch zu erzeugen, und Erzeugen des kombinierten Kernels in einem Kernel-Composer (258) während einer Laufzeit, indem jede Kernelkomponente mittels des jeweiligen Ersatz-Codepatch dynamisch gelinkt wird.
  3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, dass das Erzeugen der Mehrzahl der Komponentenkernel ferner umfasst: Kompilieren der Mehrzahl der Komponentenkernel, um Binaries mit Codepatches zu erzeugen, die Daten von einem vorhergehenden Kernel lesen und während der Laufzeit Daten in einen nachfolgenden Kernel lesen, und Laden der Binaries und der Codepatches in einen Treiber (250).
  4. Verfahren nach Anspruch 3, wobei das Erzeugen des kombinierten Kernels ferner umfasst: Anwenden der Codepatches, um die Binaries einzusetzen, um Daten aus den Eingaberegisterbereichen zu lesen und Daten in die Ausgaberegisterbereiche zu schreiben.
  5. Verfahren nach Anspruch 1, wobei das Bestimmen des Speicherbereichs zum Speichern des kombinierten Kernels ferner umfasst: Senden eines Signals an den Code-Manager (254) und Bestimmen einer Reihenfolge von Komponentenkerneln, welche benötigt werden, um den kombinierten Kernel zu erzeugen.
  6. Verfahren nach Anspruch 4, wobei das Erzeugen des kombinierten Kernels ferner umfasst: Abrufen der Binaries der Komponentenkernel, Kopieren der Binaries in den Speicherraum, und Anzeigen, dass der kombinierte Kernel zusammengesetzt ist, nachdem die Codepatches angewendet wurden, um die Binaries einzusetzen, um Daten aus den Eingaberegisterbereich zu lesen und Daten in die Ausgaberegisterbereiche zu schreiben.
  7. Verfahren nach Anspruch 5, wobei das Bestimmen, ob der kombinierte Kernel vorhanden ist, ferner das Senden einer Anfrage an den Kernel-Composer (258) umfasst, um den kombinierten Kernel zu erzeugen, falls der kombinierte Kernel noch nicht vorhanden ist.
  8. Verfahren nach Anspruch 6, ferner umfassend: Empfangen des gesendeten Signals durch den Kernel-Composer (258), wobei das Signal dazu dient, den Code-Manager (254) zu veranlassen, den Speicher (120) zum Speichern des kombinierten Kernels zuzuweisen, Zuweisen des Speichers (120), der benötigt wird, um den kombinierten Kernel zu speichern, und Speichern des kombinierten Kernels und eines eindeutigen Bezeichners, der mit dem kombinierten Kernel assoziiert ist, nachdem der kombinierte Kernel durch den Kernel-Composer (258) erzeugt wurde.
  9. Programm, das auf einen Datenträger ausführbar gespeichert ist und ein Verfahren nach einem der Ansprüche 1 bis 8 ausführt, wenn es in einem Graphik-Controller abgearbeitet wird.
DE200810024521 2007-06-05 2008-05-21 Dynamisches Linken und Laden von Nachbearbeitungskerneln Expired - Fee Related DE102008024521B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/758,437 2007-06-05
US11/758,437 US8843913B2 (en) 2007-06-05 2007-06-05 Dynamic linking and loading of post-processing kernels

Publications (2)

Publication Number Publication Date
DE102008024521A1 DE102008024521A1 (de) 2008-12-11
DE102008024521B4 true DE102008024521B4 (de) 2011-05-05

Family

ID=39942318

Family Applications (1)

Application Number Title Priority Date Filing Date
DE200810024521 Expired - Fee Related DE102008024521B4 (de) 2007-06-05 2008-05-21 Dynamisches Linken und Laden von Nachbearbeitungskerneln

Country Status (5)

Country Link
US (2) US8843913B2 (de)
JP (1) JP4984303B2 (de)
CN (1) CN101320332B (de)
DE (1) DE102008024521B4 (de)
TW (1) TWI400665B (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8843913B2 (en) 2007-06-05 2014-09-23 Intel Corporation Dynamic linking and loading of post-processing kernels

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105512022B (zh) * 2014-09-25 2018-09-28 华为技术有限公司 一种数据处理方法和设备

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS613243A (ja) * 1984-06-18 1986-01-09 Yamatake Honeywell Co Ltd 演算状況変更方法
JPH02231604A (ja) 1989-03-06 1990-09-13 Toshiba Corp プログラム作成装置
JPH05289858A (ja) 1992-04-13 1993-11-05 Toshiba Corp ソフトウェア合成装置
JPH0844570A (ja) * 1994-07-28 1996-02-16 N T T Data Tsushin Kk プログラム実行システム及び方法
US5966072A (en) * 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
US6148117A (en) * 1996-12-27 2000-11-14 Hewlett-Packard Company Image processing system with alterable local convolution kernel
US6490721B1 (en) * 1998-07-14 2002-12-03 Oc Systems Incorporated Software debugging method and apparatus
US6584567B1 (en) 1999-06-30 2003-06-24 International Business Machines Corporation Dynamic connection to multiple origin servers in a transcoding proxy
CA2453776A1 (en) * 2003-12-19 2005-06-19 Ibm Canada Limited-Ibm Canada Limitee Compiler optimization
US8046488B2 (en) 2004-05-21 2011-10-25 Intel Corporation Dynamically modulating link width
EP1771812B1 (de) 2004-07-29 2011-09-14 Microsoft Corporation Bildverarbeitung unter verwendung linearer lichtwerte und anderer bildverarbeitungsoptimierungen
CN100396065C (zh) * 2005-01-14 2008-06-18 清华大学 一种iSCSI存储系统的实现方法
JP2006338507A (ja) 2005-06-03 2006-12-14 Fujifilm Holdings Corp 処理装置及び処理方法
US7913243B2 (en) * 2005-06-21 2011-03-22 International Business Machines Corporation Method and system for generating and applying patches to a computer program concurrently with its execution
US8843913B2 (en) 2007-06-05 2014-09-23 Intel Corporation Dynamic linking and loading of post-processing kernels

Non-Patent Citations (8)

* Cited by examiner, † Cited by third party
Title
GPGPU, Wikipedia, 20.05.07. (recherchiert am 17.05.10) *
GPGPU, Wikipedia, 20.05.07. <http://en.wikipedia.org/w/index.php?title=GPGPU&oldid=132247297> (recherchiert am 17.05.10)
Library (computing), Wikipedia, 31.05.07. (recherchiertam 17.05.10) *
Library (computing), Wikipedia, 31.05.07. <http://en.wikipedia.org/w/index.php?title=Library_(computing)&oldid=134830031> (recherchiertam 17.05.10)
Overlay (programming), Wikipedia, 11.03.07 (recherchiert am 17.05.10 *
Overlay (programming), Wikipedia, 11.03.07 <http://en.wikipedia.org/w/index.php?=Overlay_(programming)&oldid=114399464> (recherchiert am 17.05.10
The Role of Software Packaging in the Patch Management Process. White Paper, March 15, 2006. Altiris Inc. (recherchiert am 17.08.09) *
The Role of Software Packaging in the Patch Management Process. White Paper, March 15, 2006. Altiris Inc. <http://www2.wise.com/ Library/WP_WPS_ Patch.pdf> (recherchiert am 17.08.09)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8843913B2 (en) 2007-06-05 2014-09-23 Intel Corporation Dynamic linking and loading of post-processing kernels
US9465629B2 (en) 2007-06-05 2016-10-11 Intel Corporation Dynamic linking and loading of post-processing kernels

Also Published As

Publication number Publication date
US8843913B2 (en) 2014-09-23
JP4984303B2 (ja) 2012-07-25
TW200912796A (en) 2009-03-16
DE102008024521A1 (de) 2008-12-11
CN101320332A (zh) 2008-12-10
TWI400665B (zh) 2013-07-01
JP2008305398A (ja) 2008-12-18
US9465629B2 (en) 2016-10-11
US20080307404A1 (en) 2008-12-11
CN101320332B (zh) 2012-07-04
US20150143387A1 (en) 2015-05-21

Similar Documents

Publication Publication Date Title
DE102010051477B4 (de) Verfahren in einer computerplattform sowie computerplattform zum gemeinsamen benutzen von virtuellen speicherbasierten mehrversionsdaten zwischen den verschiedenartigen prozessoren der computerplattform
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE112012000212T5 (de) Technik für live Analyse-basierte Rematerialisation zur Reduktion von Registerdruck und zur Verbesserung von Parallelität
DE112005001277B4 (de) Verfahren und Vorrichtung zum Vektorisieren mehrerer Eingabebefehle
DE102020115581A1 (de) Lenkung von planungsabhängigkeiten durch einen compiler für neuronale netze
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
DE102007025397B4 (de) System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102013017509A1 (de) Effiziente Speichervirtualisierung in mehrsträngigen Verarbeitungseinheiten
DE102015002582A1 (de) Architekturübergreifendes Kompatibilitätsmodul, um zuzulassen, dass ein Codemodul einer Architektur ein Bibliotheksmodul einer anderen Architektur verwendet
DE112013001711T5 (de) Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine
DE102013017982A1 (de) COMPILER gesteuerte Gebietsdisponierung für SIMD-Ausführung von Strängen
DE102013017511A1 (de) Effiziente speichervirtualisierung in mehrsträngigen verarbeitungseinheiten
DE102008059790A1 (de) Verfahren, Vorrichtung und Befehle zum Verarbeiten von Vektordaten
DE112010004784T5 (de) Effizientes Laden von Daten in den Speicher eines Rechnersystems
DE102007046947B4 (de) System und Verfahren zum Verwalten von Systemmanagement-Interrupts in einem Mehrprozessor-Computersystem
DE102013224160A1 (de) System, Verfahren und Computer-Programm-Produkt zum Optimieren des Managements von Thread-Stapel-Speicher
DE112012004629T5 (de) Dynamischer Speicheraffinitätsanpasser auf Prozess/Objektebene
DE112013001735T5 (de) Optimieren des Verbindens von Anweisungen
DE102013019333A1 (de) Registerzuweisung für als cluster vorliegende mehrebenen-registerdaten
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE102013006396A1 (de) Eine grafikverarbeitungseinheit, in der eine standardverarbeitungseinheit verwendet ist, und ein verfahren zum aufbau einer grafikverarbeitungseinheit
DE112020000865T5 (de) Speicherverwaltungssystem
DE112014000340T5 (de) Vorablesezugriff auf Daten für einen Chip mit einem übergeordneten Kern und einem Scout-Kern

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8181 Inventor (new situation)

Inventor name: ZHANG, XUEFENG, BEIJING, CN

Inventor name: YANG, YUENIAN, GRANITE BAY, CALIF., US

Inventor name: LIU, PING, SUNNYVALE, CALIF., US

Inventor name: LUEH, GUEI-YUAN, SAN JOSE, CALIF., US

Inventor name: JIANG, HONG, EL DORADO HILLS, CALIF., US

Inventor name: LUKYANOV, MAXIM, SUNNYVALE, CALIF., US

Inventor name: HE, XIAOYING, PALO ALTO, CALIF., US

R020 Patent grant now final

Effective date: 20110806

R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0009450000

Ipc: G06F0009445000