DE102021105251A1 - Konfigurierbarer kühlkörper - Google Patents

Konfigurierbarer kühlkörper Download PDF

Info

Publication number
DE102021105251A1
DE102021105251A1 DE102021105251.3A DE102021105251A DE102021105251A1 DE 102021105251 A1 DE102021105251 A1 DE 102021105251A1 DE 102021105251 A DE102021105251 A DE 102021105251A DE 102021105251 A1 DE102021105251 A1 DE 102021105251A1
Authority
DE
Germany
Prior art keywords
heat sink
graphics
cuda
processor
memory
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.)
Pending
Application number
DE102021105251.3A
Other languages
English (en)
Inventor
Michael L. Sabotta
Susheela N. Narasimhan
Reza Azizian
Herman W. Chu
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of DE102021105251A1 publication Critical patent/DE102021105251A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/16Constructional details or arrangements
    • G06F1/20Cooling means
    • FMECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
    • F28HEAT EXCHANGE IN GENERAL
    • F28DHEAT-EXCHANGE APPARATUS, NOT PROVIDED FOR IN ANOTHER SUBCLASS, IN WHICH THE HEAT-EXCHANGE MEDIA DO NOT COME INTO DIRECT CONTACT
    • F28D15/00Heat-exchange apparatus with the intermediate heat-transfer medium in closed tubes passing into or through the conduit walls ; Heat-exchange apparatus employing intermediate heat-transfer medium or bodies
    • F28D15/02Heat-exchange apparatus with the intermediate heat-transfer medium in closed tubes passing into or through the conduit walls ; Heat-exchange apparatus employing intermediate heat-transfer medium or bodies in which the medium condenses and evaporates, e.g. heat pipes
    • FMECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
    • F28HEAT EXCHANGE IN GENERAL
    • F28DHEAT-EXCHANGE APPARATUS, NOT PROVIDED FOR IN ANOTHER SUBCLASS, IN WHICH THE HEAT-EXCHANGE MEDIA DO NOT COME INTO DIRECT CONTACT
    • F28D15/00Heat-exchange apparatus with the intermediate heat-transfer medium in closed tubes passing into or through the conduit walls ; Heat-exchange apparatus employing intermediate heat-transfer medium or bodies
    • F28D15/02Heat-exchange apparatus with the intermediate heat-transfer medium in closed tubes passing into or through the conduit walls ; Heat-exchange apparatus employing intermediate heat-transfer medium or bodies in which the medium condenses and evaporates, e.g. heat pipes
    • F28D15/0241Heat-exchange apparatus with the intermediate heat-transfer medium in closed tubes passing into or through the conduit walls ; Heat-exchange apparatus employing intermediate heat-transfer medium or bodies in which the medium condenses and evaporates, e.g. heat pipes the tubes being flexible
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L23/00Details of semiconductor or other solid state devices
    • H01L23/34Arrangements for cooling, heating, ventilating or temperature compensation ; Temperature sensing arrangements
    • H01L23/42Fillings or auxiliary members in containers or encapsulations selected or arranged to facilitate heating or cooling
    • H01L23/427Cooling by change of state, e.g. use of heat pipes
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L23/00Details of semiconductor or other solid state devices
    • H01L23/34Arrangements for cooling, heating, ventilating or temperature compensation ; Temperature sensing arrangements
    • H01L23/42Fillings or auxiliary members in containers or encapsulations selected or arranged to facilitate heating or cooling
    • H01L23/433Auxiliary members in containers characterised by their shape, e.g. pistons
    • H01L23/4332Bellows
    • HELECTRICITY
    • H05ELECTRIC TECHNIQUES NOT OTHERWISE PROVIDED FOR
    • H05KPRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
    • H05K7/00Constructional details common to different types of electric apparatus
    • H05K7/20Modifications to facilitate cooling, ventilating, or heating
    • HELECTRICITY
    • H05ELECTRIC TECHNIQUES NOT OTHERWISE PROVIDED FOR
    • H05KPRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
    • H05K7/00Constructional details common to different types of electric apparatus
    • H05K7/20Modifications to facilitate cooling, ventilating, or heating
    • H05K7/20009Modifications to facilitate cooling, ventilating, or heating using a gaseous coolant in electronic enclosures
    • H05K7/20136Forced ventilation, e.g. by fans
    • H05K7/20154Heat dissipaters coupled to components
    • HELECTRICITY
    • H05ELECTRIC TECHNIQUES NOT OTHERWISE PROVIDED FOR
    • H05KPRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
    • H05K7/00Constructional details common to different types of electric apparatus
    • H05K7/20Modifications to facilitate cooling, ventilating, or heating
    • H05K7/20009Modifications to facilitate cooling, ventilating, or heating using a gaseous coolant in electronic enclosures
    • H05K7/20136Forced ventilation, e.g. by fans
    • H05K7/20154Heat dissipaters coupled to components
    • H05K7/20163Heat dissipaters coupled to components the components being isolated from air flow, e.g. hollow heat sinks, wind tunnels or funnels
    • HELECTRICITY
    • H05ELECTRIC TECHNIQUES NOT OTHERWISE PROVIDED FOR
    • H05KPRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
    • H05K7/00Constructional details common to different types of electric apparatus
    • H05K7/20Modifications to facilitate cooling, ventilating, or heating
    • H05K7/20009Modifications to facilitate cooling, ventilating, or heating using a gaseous coolant in electronic enclosures
    • H05K7/20209Thermal management, e.g. fan control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2200/00Indexing scheme relating to G06F1/04 - G06F1/32
    • G06F2200/20Indexing scheme relating to G06F1/20
    • G06F2200/201Cooling arrangements using cooling fluid
    • HELECTRICITY
    • H01ELECTRIC ELEMENTS
    • H01LSEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
    • H01L23/00Details of semiconductor or other solid state devices
    • H01L23/34Arrangements for cooling, heating, ventilating or temperature compensation ; Temperature sensing arrangements
    • H01L23/46Arrangements for cooling, heating, ventilating or temperature compensation ; Temperature sensing arrangements involving the transfer of heat by flowing fluids
    • H01L23/467Arrangements for cooling, heating, ventilating or temperature compensation ; Temperature sensing arrangements involving the transfer of heat by flowing fluids by flowing gases, e.g. air

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Theoretical Computer Science (AREA)
  • Thermal Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Condensed Matter Physics & Semiconductors (AREA)
  • Computer Hardware Design (AREA)
  • Power Engineering (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Sustainable Development (AREA)
  • Mechanical Engineering (AREA)
  • Cooling Or The Like Of Electrical Apparatus (AREA)
  • Thermotherapy And Cooling Therapy Devices (AREA)

Abstract

Einrichtungen, Systeme und Techniken, um Computerprozessoren zu kühlen. In mindestens einer Ausführungsform umfasst ein System einen oder mehrere Prozessoren und einen Kühlkörper, der durch eine flexible Wärmeleitung mit dem einen oder mehreren Prozessoren verbunden ist, und eine Position des Kühlkörpers einstellbar ist.

Description

  • GEBIET
  • Mindestens eine Ausführungsform betrifft Kühlkörper, die verwendet werden, um einen oder mehrere Prozessoren zu kühlen. Beispielsweise betrifft mindestens eine Ausführungsform einen Kühlkörper, der verwendet wird, um eine oder mehrere Graphikverarbeitungseinheiten zu kühlen.
  • HINTERGRUND
  • Computerprozessoren erzeugen signifikante Wärmemengen. Die Effizienz von Techniken, die verwendet werden, um Computerprozessoren zu kühlen, kann verbessert werden.
  • Figurenliste
    • 1 veranschaulicht eine konfigurierbare Kühlkörperanordnung mit einem Schleifenthermosiphon gemäß mindestens einer Ausführungsform;
    • 2 veranschaulicht eine konfigurierbare Kühlkörperanordnung gemäß mindestens einer Ausführungsform;
    • 3 veranschaulicht ein System, das zwei oder mehrere konfigurierbare Kühlkörperanordnungen umfasst, gemäß mindestens einer Ausführungsform;
    • 4 veranschaulicht ein System, das zwei oder mehrere winkelmäßig konfigurierbare Kühlkörperanordnungen umfasst, gemäß mindestens einer Ausführungsform;
    • 5 veranschaulicht ein Beispiel einer
    • Graphikverarbeitungseinheit mit einstellbarem Kühlkörper gemäß mindestens einer Ausführungsform;
    • 6 veranschaulicht eine Kühlkörperanordnung mit Multi-Positions-Stützen gemäß mindestens einer Ausführungsform;
    • 7 veranschaulicht ein Beispielprozess zum Konfigurieren einer Kühlkörperanordnung gemäß mindestens einer Ausführungsform;
    • 8 veranschaulicht ein beispielhaftes Rechenzentrum gemäß mindestens einer Ausführungsform;
    • 9 veranschaulicht ein Verarbeitungssystem gemäß mindestens einer Ausführungsform;
    • 10 veranschaulicht ein Computersystem gemäß mindestens einer Ausführungsform;
    • 11 veranschaulicht ein System gemäß mindestens einer Ausführungsform;
    • 12 veranschaulicht eine beispielhafte integrierte Schaltung gemäß mindestens einer Ausführungsform;
    • 13 veranschaulicht ein Rechensystem gemäß mindestens einer Ausführungsform;
    • 14 veranschaulicht eine APU gemäß mindestens einer Ausführungsform;
    • 15 veranschaulicht eine CPU gemäß mindestens einer Ausführungsform;
    • 16 veranschaulicht einen beispielhaften
    • Beschleunigungsintegrations-Slice gemäß mindestens einer Ausführungsform;
    • 17A und 17B veranschaulichen beispielhafte Graphikprozessoren gemäß mindestens einer Ausführungsform;
    • 18A veranschaulicht einen Graphikkern gemäß mindestens einer Ausführungsform;
    • 18B veranschaulicht eine GPGPU gemäß mindestens einer Ausführungsform;
    • 19A veranschaulicht einen Parallelprozessor gemäß mindestens einer Ausführungsform;
    • 19B veranschaulicht einen Verarbeitungscluster gemäß mindestens einer Ausführungsform;
    • 19C veranschaulicht einen Graphik-Multiprozessor gemäß mindestens einer Ausführungsform;
    • 20 veranschaulicht einen Graphikprozessor gemäß mindestens einer Ausführungsform;
    • 21 veranschaulicht einen Prozessor gemäß mindestens einer Ausführungsform;
    • 22 veranschaulicht einen Prozessor gemäß mindestens einer Ausführungsform;
    • 23 veranschaulicht einen Graphikprozessorkern gemäß mindestens einer Ausführungsform;
    • 24 veranschaulicht eine PPU gemäß mindestens einer Ausführungsform;
    • 25 veranschaulicht einen GPC gemäß mindestens einer Ausführungsform;
    • 26 veranschaulicht einen Streaming-Multiprozessor gemäß mindestens einer Ausführungsform;
    • 27 veranschaulicht einen Softwarestapel einer Programmierplattform gemäß mindestens einer Ausführungsform;
    • 28 veranschaulicht eine CUDA-Implementierung eines Softwarestapels von 27 gemäß mindestens einer Ausführungsform;
    • 29 veranschaulicht eine ROCm-Implementierung eines Softwarestapels von 27 gemäß mindestens einer Ausführungsform;
    • 30 veranschaulicht eine OpenCL-Implementierung eines Softwarestapels von 27 gemäß mindestens einer Ausführungsform;
    • 31 veranschaulicht Software, die von einer Programmierplattform gemäß mindestens einer Ausführungsform unterstützt wird;
    • 32 veranschaulicht ein Kompilieren von Code, um auf Programmierplattformen von 27-30 auszuführen, gemäß mindestens einer Ausführungsform;
    • 33 veranschaulicht ausführlicher ein Kompilieren von Code, um auf Programmierplattformen von 27-30 auszuführen, gemäß mindestens einer Ausführungsform;
    • 34 veranschaulicht das Übersetzen eines Quellcodes vor dem Kompilieren eines Quellcodes gemäß mindestens einer Ausführungsform;
    • 35A veranschaulicht ein System, das konfiguriert ist, um einen CUDA-Quellcode unter Verwendung von unterschiedlicher Arten von Verarbeitungseinheiten zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform;
    • 35B veranschaulicht ein System, das konfiguriert ist, um den CUDA-Quellcode von 35A unter Verwendung einer CPU und einer CUDA-aktivierten GPU zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform;
    • 35C veranschaulicht ein System, das konfiguriert ist, um den CUDA-Quellcode von 35A unter Verwendung einer CPU und einer Nicht-CUDA-aktivierten GPU zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform;
    • 36 veranschaulicht einen beispielhaften Kernel, der durch das CUDA-in-HIP-Übersetzungswerkzeug von 35C übersetzt ist, gemäß mindestens einer Ausführungsform;
    • 37 veranschaulicht ausführlicher die Nicht-CUDA-aktivierte GPU von 35C gemäß mindestens einer Ausführungsform; und
    • 38 veranschaulicht, wie Threads eines beispielhaften CUDA-Grid in unterschiedlichen Recheneinheiten von 37 abgebildet werden, gemäß mindestens einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • 1 veranschaulicht eine konfigurierbare Kühlkörperanordnung mit einem Schleifenthermosiphon gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist eine Kühlkörperanordnung 100 an einem oder mehreren Prozessoren 106 befestigt, um Wärme abzuleiten, die durch den einen oder mehrere Prozessoren 106 erzeugt wird. In mindestens einer Ausführungsform umfasst die Kühlkörperanordnung 100 einen Kühlkörper 102, dessen Position einstellbar ist. In mindestens einer Ausführungsform verbessert die Einstellung den Luftstrom zu dem Kühlkörper 102 und erhöht dadurch die Wärmeableitung. In mindestens einer Ausführungsform verbessert die Einstellung den Luftstrom zu einem anderen Kühlkörper als den Kühlkörper 102, der mit dem Kühlkörper 102 in einem gemeinsam benutzten Baugruppenträger bzw. Chassis installiert ist. In mindestens einer Ausführungsform umfasst die Verbesserung zu dem Luftstrom eines oder mehreres aus Erhöhen des Luftstromdrucks, Erhöhen der Luftstromgeschwindigkeit, Verringern der Vorwärmung von Luft durch andere Komponenten und Erhöhen der Nutzung des Luftstroms.
  • In mindestens einer Ausführungsform umfasst ein Kühlkörper 102 ein thermisch leitendes Material, wie beispielsweise Aluminiumlegierungen, Kupfer, Kupfer-Wolfram-Legierungen oder Pseudo-Legierungen, verschiedene andere Metalllegierungen, verschiedene Verbundmaterialien, Diamanten und Diamantenbasierte Materialien und so weiter. In mindestens einer Ausführungsform ist der Kühlkörper 102 geformt, um eine effiziente Übertragung oder Ableitung von Wärme zu erleichtern. In mindestens einer Ausführungsform umfasst der Kühlkörper 102 Rippen oder Ausstülpungen, um eine effiziente Übertragung oder Ableitung von Wärme zu erleichtern. In mindestens einer Ausführungsform ist der Kühlkörper 102 eine Komponente eines Schleifensiphonsystems. In mindestens einer Ausführungsform umfasst der Kühlkörper 102 einen Kondensator. In mindestens einer Ausführungsform umfasst der Kühlkörper 102 einen Schleifensiphonkondensator. In mindestens einer Ausführungsform umfasst ein Kühlkörper 102 einen Wärmetauscher. In mindestens einer Ausführungsform umfasst ein Kühlkörper 102 einen Radiator.
  • In mindestens einer Ausführungsform umfasst die Kühlkörperanordnung 100 eine Basis 104. In mindestens einer Ausführungsform ist die Kühlkörperanordnung 100 an dem einen oder mehreren Prozessoren über die Basis 104 befestigt. In mindestens einer Ausführungsform ist die Basis 104 an einem oder mehreren Prozessoren 106 unter Verwendung eines Materials befestigt, das eine thermische Schnittstelle zwischen der Basis 104 und dem einen oder mehreren Prozessoren 106 erleichtert. In mindestens einer Ausführungsform umfasst die thermische Schnittstelle einen thermischen Klebstoff, ein Wärmefett, ein Thermoleitpad oder einen anderen Befestigungsmechanismus oder Vermittler, der mit der Wärmeleitfähigkeit kompatibel ist oder diese fördert. In mindestens einer Ausführungsform bezieht sich die Verbindung oder Befestigung zwischen einem Kühlkörper 102 und einem oder mehreren Prozessoren 106 auf die thermische Verbindung, so dass Wärme von Prozessoren 106 zu dem Kühlkörper 102 übertragen werden kann.
  • In mindestens einer Ausführungsform umfasst die Basis 104 ein Reservoir 105 für ein Material, dass durch Wärme erwärmt werden kann, die durch den Betrieb des einen oder mehrerer Prozessoren 106 emittiert wird. In mindestens einer Ausführungsform ist das Material eine Flüssigkeit, Gas, Dampf oder eine Kombination davon. In mindestens einer Ausführungsform ist das Reservoir 105 ein Verdampfer eines Schleifensiphonsystems.
  • In mindestens einer Ausführungsform ist die Basis 104 mit einer flexiblen Wärmeleitung verbunden, wie beispielsweise flexiblen Rohren 108a,b. In mindestens einer Ausführungsform kann eine flexible Wärmeleitung, wie beispielsweise die flexiblen Rohre 108a,b, gebogen, verdreht oder anderweitig umorientiert werden, während sie an der Basis 104 und dem Kühlkörper 102 befestigt ist, so dass eine Position des Kühlkörpers 102 eingestellt werden kann. In mindestens einer Ausführungsform weist eine flexible Wärmeleitung, wie beispielsweise flexible Rohre 108a,b, eine Flexibilität auf, die ausreichend ist, um eine Einstellung einer Position des Kühlkörpers innerhalb eines gewünschten Bereichs der Einstellung zu erlauben.
  • In mindestens einer Ausführungsform ist die Verbindung zwischen der Basis 104 und den flexiblen Rohre 108a,b durch einen Auslass auf der Basis 104. In mindestens einer Ausführungsform, befördert das flexible Rohr 108a Material (e.g., ein Gas, Flüssigkeit, Dampf oder Kombination davon) eines Reservoirs 105 von Basis 104 zu dem Kühlkörper 102. In mindestens einer Ausführungsform ist das flexible Rohr 108b mit einem Einlass auf der Basis 104 verbunden. In mindestens einer Ausführungsform befördert das flexible Rohr 108b Material von dem Kühlkörper 102 zu dem Reservoir 105. In mindestens einer Ausführungsform bewirkt der Betrieb eines oder mehrerer Prozessoren 104, dass das Material in dem Reservoir 105 durch Wärme erwärmt wird, die durch den Betrieb des einen oder mehreren Prozessoren 106 erzeugt wird. Das Material wird durch ein flexibles Rohr 108a zu dem Kühlkörper 102 befördert, wobei das Material dann gekühlt wird. Das Material wird dann an die Basis 104 über ein anderes flexibles Rohr 108b zurückgegeben.
  • In mindestens einer Ausführungsform sind die flexiblen Rohre 108a,b mit dem Kühlkörper 102 verbunden. In mindestens einer Ausführungsform sind die flexiblen Rohre 108a,b mit jeweiligen Einlässen und Auslässen des Kühlkörpers 102 verbunden. Material eines flexiblen Rohrs 108a tritt durch einen Einlass ein, wird durch den Kühlkörper 102 zirkuliert und gekühlt und dann durch einen Auslass zurückgegeben.
  • In mindestens einer Ausführungsform ist eine Position des Kühlkörpers 102 einstellbar. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers 102 diagonal, horizontal, vertikal oder drehbar einstellbar. Beispielsweise kann in mindestens einer Ausführungsform der Kühlkörper 102 in einer vertikalen Einstellung gehoben oder gesenkt werden. In mindestens einer Ausführungsform kann der Kühlkörper 102 in einer horizontalen Einstellung nach links, rechts, vorwärts oder rückwärts verschoben werden. In mindestens einer Ausführungsform kann ein Ende des Kühlkörpers 102 relativ zu einem anderen Ende in einer diagonalen Einstellung gehoben werden. In mindestens einer Ausführungsform kann der Kühlkörper 102 über eine Achse in einer Dreheinstellung gedreht werden. In mindestens einer Ausführungsform sind horizontale und vertikale Einstellungen mit Bezug auf eine Ebene, die durch eine Oberfläche definiert ist, auf der ein oder mehrere Prozessoren angebracht sind. In einer derartigen Ausführungsform sind vertikale Einstellungen senkrecht zu der Ebene und horizontale Einstellungen parallel zu der Ebene.
  • In mindestens einer Ausführungsform sind der Kühlkörper 102 und die Basis 104 über eine oder mehrere Stützen 110 aneinander befestigt. In mindestens einer Ausführungsform erleichtert die Stütze 110 die Einstellung der Position eines Kühlkörpers 102. In mindestens einer Ausführungsform kann die Einstellung vorgenommen werden, während der Kühlkörper 102 über flexible Rohre 108a,b mit der Basis 104 verbunden ist. In mindestens einer Ausführungsform kann die Kühlkörperanordnung 100 als eine integrierte Einheit bereitgestellt werden, die gemäß einer bestimmten Baugruppenträgerkonfiguration installiert und eingestellt werden kann. Beispielsweise kann in mindestens einer Ausführungsform eine Position einer Kühlkörperanordnung 100 während oder nach der Installierung auf einem Baugruppenträger eingestellt werden, um Platzierungszwängen Rechnung zu tragen, die durch andere Komponenten auf dem Baugruppenträger auferlegt werden, um den Luftstrom zu dem Kühlkörper 102 oder den Luftstrom zu anderen Komponenten zu optimieren.
  • In mindestens einer Ausführungsform sind der Kühlkörper 102, die flexiblen Rohre 108a,b und die Basis 104 Komponenten eines Schleifenthermosiphonsystems. In einer Ausführungsform wird das Material eines Reservoirs oder Verdampfers in der Basis 104 durch Wärme erwärmt, die durch den Betrieb eines oder mehrerer Prozessoren 106 erzeugt wird. In mindestens einer Ausführungsform kann das Material vollständig oder teilweise durch Erwärmen in ein Gas oder einen Dampf umgewandelt werden. In mindestens einer Ausführungsform wird das Material dann durch das flexible Rohr 108a zu einem Kühlkörper 102 befördert. In mindestens einer Ausführungsform umfasst der Kühlkörper 102 einen Kondensator oder einen Plattenwärmetauscher. In mindestens einer Ausführungsform wird das Material durch den Kühlkörper 102 zirkuliert und gekühlt. In mindestens einer Ausführungsform wird die Wärme des Materials zu dem Kühlkörper 102 übertragen und abgeleitet.
  • In mindestens einer Ausführungsform unterstützt ein Luftstrom über einem Kühlkörper 102 die Wärmeableitung. In mindestens einer Ausführungsform verbessert der vergrößerte Luftstrom über den Kühlkörper 102 die Wärmeableitung. In mindestens einer Ausführungsform verbessert eine niedrigere Temperatur der Luft in dem Luftstrom über den Kühlkörper 102 die Wärmeableitung. In mindestens einer Ausführungsform kann der Luftstrom von dem Kühlkörper 102 eine erhöhte Temperatur aufgrund der Wärmeableitung aufweisen, so dass der Luftstrom zu anderen Komponenten, einschließlich anderen Kühlkörpern, eine erhöhte Temperatur aufweisen kann.
  • 2 veranschaulicht eine konfigurierbare Kühlkörperanordnung gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst eine Kühlkörperanordnung 200 einen Kühlkörper 202, eine flexible Wärmeleitung 208 und eine Basis 204. In mindestens einer Ausführungsform umfasst die Kühlkörperanordnung 200 ferner eine Stütze 210.
  • In mindestens einer Ausführungsform ist ein Kühlkörper 202 ausgestaltet, um Wärme zu übertragen oder abzuleiten. In mindestens einer Ausführungsform umfasst der Kühlkörper 202 ein thermisch leitendes Material, wie beispielsweise Aluminiumlegierungen, Kupfer, Kupfer-Wolfram-Legierungen oder Pseudo-Legierungen, verschiedene andere Metalllegierungen, verschiedene Verbundmaterialien, Diamanten und Diamantenbasierte Materials und so weiter. In mindestens einer Ausführungsform ist der Kühlkörper 202 geformt, um eine effiziente Übertragung oder Ableitung von Wärme zu erleichtern. In mindestens einer Ausführungsform umfasst der Kühlkörper 202 Rippen oder Ausstülpungen, um eine effiziente Übertragung oder Ableitung von Wärme zu erleichtern.
  • In mindestens einer Ausführungsform umfasst eine Kühlkörperanordnung 200 eine Basis 204. In mindestens einer Ausführungsform ist ein Kühlkörper 202 an dem einen oder mehreren Prozessoren über die Basis 204 befestigt. In mindestens einer Ausführungsform ist die Basis an einem oder mehreren Prozessoren 206 unter Verwendung eines Materials befestigt, das ein thermische Schnittstelle zwischen der Basis 204 und dem einen oder mehreren Prozessoren 206 erleichtert. In mindestens einer Ausführungsform umfasst die thermische Schnittstelle einen thermischen Klebstoff, ein Wärmefett, ein Thermoleitpad oder einen anderen Befestigungsmechanismus oder Vermittler, der mit der Wärmeleitfähigkeit kompatibel ist oder diese fördert. In mindestens einer Ausführungsform ist die Basis 204 eine Komponente eines Schleifensiphonsystems.
  • In mindestens einer Ausführungsform wird die Basis 204 durch Wärme erwärmt, die durch Betrieb des einen oder mehrerer Prozessoren 206 emittiert wird. In mindestens einer Ausführungsform wird die Wärme an eine flexible Wärmeleitung 208 übertragen. In mindestens einer Ausführungsform ist die flexible Wärmeleitung 208 an der Basis 204 befestigt. In mindestens einer Ausführungsform ist die flexible Wärmeleitung 208 an der Basis 204 unter Verwendung eines Materials befestigt, das eine thermische Schnittstelle der zwischen der Basis 204 und einem oder mehreren Prozessoren 106 erleichtert. In mindestens einer Ausführungsform umfasst die thermische Schnittstelle einen thermischen Klebstoff, ein Wärmefett, ein Thermoleitpad oder einen anderen Befestigungsmechanismus oder Vermittler, der mit der Wärmeleitfähigkeit kompatibel ist oder diese fördert.
  • In mindestens einer Ausführungsform kann die flexible Wärmeleitung 208 gebogen, verdreht oder anderweitig umorientiert werden, während sie an der Basis 204 und dem Kühlkörper 202 befestigt ist, so dass der Kühlkörper 102 in verschiedenen Positionen konfiguriert werden kann. In mindestens einer Ausführungsform weist die flexible Wärmeleitung 208 eine Flexibilität auf, die ausreichend ist, um einen gewünschten Bereich der Einstellung des Kühlkörpers 202 zu erlauben.
  • In mindestens einer Ausführungsform ist die flexible Wärmeleitung 208 an dem Kühlkörper 202 befestigt. In mindestens einer Ausführungsform ist die flexible Wärmeleitung 208 an dem Kühlkörper 202 unter Verwendung eines Materials befestigt, das eine thermische Schnittstelle zwischen der Basis 104 und dem einen oder mehreren Prozessoren 106 erleichtert. In mindestens einer Ausführungsform umfasst die thermische Schnittstelle einen thermischen Klebstoff, ein Wärmefett, ein Thermoleitpad oder einen anderen Befestigungsmechanismus oder Vermittler, der mit der Wärmeleitfähigkeit kompatibel ist oder diese fördert.
  • In mindestens einer Ausführungsform ist der Kühlkörper 202 durch eine Position einstellbar. In mindestens einer Ausführungsform ist eine Position des Kühlkörper 202 diagonal, horizontal, vertikal oder rotationsmäßig einstellbar. Beispielsweise kann in mindestens einer Ausführungsform der Kühlkörper 202 in einer vertikalen Einstellung gehoben oder gesenkt werden. In mindestens einer Ausführungsform kann der Kühlkörper 202 in einer horizontalen Einstellung nach links, rechts, vorwärts oder rückwärts verschoben werden. In mindestens einer Ausführungsform kann ein Ende des Kühlkörpers 202 relativ zu einem anderen Ende in einer diagonalen Einstellung gehoben werden. In mindestens einer Ausführungsform kann der Kühlkörper 202 über eine Achse in einer Dreheinstellung gedreht werden. In mindestens einer Ausführungsform sind horizontale und vertikale Einstellungen mit Bezug auf eine Ebene, die durch eine Oberfläche definiert ist, auf der einer oder mehrere Prozessoren 206 angebracht sind. In einer derartigen Ausführungsform sind vertikale Einstellungen senkrecht zu der Ebene und horizontale Einstellungen parallel zu der Ebene.
  • In mindestens einer Ausführungsform sind der Kühlkörper 202 und die Basis 204 über eine oder mehrere Stützen 210 aneinander befestigt. In mindestens einer Ausführungsform erleichtert die Stütze 210 die Einstellung der Position des Kühlkörpers 202. In mindestens einer Ausführungsform kann die Einstellung vorgenommen werden, während der Kühlkörper 202 über die flexible Wärmeleitung 208 mit der Basis 204 verbunden ist. In mindestens einer Ausführungsform kann die Kühlkörperanordnung 200 als eine integrierte Einheit bereitgestellt werden, die installiert und eingestellt werden kann, um eine bestimmte Baugruppenträgerkonfiguration unterzubringen. Beispielsweise kann in mindestens einer Ausführungsform die Kühlkörperanordnung 200 während oder nach der Installierung auf einem Baugruppenträger eingestellt werden, so dass ihren Positionierungszwängen Rechnung getragen werden kann, die dem Baugruppenträger durch andere Komponenten auferlegt werden. In mindestens einer Ausführungsform wird Positionieren des Kühlkörpers 202 eingestellt, um den Luftstrom zu dem Kühlkörper 202 zu optimieren oder der Luftstrom zu einer anderen Komponente in dem Baugruppenträger, wie beispielsweise einem anderen Kühlkörper, zu optimieren.
  • 3 veranschaulicht ein System, das zwei oder mehrere konfigurierbare Kühlkörperanordnungen umfasst, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein Baugruppenträger 300 zwei oder mehrere Kühlkörperanordnungen, die jeweils einen Kühlkörper 302 umfassen, der an einer Basis 304 durch eine flexible Wärmeleitung und eine oder mehrere Stützen befestigt ist. In mindestens einer Ausführungsform ist ein Baugruppenträger ein Gehäuse oder eine andere Umfassung. In mindestens einer Ausführungsform ist ein Baugruppenträger 300 eine Hauptplatine oder eine andere Platine.
  • In mindestens einer Ausführungsform wird ein Luftstrom 310 über einen Baugruppenträger 300 durch ein Gebläse 318 erleichtert. In mindestens einer Ausführungsform wird der Luftstrom 310 über einen Baugruppenträger 300 durch einen Luftstromeinlass 316 und ein Gebläse 318 erleichtert.
  • In mindestens einer Ausführungsform wird der Luftstrom 310A durch einen Luftstromeinlass 316 und in den Baugruppenträger 300 durch das Gebläse 318 angesaugt. In mindestens einer Ausführungsform strömt der Luftstrom 310A um, über oder durch den Kühlkörper 302A, wobei er erwärmt wird. Der erwärmte Luftstrom 312A von dem Kühlkörper 302A wird durch das Gebläse 318 aus dem Baugruppenträger 300 als Luftstrom 314 gesaugt.
  • In mindestens einer Ausführungsform wird der Luftstrom 310B durch den Luftstromeinlass 316 und in den Baugruppenträger 300 durch das Gebläse 318 gesaugt. In mindestens einer Ausführungsform ist ein wesentlicher Teil des Luftstroms 310B unter dem Kühlkörper 302A. In mindestens einer Ausführungsform wird der Luftstrom 310B durch den Kühlkörper 302 nicht signifikant erwärmt und wird zu einem zweiten Kühlkörper 302B mit einer kühleren Temperatur geliefert. Der zweite Kühlkörper 302B leitet Wärme in den Luftstrom 310B als erwärmten Luftstrom 312B ab. Der erwärmte Luftstrom 312B wird dann durch das Gebläse 318 aus dem Baugruppenträger 300 gesaugt. In mindestens einer Ausführungsform verbessert die niedrigere Temperatur des Luftstroms 310 die Wärmeableitung des zweiten Kühlkörpers 302B.
  • In mindestens einer Ausführungsform können jeweilige Positionen von Kühlkörpern 302A,B eingestellt werden, um eine weite Vielfalt von Baugruppenträgerkonfigurationen aufzunehmen. In mindestens einer Ausführungsform können die Einstellungen während oder nach der Installierung von Prozessoren 306 und Kühlkörperanordnungen in dem Baugruppenträger 300 vorgenommen werden. In mindestens einer Ausführungsform sind die Positionen von Prozessoren 306A,B festgelegt, wie es die Positionen von entsprechenden Basen 304A,B sind. In mindestens einer Ausführungsform können die Positionen von Kühlkörpern 302A,B jedoch beispielsweise eingestellt werden, um den Luftstrom zu verbessen oder um der Platzierung innerhalb des Baugruppenträgers 300 Rechnung zu tragen, sogar wo andere Komponenten eine derartige Platzierung anderswo verhindern könnten. In mindestens einer Ausführungsform können die Kühlkörper 302A,B größer gemacht werden, als es anderswo praktisch sein würde, basierend auf den Einstellungen, welche das Positionieren der Kühlkörper 302A,B flexibler macht.
  • 4 veranschaulicht ein System, das zwei oder mehrere winkelmäßig konfigurierbare Kühlkörperanordnungen umfasst, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein Baugruppenträger 400 zwei oder mehrere Kühlkörperanordnungen, die jeweils einen Kühlkörper 402 umfassen, der an einer Basis 404 durch eine flexible Wärmeleitung und eine oder mehrere Stützen befestigt ist.
  • In mindestens einer Ausführungsform wird der Luftstrom 410 über einen Baugruppenträger 400 durch ein Gebläse 418 erleichtert. In mindestens einer Ausführungsform wird der Luftstrom 410 über einen Baugruppenträger 400 durch einen Luftstromeinlass 416 und ein Gebläse 418 erleichtert.
  • In mindestens einer Ausführungsform wird der Luftstrom 410B durch den Luftstromeinlass 416 und in den Baugruppenträger 400 durch das Gebläse 418 gesaugt. In mindestens einer Ausführungsform strömt der Luftstrom 410B über einen ersten Kühlkörper 402A mit einem Abstand, so dass seine Temperatur durch den Kühlkörper 402A nicht wesentlich beeinflusst wird. In mindestens einer Ausführungsform wird der Luftstrom 410B von einem zweiten Kühlkörper 402B empfangen, um die Wärmeableitung durch den zweiten Kühlkörper 402B zu unterstützen. Der erwärmte Luftstrom 412B von dem Kühlkörper 402B kann dann von unterhalb des Kühlkörpers 402B ausgestoßen und durch das Gebläse 418 aus dem Baugruppenträger 400 als Luftstrom 414 gesaugt werden.
  • In mindestens einer Ausführungsform wird der Luftstrom 410A durch Luftstromeinlass 416 und in den Baugruppenträger 400 durch das Gebläse 418 gesaugt. In mindestens einer Ausführungsform wird der Luftstrom 410A von einem Kühlkörper 402A empfangen, um die Wärmeableitung durch den Kühlkörper 402A zu unterstützen.
  • In mindestens einer Ausführungsform wird der erwärmte Luftstrom 412A dann von unterhalb des Kühlkörpers 402A als Luftstrom 412A ausgestoßen und von dem Baugruppenträger 400 als Luftstrom 414 angesaugt. In mindestens einer Ausführungsform wird der zweite Kühlkörper 402B relativ zu dem ersten Kühlkörper 402A gehoben, so dass der Luftstrom 412A den Betrieb des zweiten Kühlkörpers 402B nicht wesentlich beeinflusst. In mindestens einer Ausführungsform können die Einstellungen während oder nach der Installierung von jeweiligen Kühlkörperanordnungen in dem Baugruppenträger 400 vorgenommen werden.
  • In mindestens einer Ausführungsform können jeweilige Positionen von Kühlkörpern 402A,B eingestellt werden, um eine Vielfalt von Baugruppenträgerkonfigurationen aufzunehmen. In mindestens einer Ausführungsform können die Einstellungen während oder nach der Installierung von Prozessoren 406, Kühlkörperanordnungen und anderen Komponenten in einem Baugruppenträger 400 vorgenommen werden. Beispielsweise sind in mindestens einer Ausführungsform die Positionen von Prozessoren 406A,B festgelegt, wie es Positionen von entsprechenden Basen 304A,B sind, da diese an jeweiligen Prozessoren 406A,B befestigt sind. In mindestens einer Ausführungsform können die Positionen von Kühlkörpern 402A,B jedoch eingestellt werden, um den Luftstrom zu verbessern oder der Platzierung innerhalb des Baugruppenträgers 400 Rechnung zu tragen, sogar wenn Komponenten in dem Baugruppenträger 400 installiert sind, die andernfalls derartige Platzierung verhindern können. In mindestens einer Ausführungsform können die Kühlkörper 402A,B größer sein, als anderweitig praktisch sein würde.
  • In mindestens einer Ausführungsform werden Ablenkplatten zu dem Baugruppenträger 400 hinzugefügt, um den Luftstrom weiter zu optimieren oder abzustimmen. In mindestens einer Ausführungsform umfasst eine Ablenkplatte ein Material, um den Luftstrom zu behindern. In mindestens einer Ausführungsform wird eine Ablenkplatte eingesetzt, um eine Lücke zwischen einer eingestellten Kühlkörperposition und einer Baugruppenträgerwand oder einem Teiler abzudichten.
  • In mindestens einer Ausführungsform werden die Kühlkörper Positionen 402A,B eingestellt, um die Luftstromnutzung zu erhöhen. In mindestens einer Ausführungsform umfasst die Luftstromnutzung die Nutzung eines Luftstroms, der durch ein Gebläse 418 erzeugt wird. Beispielsweise erzeugt in mindestens einer Ausführungsform ein Gebläse einen Luftstrom, wobei ein Teil desselben auf die Kühlkörper 402A,B gerichtet ist. In mindestens einer Ausführungsform kann ein Erhöhen der Größe dieses Teils die Wärmeableitung durch die Kühlkörper 402A,B verbessern. In mindestens einer Ausführungsform kann diese Verbesserung sogar stattfinden, wenn ein Prozentsatz dieses Luftstroms vorgewärmte Luft umfasst.
  • 5 veranschaulicht ein Beispiel einer Graphikverarbeitungseinheit mit einstellbarem Kühlkörper gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein Baugruppenträger 500 eine Basisplatine 520, auf der eine Vielfalt von Komponenten angebracht ist. In mindestens einer Ausführungsform ist die Basisplatine 520 eine Hauptplatine. In mindestens einer Ausführungsform umfassen auf einer Basisplatine 520 angebrachte Komponenten Leistungsversorgungen 510, Mikroprozessoren 506, Speicher 508 und eine Lüfterbank 504. In mindestens einer Ausführungsform umfasst die Basisplatine 520 einen oder mehrere Schlitze zum Installieren von Hardware, wie beispielsweise Graphikkarten, die Graphikverarbeitungseinheiten (GPUs) umfassen. In mindestens einer Ausführungsform sind die Schlitze Peripherie-Komponenten-Schnittstellen-Schlitze („PCI“-Schlitze) . In mindestens einer Ausführungsform sind die Schlitze Hochgeschwindigkeits-PCI-Schlitze, wie beispielsweise PCI-E- und PCI-X-Schlitze.
  • In mindestens einer Ausführungsform wird die Konfiguration von Komponenten, wie beispielsweise von Leistungsversorgungen 510, Mikroprozessoren 506, einem Speicher 508 und einer Lüfterbank 504 vor dem Kennzeichen der Graphikkarten abgeschlossen, die in dem Baugruppenträger 500 zu installieren sind. Beispielsweise wird in mindestens einer Ausführungsform eine Konfiguration des Baugruppenträgers 500 bestimmt, ohne zu kennzeichnen, welche Graphikkarte oder Graphikkarten installiert werden. In mindestens einer Ausführungsform umfasst die Basisplatine 520 einen oder mehrere Schlitze zum Installieren von Graphikkarten, wie beispielsweise PCI-, PCI-E- oder PCI-X-Schlitze. In mindestens einer Ausführungsform wird die Konfiguration der Schlitze vor dem Kennzeichen der Graphikkarten abgeschlossen, die in dem Baugruppenträger 500 zu installieren sind.
  • In mindestens einer Ausführungsform werden die Graphikkarten 502A-D auf der Basisplatine 520 installiert. In mindestens einer Ausführungsform umfasst eine Graphikkarte, wie beispielsweise eine beliebige der Graphikkarten 502A-D, eine Kühlkörperanordnung, wie beispielsweise die in 1 oder 2 anschaulich dargestellten Kühlkörperanordnungen, und einen oder mehrere Prozessoren, wie beispielsweise Graphikverarbeitungseinheiten.
  • In mindestens einer Ausführungsform werden die Kühlkörper 503A-D der Graphikkarten 502A-D eingestellt, um zu ermöglichen, dass Graphikkarten 502A-D innerhalb des Baugruppenträgers 500 platziert werden können oder auf die Basisplatine 520 passen. In mindestens einer Ausführungsform wird die Platzierung durch die Einstellung von Kühlkörperposition(en) ermöglicht. Beispielsweise könnte in mindestens einer Ausführungsform eine Komponente, wie beispielsweise die Lüfterbank 504, die Installierung einer Graphikkarte mit einem nicht konfigurierbaren Kühlkörper insbesondere zu verhindern, wenn der Kühlkörper größer als Standardgröße dimensioniert ist. In mindestens einer Ausführungsform umfassen Graphikkarten 502A-D, die Kühlkörper, die größer als Standardgröße 503A-D sind, die jedoch in einen Baugruppenträger, der für Kühlkörper mit Standardgröße ausgestaltet ist, durch Einstellung der Kühlkörperpositionierung eingepasst werden können. In mindestens einer Ausführungsform ist eine Graphikkarte mit einem vergrößerten Kühlkörper in der Lage, eine effizientere Wärmeableitung als eine entsprechende Graphikkarten mit einem Kühlkörper von Standardgröße aufgrund des Aufweisens eines größeren Oberflächenbereichs als ein Kühlkörper von Standardgröße bereitzustellen.
  • 6 veranschaulicht eine Kühlkörperanordnung mit Multi-Positions-Stützen gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst eine Kühlkörperanordnung 600 einen Kühlkörper 602, der mit einer Basis 604 durch eine flexible Wärmeleitung 608 verbunden ist.
  • In mindestens einer Ausführungsform entspricht die flexible Wärmeleitung 608 einer flexiblen Wärmeleitung, die in 1 oder 2 anschaulich dargestellt ist. In mindestens einer Ausführungsform umfasst die Kühlkörperanordnung ferner Stützen 610A,B, die an der Basis 604 befestigt sind. In mindestens einer Ausführungsform verbinden sich Verbinderstifte 612A,B auf dem Kühlkörper 602 mit Stützen 610A,B. In mindestens einer Ausführungsform werden die Verbinderstifte 612A,B durch Schlitze 614A,B von Stützen 610A,B eingesetzt. In mindestens einer Ausführungsform kann eine konfigurierbare Verriegelung 616A auf der Stütze 610A platziert werden, um den Verbinderstift 612A an einem Ort in dem Schlitz 614A zu sichern und dadurch den Kühlkörper 602 an einer bestimmten Position zu sichern. In mindestens einer Ausführungsform erfordert eine konfigurierbare Verriegelung 616A,B keine Werkzeuge, wenn sie verwendet wird, um den Kühlkörper 602 an einer Position zu sichern. In mindestens einer Ausführungsform umfasst die Konfiguration einer konfigurierbaren Verriegelung 616A,B die Befestigung der Verriegelung an einem Verbinderstift 612A,B bei einer Position auf der Verriegelung, die den Kühlkörper 602 in einer von mehreren möglichen Positionen sichert.
  • In mindestens einer Ausführungsform sind Schlitze 614A,B und konfigurierbare Verriegelungen 616A,B imstande, jeden Verbinderstift 612A,B an einer von vier Positionen A, B, C, D auf einem jeweiligen Schlitz 614A,B zu fixieren. In mindestens einer Ausführungsform kann ein linksseitiger Verbinderstift 612A in Positionen A oder B auf einer linksseitigen Stütze 610A platziert werden und ein rechtsseitiger Verbinderstift 614B kann in Positionen A oder B auf einer rechtsseitigen Stütze 610B platziert werden. Desgleichen kann in mindestens einer Ausführungsform der linksseitige Verbinderstift 612A in Positionen C oder D auf einer linksseitige Stütze 610A platziert werden und der rechtsseitige Verbinderstift 614B kann in Positionen C oder D auf einer rechtsseitigen Stütze 610B platziert werden. Eine Platzierung in diesen verschiedene Positionen ermöglicht dem Kühlkörper 602 horizontal, vertikal und diagonal eingestellt zu sein.
  • 7 veranschaulicht einen beispielhaften Prozess 700 zum Konfigurieren einer Kühlkörperanordnung gemäß mindestens einer Ausführungsform. Obwohl 7 als eine Sequenz von Schritte anschaulich dargestellt ist, sollte die anschaulich dargestellte Sequenz nicht ausgelegt werden, als den Umfang von potenziellen Ausführungsformen lediglich auf diejenigen zu beschränken, deren Ausführungsformen mit einer dargestellten Sequenz übereinstimmen. Beispielsweise können, ausgenommen wo logisch erforderlich, anschaulich dargestellte Schritte umgeordnet oder parallel durchgeführt werden. In mindestens einigen Ausführungsformen können bestimmte Schritte weggelassen werden. In mindestens einigen Ausführungsformen können zusätzliche Schritte hinzugefügt werden.
  • Bei 702 wird in mindestens einer Ausführungsform eine Kühlkörperanordnung bereitgestellt. In mindestens einer Ausführungsform umfasst die Kühlkörperanordnung eine Basis, eine flexible Wärmeleitung und einen Kühlkörper.
  • In mindestens einer Ausführungsform wird eine Kühlkörperanordnung als eine Einheit bereitgestellt und durch einen Originalgerätehersteller, Endverbraucher oder andere Entität an einem oder mehreren Prozessoren befestigt. In mindestens einer Ausführungsform umfassen der eine oder mehrere Prozessoren Graphikverarbeitungseinheiten. In mindestens einer Ausführungsform sind der eine oder mehrere Prozessoren Zentralverarbeitungseinheiten („CPUs“).
  • Bei 704 wird in mindestens einer Ausführungsform eine Prozessoranordnung bereitgestellt. In mindestens einer Ausführungsform umfasst die Prozessoranordnung einen oder mehrere Prozessoren und eine Kühlkörperanordnung, die an dem einen oder mehreren Prozessoren befestigt ist. In mindestens einer Ausführungsform umfassen der eine oder mehrere Prozessoren Graphikverarbeitungseinheiten. In mindestens einer Ausführungsform sind der eine oder mehrere Prozessoren CPUs. In mindestens einer Ausführungsform ist eine Prozessoranordnung eine Graphikkarte.
  • Bei 706 wird in mindestens einer Ausführungsform eine Prozessoranordnung in einem Baugruppenträger installiert. In mindestens einer Ausführungsform wird eine Prozessoranordnung, wie beispielsweise eine Graphikkarte, durch elektronisches Verbinden der Prozessoranordnung mit einer Hauptplatine installiert. In mindestens einer Ausführungsform umfasst die Installierung einer Prozessoranordnung das Einsetzen eines Verbinders einer Prozessoranordnung in einen Schlitz auf einer Hauptplatine, wie beispielsweise in einen PCI, PCI-E oder PCI-X Schlitz.
  • Bei 708 wird in mindestens einer Ausführungsform eine Position eines Kühlkörpers an eine Baugruppenträgerkonfiguration angepasst. In mindestens einer Ausführungsform umfasst die Anpassung ein Positionieren des Kühlkörpers, um innerhalb einer besonderen Baugruppenträgerkonfiguration zu passen. Beispielsweise ist in mindestens einer Ausführungsform der Kühlkörper überdimensioniert und seine Position wird manipuliert, um innerhalb eines Baugruppenträgers zu passen, der für Prozessoranordnungen ausgestaltet ist, deren Kühlkörper von einer kleineren Größe sind. In mindestens einer Ausführungsform wird der Kühlkörper eingestellt, so dass seine Position die Platzierung von anderen Komponenten innerhalb eines Baugruppenträgers nicht stört.
  • Bei 710 ist in mindestens einer Ausführungsform eine Position eines Kühlkörpers angepasst, um den Luftstrom zu Komponenten in einem Baugruppenträger zu maximieren. In mindestens einer Ausführungsform wird ein Kühlkörper gehoben oder gesenkt, um den Luftstrom zu einer anderen Komponente, wie beispielsweise einem anderen Kühlkörper, zu verbessern. In mindestens einer Ausführungsform ist ein Kühlkörper abgewinkelt, um den Luftstrom zu einer anderen Komponente zu verbessern. In mindestens einer Ausführungsform wird ein Kühlkörper horizontal, vertikal oder in einer anderen Richtung verschoben, um den Luftstrom zu einer anderen Komponente zu verbessern. In mindestens einer Ausführungsform wird ein Kühlkörper gehoben, gesenkt, abgewinkelt oder horizontal, vertikal oder in einer anderen Richtung verschoben, um den Luftstrom zu diesem Kühlkörper zu verbessern.
  • Bei 712 wird in mindestens einer Ausführungsform eine Position eines Kühlkörper angepasst, um die Lieferung eines vorgewärmtem Luftstroms zu Komponenten in einem Baugruppenträger zu minimieren. In mindestens einer Ausführungsform wird ein Kühlkörper gehoben oder gesenkt, um eine Vorwärmung von Luft zu vermeiden, die an eine andere Komponente geliefert wird, wie beispielsweise einen anderen Kühlkörper. In mindestens einer Ausführungsform ist ein Kühlkörper abgewinkelt, um das Liefern vorgewärmter Luft an eine andere Komponente zu vermeiden. In mindestens einer Ausführungsform wird ein Kühlkörper horizontal, vertikal oder in einer anderen Richtung verschoben, um zu verhindern, dass vorgewärmte Luft an eine andere Komponente geliefert wird. In mindestens einer Ausführungsform wird vorgewärmte Luft durch Bewegen des Kühlkörpers aus einem Pfad vermieden, durch welchen der Luftstrom an eine Komponente geliefert wird.
  • Bei 714 werden in mindestens einer Ausführungsform Ablenkplatten zu einem Baugruppenträger hinzugefügt, um den Luftstrom zu Komponenten in einem Baugruppenträger weiter zu verbessern. Beispielsweise werden in mindestens einer Ausführungsform Ablenkplatten hinzugefügt, um den Luftstromdruck zu verbessern, um das Austreten von vorgewärmter Luft zu verhindern, um den Luftstrom zu Bereichen oder Abteilen umzulenken und so weiter. In mindestens einer Ausführungsform werden Ablenkplatten zu Bereichen zwischen einer eingestellten Position eines Kühlkörpers und einer Baugruppenträgerwand oder Teiler hinzugefügt.
  • In mindestens einer Ausführungsform umfasst ein Verfahren zur Herstellung einer Rechenvorrichtung das Installieren einer Kühlkörperanordnung, wie beispielsweise eine beliebige von denen, die in 1-6 anschaulich dargestellt sind, in einem Rechenvorrichtungs-Baugruppenträger und dann Einstellen einer Position eines Kühlkörpers der Anordnung. In mindestens einer Ausführungsform soll das Einstellen den Luftstrom zu einem von mehreren der Kühlkörper, anderen Kühlkörpern oder anderen Komponenten in dem Baugruppenträger verbessern. In mindestens einer Ausführungsform erfordert die Einstellung keine Werkzeuge.
  • In mindestens einer Ausführungsform umfasst ein Verfahren zum Bereitstellen einer Graphikkarten das Bereitstellen einer Graphikkarten mit einer Kühlkörperanordnung, wie beispielsweise eine beliebige von denen, die in 1-6 anschaulich dargestellt sind, die an einem oder mehreren Prozessoren befestigt sind. In mindestens einer Ausführungsform kann ein Kühlkörper der Graphikkarten von einem Hersteller einer Rechenvorrichtung eingestellt werden, welche die Graphikkarten umfassen soll.
  • In mindestens einer Ausführungsform wird eine Karte, die Parallelverarbeitungseinheiten umfasst, mit einer Kühlkörperanordnung versehen, wie etwa eine beliebige von denen, die in 1-6 anschaulich dargestellt sind, die an den Parallelverarbeitungseinheiten befestigt sind.
  • In folgenden Beschreibung werden zahlreiche spezifische Einzelheiten ausgeführt, um ein durchgängigeres Verständnis von mindestens einer Ausführungsform bereitzustellen. Es wird jedoch für einen Fachmann ersichtlich sein, dass die erfinderischen Konzepte ohne eine oder mehrere dieser spezifischen Einzelheiten praktiziert werden kann.
  • Rechenzentrum
  • 8 veranschaulicht ein beispielhaftes Rechenzentrum 800, in welchem mindestens eine Ausführungsform verwendet werden kann. In mindestens einer Ausführungsform umfasst das Rechenzentrum 800 eine Rechenzentrum-Infrastrukturschicht 810, eine Framework-Schicht 820, eine Softwareschicht 830 und eine Anwendungsschicht 840.
  • In mindestens einer Ausführungsform kann, wie in 8 gezeigt, die Rechenzentrum-Infrastrukturschicht 810 einen Ressourcenorchestrator 812, gruppierte Rechenressourcen 814 und Knotenrechenressourcen („Knoten-C.R.“) 816(1)-816(N) umfassen, wobei „N“ eine positive ganze Zahl darstellt (die eine unterschiedliche ganze Zahl „N“ als die sein kann, die in anderen Figuren verwendet wird). In mindestens einer Ausführungsform können die Knoten-C.R.s 816(1)-816(N), sind jedoch nicht beschränkt auf, eine beliebige Anzahl von zentralen Verarbeitungseinheiten („CPUs“) oder anderen Prozessoren (einschließlich Beschleunigern, feldprogrammierbaren Gate-Arrays („FPGAs“), Graphikprozessoren usw.), Speichervorrichtungen, (z.B. dynamischer Nur-Lese-Speicher), Speicherungsvorrichtungen (z.B. Solid-State- oder Festplattenlaufwerke), Netzwerk-Eingabe/Ausgabe („NW E/A“)-Vorrichtungen, Netzwerkschalter, virtuelle Maschinen („VMs“), Leistungsmodule und Kühlmodule usw. umfassen. In mindestens einer Ausführungsform können ein oder mehrere Knoten-C.R.s aus den Knoten-C.R.s 816(1)-816(N) ein Server mit einer oder mehreren der oben erwähnten Rechenressourcen sein.
  • In mindestens einer Ausführungsform können gruppierte Rechenressourcen 814 separate Gruppierungen von Knoten-C.R.s. umfassen, die in einem oder mehreren Racks (nicht gezeigt) untergebracht sind, oder in vielen Racks, die in Rechenzentren an verschiedenen geographischen Standorten untergebracht sind (ebenfalls nicht gezeigt). Separate Gruppierungen von Knoten-C.R.s. innerhalb gruppierter Rechenressourcen 814 können gruppierte Rechen-, Netzwerk-, Speicher- oder Speicherungsressourcen umfassen, die konfiguriert oder zugeteilt sein können, um eine oder mehrere Arbeitslasten zu unterstützen. In mindestens einer Ausführungsform können mehrere Knoten-C.R.s einschließlich CPUs oder Prozessoren innerhalb eines oder mehrerer Racks gruppiert sein, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einer Ausführungsform können ein oder mehrere Racks ebenfalls eine beliebige Anzahl von Leistungsmodulen, Kühlmodulen und in beliebiger Kombination umfassen.
  • In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 eine oder mehrere Knoten-C.R.s 816(1)-816(N) und/oder gruppierte Rechenressourcen 814 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 eine Software-Design-Infrastruktur („SDI“)-Verwaltungseinheit für das Rechenzentrum 800 umfassen. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 Hardware, Software oder eine Kombination davon umfassen.
  • In mindestens einer Ausführungsform umfasst, wie in 8 gezeigt, die Framework-Schicht 820, ohne darauf beschränkt zu sein, einen Job-Planer 832, einen Konfigurationsverwalter 834, einen Ressourcenverwalter 836 und ein verteiltes Dateisystem 838. In mindestens einer Ausführungsform kann die Framework-Schicht 820 ein Framework zur Unterstützung der Software 852 der Softwareschicht 830 und/oder eine oder mehrere Anwendungen 842 der Anwendungsschicht 840 umfassen. In mindestens einer Ausführungsform kann(können) die Software 852 oder die Anwendung(en) 842 jeweils webbasierte Dienstsoftware oder Anwendungen umfassen, wie beispielsweise diejenigen, die von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In mindestens einer Ausführungsform kann, ohne darauf beschränkt zu sein, die Framework-Schicht 820 eine Art von freien und quelloffene Software-Webanwendung-Framework wie beispielsweise Apache Spark™ (nachfolgend als „Spark“ bezeichnet) sein, welches das verteilte Dateisystem 838 für eine groß angelegte Datenverarbeitung (z.B. „big data“) nutzen kann. In mindestens einer Ausführungsform kann der Job-Planer 832 einen Spark-Treiber umfassen, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 800 unterstützt werden. In mindestens einer Ausführungsform kann der Konfigurationsverwalter 834 in der Lage sein, verschiedene Schichten, wie beispielsweise die Softwareschicht 830 und die Framework-Schicht 820 einschließlich Spark und des verteilten Dateisystems 838, zur Unterstützung der groß angelegten Datenverarbeitung zu konfigurieren. In mindestens einer Ausführungsform kann der Ressourcenverwalter 836 in der Lage sein, geclusterte oder gruppierte Rechenressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 838 und des Job-Planers 832 gemappt oder zugeteilt sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Rechenressourcen die gruppierte Rechenressource 814 auf der Rechenzentrum-Infrastrukturschicht 810 umfassen. In mindestens einer Ausführungsform kann sich der Ressourcenverwalter 836 mit dem Ressourcenorchestrator 812 koordinieren, um diese gemappten oder zugeteilten Rechenressourcen zu verwalten.
  • In mindestens einer Ausführungsform kann die in der Softwareschicht 830 enthaltene Software 852 Software, die von mindestens Teilen der Knoten-C.R.s 816(1)-816(N) verwendet wird, gruppierte Rechenressourcen 814 und/oder das verteilte Dateisystem 838 der Framework-Schicht 820 umfassen. Eine oder mehrere Arten von Software können, ohne darauf beschränkt zu sein, Internet-Webseiten-Suchsoftware, E-Mail-Virenscanner-Software, Datenbanksoftware und Streaming-Videoinhalt-Software umfassen.
  • In mindestens einer Ausführungsform kann(können) die in der Anwendungsschicht 840 enthaltene(n) Anwendung(en) 842 eine oder mehrere Arten von Anwendungen, die von mindestens Teilen der Knoten-C.R.s 816(1)-816(N) verwendet werden, gruppierte Rechenressourcen 814 und/oder das verteilte Dateisystem 838 der Framework-Schicht 820 umfassen. Mindestens eine oder mehreren Typen von Ausführungsformen können, ohne darauf beschränkt zu sein, CUDA-Anwendungen umfassen.
  • In mindestens einer Ausführungsform kann jeder der Konfigurationsmanager 834, der Ressourcenmanager 836 und der Ressourcenorchestrator 812 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen basierend auf einer beliebigen Menge und der Art von Daten, die in beliebig technisch machbarer Weise erfasst wurden, implementieren. In mindestens einer Ausführungsform können selbstmodifizierende Aktionen einen Betreiber des Rechenzentrums 800 davon befreien, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise ungenutzte und/oder schlecht funktionierende Abschnitte eines Rechenzentrums zu vermeiden.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • Rechenzentrum
  • 8 veranschaulicht ein beispielhaftes Rechenzentrum 800, in welchem mindestens eine Ausführungsform verwendet werden kann. In mindestens einer Ausführungsform umfasst das Rechenzentrum 800 eine Rechenzentrum-Infrastrukturschicht 810, eine Framework-Schicht 820, eine Softwareschicht 830 und eine Anwendungsschicht 840.
  • In mindestens einer Ausführungsform kann, wie in 8 gezeigt, die Rechenzentrum-Infrastrukturschicht 810 einen Ressourcenorchestrator 812, gruppierte Rechenressourcen 814 und Knotenrechenressourcen („Knoten-C.R.“) 816(1)-816(N) umfassen, wobei „N“ eine positive ganze Zahl darstellt (die eine unterschiedliche ganze Zahl „N“ als die sein kann, die in anderen Figuren verwendet wird). In mindestens einer Ausführungsform können die Knoten-C.R.s 816(1)-816(N), sind jedoch nicht beschränkt auf, eine beliebige Anzahl von zentralen Verarbeitungseinheiten („CPUs“) oder anderen Prozessoren (einschließlich Beschleunigern, feldprogrammierbaren Gate-Arrays („FPGAs“), Graphikprozessoren usw.), Speichervorrichtungen, (z.B. dynamischer Nur-Lese-Speicher), Speicherungsvorrichtungen (z.B. Solid-State- oder Festplattenlaufwerke), Netzwerk-Eingabe/Ausgabe („NW E/A“)-Vorrichtungen, Netzwerkschalter, virtuelle Maschinen („VMs“), Leistungsmodule und Kühlmodule usw. umfassen. In mindestens einer Ausführungsform können ein oder mehrere Knoten-C.R.s aus den Knoten-C.R.s 816(1)-816(N) ein Server mit einer oder mehreren der oben erwähnten Rechenressourcen sein.
  • In mindestens einer Ausführungsform können gruppierte Rechenressourcen 814 separate Gruppierungen von Knoten-C.R.s. umfassen, die in einem oder mehreren Racks (nicht gezeigt) untergebracht sind, oder in vielen Racks, die in Rechenzentren an verschiedenen geographischen Standorten untergebracht sind (ebenfalls nicht gezeigt). Separate Gruppierungen von Knoten-C.R.s. innerhalb gruppierter Rechenressourcen 814 können gruppierte Rechen-, Netzwerk-, Speicher- oder Speicherungsressourcen umfassen, die konfiguriert oder zugeteilt sein können, um eine oder mehrere Arbeitslasten zu unterstützen. In mindestens einer Ausführungsform können mehrere Knoten-C.R.s einschließlich CPUs oder Prozessoren innerhalb eines oder mehrerer Racks gruppiert sein, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. In mindestens einer Ausführungsform können ein oder mehrere Racks ebenfalls eine beliebige Anzahl von Leistungsmodulen, Kühlmodulen und in beliebiger Kombination umfassen.
  • In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 eine oder mehrere Knoten-C.R.s 816(1)-816(N) und/oder gruppierte Rechenressourcen 814 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 eine Software-Design-Infrastruktur („SDI“)-Verwaltungseinheit für das Rechenzentrum 800 umfassen. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 812 Hardware, Software oder eine Kombination davon umfassen.
  • In mindestens einer Ausführungsform umfasst, wie in 8 gezeigt, die Framework-Schicht 820, ohne darauf beschränkt zu sein, einen Job-Planer 832, einen Konfigurationsverwalter 834, einen Ressourcenverwalter 836 und ein verteiltes Dateisystem 838. In mindestens einer Ausführungsform kann die Framework-Schicht 820 ein Framework zur Unterstützung der Software 852 der Softwareschicht 830 und/oder eine oder mehrere Anwendungen 842 der Anwendungsschicht 840 umfassen. In mindestens einer Ausführungsform kann(können) die Software 852 oder die Anwendung(en) 842 jeweils webbasierte Dienstsoftware oder Anwendungen umfassen, wie beispielsweise diejenigen, die von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. In mindestens einer Ausführungsform kann, ohne darauf beschränkt zu sein, die Framework-Schicht 820 eine Art von freien und quelloffene Software-Webanwendung-Framework wie beispielsweise Apache Spark™ (nachfolgend als „Spark“ bezeichnet) sein, welches das verteilte Dateisystem 838 für eine groß angelegte Datenverarbeitung (z.B. „big data“) nutzen kann. In mindestens einer Ausführungsform kann der Job-Planer 832 einen Spark-Treiber umfassen, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 800 unterstützt werden. In mindestens einer Ausführungsform kann der Konfigurationsverwalter 834 in der Lage sein, verschiedene Schichten, wie beispielsweise die Softwareschicht 830 und die Framework-Schicht 820 einschließlich Spark und des verteilten Dateisystems 838, zur Unterstützung der groß angelegten Datenverarbeitung zu konfigurieren. In mindestens einer Ausführungsform kann der Ressourcenverwalter 836 in der Lage sein, geclusterte oder gruppierte Rechenressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 838 und des Job-Planers 832 gemappt oder zugeteilt sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Rechenressourcen die gruppierte Rechenressource 814 auf der Rechenzentrum-Infrastrukturschicht 810 umfassen. In mindestens einer Ausführungsform kann sich der Ressourcenverwalter 836 mit dem Ressourcenorchestrator 812 koordinieren, um diese gemappten oder zugeteilten Rechenressourcen zu verwalten.
  • In mindestens einer Ausführungsform kann die in der Softwareschicht 830 enthaltene Software 852 Software, die von mindestens Teilen der Knoten-C.R.s 816(1)-816(N) verwendet wird, gruppierte Rechenressourcen 814 und/oder das verteilte Dateisystem 838 der Framework-Schicht 820 umfassen. Eine oder mehrere Arten von Software können, ohne darauf beschränkt zu sein, Internet-Webseiten-Suchsoftware, E-Mail-Virenscanner-Software, Datenbanksoftware und Streaming-Videoinhalt-Software umfassen.
  • In mindestens einer Ausführungsform kann(können) die in der Anwendungsschicht 840 enthaltene(n) Anwendung(en) 842 eine oder mehrere Arten von Anwendungen, die von mindestens Teilen der Knoten-C.R.s 816(1)-816(N) verwendet werden, gruppierte Rechenressourcen 814 und/oder das verteilte Dateisystem 838 der Framework-Schicht 820 umfassen. Mindestens eine oder mehreren Typen von Ausführungsformen können, ohne darauf beschränkt zu sein, CUDA-Anwendungen umfassen.
  • In mindestens einer Ausführungsform kann jeder der Konfigurationsmanager 834, der Ressourcenmanager 836 und der Ressourcenorchestrator 812 eine beliebige Anzahl und Art von selbstmodifizierenden Aktionen basierend auf einer beliebigen Menge und der Art von Daten, die in beliebig technisch machbarer Weise erfasst wurden, implementieren. In mindestens einer Ausführungsform können selbstmodifizierende Aktionen einen Betreiber des Rechenzentrums 800 davon befreien, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise ungenutzte und/oder schlecht funktionierende Abschnitte eines Rechenzentrums zu vermeiden.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • Computerbasierte Systeme
  • Die folgenden Figuren legen ohne Beschränkung beispielhafte computerbasierte Systeme dar, die verwendet werden können, um mindestens eine Ausführungsform zu implementieren.
  • 9 veranschaulicht ein Verarbeitungssystem 900 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das System 900 einen oder mehrere Prozessoren 902 und einen oder mehrere Graphikprozessoren 908 und kann ein Desktop-System mit einem einzelnen Prozessor, ein Multiprozessor-Workstation-System oder ein Serversystem mit einer großen Anzahl von Prozessoren 902 oder Prozessorkernen 907 sein. In mindestens einer Ausführungsform ist das System 900 eine Verarbeitungsplattform, die in eine System-on-a-Chip (SoC)-integrierte Schaltung zur Verwendung in mobilen, tragbaren oder eingebetteten Vorrichtungen integriert ist.
  • In mindestens einer Ausführungsform kann das System 900 eine Spielkonsole, einschließlich einer Spiel- und Medienkonsole, eine mobile Spielkonsole, eine tragbare Spielkonsole oder eine Online-Spielkonsole umfassen oder in diese innerhalb einer serverbasierten Spieleplattform integriert sein. In mindestens einer Ausführungsform ist das System 900 ein Mobiltelefon, ein Smartphone, ein Tablet-Computergerät oder ein mobiles Internetgerät. In mindestens einer Ausführungsform kann das Verarbeitungssystem 900 auch ein tragbares Gerät, wie beispielsweise ein tragbares Smart Watch-Gerät, ein intelligentes Brillengerät, ein Gerät für erweiterte Realität oder ein Gerät für virtuelle Realität umfassen, mit ihm koppeln oder in dieses integriert sein. In mindestens einer Ausführungsform ist das Verarbeitungssystem 900 ein Fernseh- oder Set-Top-Box-Gerät mit einem oder mehreren Prozessoren 902 und einer von einem oder mehreren Graphikprozessoren 908 erzeugten Graphikschnittstelle.
  • In mindestens einer Ausführungsform umfassen ein oder mehrere Prozessoren 902 jeweils einen oder mehrere Prozessorkerne 907 zum Verarbeiten von Anweisungen, die dann, wenn sie ausgeführt werden, Operationen für ein System- und Benutzersoftware ausführen. In mindestens einer Ausführungsform ist jeder eines oder mehrerer Prozessorkerne 907 konfiguriert, um eine bestimmte Befehlssequenz 909 zu verarbeiten. In mindestens einer Ausführungsform kann die Befehlssequenz 909 Complex Instruction Set Computing („CISC“), Reduced Instruction Set Computing („RISC“) oder das Rechnen über ein Very Long Instruction Word („VLIW“) erleichtern. In mindestens einer Ausführungsform können die Prozessorkerne 907 jeweils eine andere Befehlssequenz 909 verarbeiten, die Anweisungen zum Erleichtern der Emulation anderer Befehlssequenzen umfassen kann. In mindestens einer Ausführungsform kann der Prozessorkern 907 auch andere Verarbeitungsvorrichtungen, wie beispielsweise einen digitalen Signalprozessor („DSP“), umfassen.
  • In mindestens einer Ausführungsform umfasst der Prozessor 902 einen Cache-Speicher („Cache“) 904. In mindestens einer Ausführungsform kann der Prozessor 902 einen einzelnen internen Cache oder mehrere Ebenen internen Caches aufweisen. In mindestens einer Ausführungsform wird der Cache-Speicher von verschiedenen Komponenten des Prozessors 902 gemeinsam genutzt. In mindestens einer Ausführungsform verwendet der Prozessor 902 auch einen externen Cache (z.B. einen Level 3 („L3“)- Cache oder einen Last Level Cache („LLC“)) (nicht gezeigt), welcher unter Verwendung bekannter Cache-Kohärenztechniken von den Prozessorkernen 907 gemeinsam genutzt werden kann. In mindestens einer Ausführungsform ist die Registerdatei 906 zusätzlich in dem Prozessor 902 enthalten, welcher verschiedene Registertypen zum Speichern verschiedener Datentypen umfassen kann (z.B. ein Ganzzahlregister, ein Gleitkommaregister, ein Zustandsregister und ein Befehlszeigerregister). In mindestens einer Ausführungsform kann die Registerdatei 906 Universalregister oder andere Register umfassen.
  • In mindestens einer Ausführungsform sind ein oder mehrere Prozessor(en) 902 mit einem oder mehreren Schnittstellenbus(en) 910 gekoppelt, um Kommunikationssignale wie Adressen, Daten oder Steuersignale zwischen dem Prozessor 902 und anderen Komponenten in dem System 900 zu übertragen. In mindestens einer Ausführungsform kann, in einer Ausführungsform, ein Schnittstellenbus 910 ein Prozessorbus sein, wie beispielsweise eine Version eines Direct Media Interface („DMI“)-Busses. In mindestens einer Ausführungsform ist die Schnittstelle 910 nicht auf einen DMI-Bus beschränkt und kann einen oder mehrere Peripheral Connect Zwischenverbindung-Busse (z.B. „PCI“, PCI Express („PCIe“)), Speicherbusse oder andere Arten von Schnittstellenbussen umfassen. In mindestens einer Ausführungsform umfasst(en) der/die Prozessor(en) 902 einen integrierten Speichercontroller 916 und einen Plattform-Controller-Hub 930. In mindestens einer Ausführungsform erleichtert der Speichercontroller 916 die Kommunikation zwischen einer Speichervorrichtung und anderen Komponenten des Systems 900, während der Plattform-Controller-Hub („PCH“) 930 Verbindungen zu Eingabe/Ausgabe („E/A“)-Vorrichtungen über einen lokalen /A-Bus bereitstellt.
  • In mindestens einer Ausführungsform kann eine Speichervorrichtung 920 eine dynamische Direktzugriffspeicher („DRAM“)-Vorrichtung, eine statische Direktzugriffspeicher („SRAM“)-Vorrichtung, eine Flash-Speicher-Vorrichtung, eine Phasenänderungs-Speichervorrichtung oder irgendeine andere Speichervorrichtung mit geeigneter Leistung sein, um als Prozessspeicher zu dienen. In mindestens einer Ausführungsform kann die Speichervorrichtung 920 als Systemspeicher für das System 900 arbeiten, um Daten 922 und Anweisungen 921 zu speichern, die verwendet werden, wenn ein oder mehrere Prozessoren 902 eine Anwendung oder einen Prozess ausführen. In mindestens einer Ausführungsform koppelt die Speichercontroller 916 darüber hinaus mit einem optionalen externen Graphikprozessor 912, welcher mit einem oder mehreren Graphikprozessoren 908 in den Prozessoren 902 kommunizieren kann, um Graphik- und Medienoperationen durchzuführen. In mindestens einer Ausführungsform kann eine Anzeigevorrichtung 911 mit dem/den Prozessor(en) 902 verbinden. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 911 eine oder mehrere einer internen Anzeigevorrichtung umfassen, wie in einer mobilen elektronischen Vorrichtung oder einer Laptopvorrichtung oder einer externen Anzeigevorrichtung, die über eine Anzeigeschnittstelle (z.B. DisplayPort, usw.) angeschlossen ist. In mindestens einer Ausführungsform kann die Anzeigevorrichtung 911 eine kopfangebrachte Anzeige („HMD“) umfassen, wie beispielsweise eine stereoskopische Anzeigevorrichtung zur Verwendung in Virtual-Reality-Anwendungen („VR“) oder Augmented-Reality-Anwendungen („AR“).
  • In mindestens einer Ausführungsform ermöglicht der Plattform-Controller-Hub 930 Peripheriegeräten, sich mit der Speichervorrichtung 920 und dem Prozessor 902 über einen Hochgeschwindigkeits-E/A-Bus zu verbinden. In mindestens einer Ausführungsform umfassen E/A-Peripheriegeräte unter anderem, sind jedoch nicht beschränkt auf, einen Audio-Controller 946, einen Netzwerk-Controller 934, eine Firmware-Schnittstelle 921, einen drahtlosen Sender-Empfänger 926, Berührungssensoren 925, eine Datenspeichervorrichtung 924 (z.B. eine Festplatte, einen Flash-Speicher usw.). In mindestens einer Ausführungsform kann die Datenspeichervorrichtung 924 über eine Speicherschnittstelle (z.B. SATA) oder über einen Peripheriebus, wie beispielsweise einen Peripheral Component Zwischenverbindung Bus (z.B. PCI, PCI Express) verbinden. In mindestens einer Ausführungsform können die Berührungssensoren 925 Sensoren eines berührungsempfindlichen Bildschirms, Drucksensoren oder Fingerabdrucksensoren umfassen. In mindestens einer Ausführungsform kann der drahtlose Sender-Empfänger 926 ein Wi-Fi-Sender-Empfänger, ein Bluetooth-Sender-Empfänger oder ein Mobilfunk-Sender-Empfänger wie beispielsweise ein 3G-, 4G- oder Long Term Evolution („LTE“)-Transceiver sein. In mindestens einer Ausführungsform ermöglicht die Firmware-Schnittstelle 921 die Kommunikation mit der System-Firmware und kann beispielsweise eine vereinheitlichte erweiterbare Firmware-Schnittstelle („UEFI“) sein. In mindestens einer Ausführungsform kann der Netzwerk-Controller 934 eine Netzwerkverbindung zu einem verdrahteten Netzwerk aktivieren. In mindestens einer Ausführungsform koppelt einen Hochleistungs-Netzwerk-Controller (nicht gezeigt) mit dem Schnittstellenbus 910. In mindestens einer Ausführungsform ist der Audio-Controller 946 ein mehrkanaliger hochauflösenden Audio-Controller. In mindestens einer Ausführungsform umfasst das System 900 eine optionale Legacy-E/A-Steuereinrichtung 940 zum Koppeln von Legacy-Vorrichtungen (z.B. Personal System 2 („PS/2“)) mit dem System. In mindestens einer Ausführungsform kann der Plattform-Controller-Hub 930 auch mit einer oder mehreren Universal Serial Bus („USB“)-Controllern 942 verbinden, um Eingabegeräte wie beispielsweise Tastatur- und Maus-Kombinationen 943, eine Kamera 944 oder andere USB-Eingabegeräte zu verbinden.
  • In mindestens einer Ausführungsform kann eine Instanz des Speichercontroller 916 und des Plattform-Controller-Hub 930 in einem diskreten externen Graphikprozessor, wie beispielsweise den externen Graphikprozessor 912, integriert sein. In mindestens einer Ausführungsform können der Plattform-Controller-Hub 930 und/oder der Speichercontroller 916 extern zu einem oder mehreren Prozessoren 902 sein. Beispielsweise kann das System 900 in mindestens einer Ausführungsform einen externen Speichercontroller 916 und einen Plattform-Controller-Hub 930 umfassen, die als ein Speichercontroller-Hub und ein peripherer Controller-Hub innerhalb eines System-Chipsatzes, der mit dem bzw. den Prozessor(en) 902 in Verbindung steht, konfiguriert sein können.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 10 veranschaulicht ein Computersystem 1000 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann das Computersystem 1000 ein System mit miteinander verbundenen Vorrichtungen und Komponenten, ein SOC oder eine Kombination davon sein. In mindestens einer Ausführungsform ist das Computersystem 1000 mit einem Prozessor 1002 gebildet ist, der Ausführungseinheiten zum Ausführen einer Anweisung umfassen kann. In mindestens einer Ausführungsform kann das Computersystem 1000, ohne darauf beschränkt zu sein, eine Komponente umfassen, wie beispielsweise einen Prozessor 1002, um Ausführungseinheiten mit Logik zum Ausführen von Algorithmen für Prozessdaten in Übereinstimmung mit der vorliegenden Offenbarung, wie beispielsweise der hier beschriebenen Ausführungsformen, zu benutzen. In mindestens einer Ausführungsform kann das Computersystem 1000 Prozessoren, wie beispielsweise die PENTIUMO-Prozessorfamilie, Xeon™, Itanium®, XScale™ und/oder StrongARM™, Intel® Core™ oder Intel® Nervana™ Mikroprozessoren, umfassen, die von der Intel Corporation in Santa Clara, Kalifornien, erhältlich sind, obwohl auch andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, technische Arbeitsplatzrechner, Set-Top-Boxen und dergleichen) verwendet werden können. In mindestens einer Ausführungsform kann das Computersystem 1000 eine Version des Betriebssystems WINDOWS ausführen, das bei der Microsoft Corporation in Redmond, Washington, erhältlich ist, obwohl auch andere Betriebssysteme (z.B. UNIX und Linux), eingebettete Software und/oder graphische Benutzeroberflächen verwendet werden können.
  • In mindestens einer Ausführungsform kann das Computersystem 1000 in anderen Vorrichtungen wie beispielsweise Handheld-Vorrichtungen und Eingebettete-Anwendungen verwendet werden. Einige Beispiele für tragbare bzw. Handheld-Geräte umfassen Mobiltelefone, Internet-Protokoll-Geräte, Digitalkameras, persönliche digitale Assistenten („PDAs“) und Handheld-PCs. In mindestens einer Ausführungsform können eingebettete Anwendungen einen Mikrocontroller, einen digitalen Signalprozessor („DSP“), ein System auf einem Chip, Netzwerkcomputer („NetPCs“), Set-Top-Boxen, Netzwerk-Hubs, Wide Area Network („WAN“) Schalter oder jedes andere System umfassen, das eine oder mehrere Anweisungen ausführen kann, gemäß mindestens einer Ausführungsform.
  • In mindestens einer Ausführungsform kann das Computersystem 1000, ohne darauf beschränkt zu sein, den Prozessor 1002 umfassen, der, ohne darauf beschränkt zu sein, eine oder mehrere Ausführungseinheiten 1008 umfassen kann, die konfiguriert sein können, um ein Programm einer Compute Unified Device Architecture („CUDA“) (CUDA® wird von NVIDI Corporation, Santa Clara, CA, entwickelt) auszuführen. In mindestens einer Ausführungsform ist ein CUDA-Programm mindestens ein Abschnitt einer in einer CUDA-Programmiersprache geschriebenen Softwareanwendung. In mindestens einer Ausführungsform ist das Computersystem 1000 ein Einzelprozessor-Desktop- oder Serversystem. In mindestens einer Ausführungsform kann das Computersystem 1000 ein Multiprozessorsystem sein kann. In mindestens einer Ausführungsform kann der Prozessor 1002, ohne darauf beschränkt zu sein, einen CICS-Mikroprozessor, einen RISC-Mikroprozessor, einen VLW-Mikroprozessor, einen Prozessor, der eine Kombination von Befehlssätzen implementiert, oder jede andere Prozessorvorrichtung, wie beispielsweise einen digitalen Signalprozessor, umfassen. In mindestens einer Ausführungsform kann der Prozessor 1002 mit einem Prozessorbus 1010 gekoppelt sein, der Datensignale zwischen dem Prozessor 1002 und anderen Komponenten im Computersystem 1000 übertragen kann.
  • In mindestens einer Ausführungsform kann der Prozessor 1002, ohne darauf beschränkt zu sein, einen internen Level-1(„Ll“)-Cache-Speicher („Cache“) 1004 umfassen. In mindestens einer Ausführungsform kann der Prozessor 1002 einen einzelnen internen Cache oder mehrere Ebenen eines internen Caches aufweisen. In mindestens einer Ausführungsform kann sich der Cache-Speicher extern zu dem Prozessor 1002 befinden. Andere Ausführungsformen können je nach Implementierung und Bedarf auch eine Kombination aus internen und externen Caches umfassen. In mindestens einer Ausführungsform kann eine Registerdatei 1006 verschiedene Arten von Daten in verschiedenen Registern speichern, einschließlich, jedoch nicht beschränkt auf, Ganzzahlregister, Gleitkommaregister, Zustandsregister und einem Befehlszeigerregister.
  • In mindestens einer Ausführungsform befindet sich die Ausführungseinheit 1008, die, ohne darauf beschränkt zu sein, Logik zum Durchführen von Ganzzahl- und Gleitkommaoperationen umfasst, ebenfalls in dem Prozessor 1002. Der Prozessor 1002 kann auch einen Mikrocode(„ucode“)-Nur-Lese-Speicher („ROM“) umfassen, der einen Mikrocode für bestimmte Makrobefehle speichert. In mindestens einer Ausführungsform kann die Ausführungseinheit 1008 eine Logik zur Handhabung eines gepackten Befehlssatzes 1009 umfassen. In mindestens einer Ausführungsform können, indem der gepackte Befehlssatz 1009 in den Befehlssatz eines Universalprozessors aufgenommen wird, zusammen mit zugehörigen Schaltungen zur Ausführung von Anweisungen Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung von gepackten Daten in einem Universalprozessor 1002 durchgeführt werden. In einer oder mehreren Ausführungsformen können viele Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden, indem die volle Breite eines Datenbusses des Prozessors für die Ausführung von Operationen auf gepackten Daten verwendet wird, welches die Notwendigkeit eliminieren kann, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen jeweils Datenelement für Datenelement durchzuführen.
  • In mindestens einer Ausführungsform kann die Ausführungseinheit 1008 auch in Mikrocontrollern, eingebetteten Prozessoren, Graphikvorrichtungen, DSPs und anderen Arten von Logikschaltungen verwendet werden. In mindestens einer Ausführungsform kann das Computersystem 1000, ohne darauf beschränkt zu sein, einen Speicher 1020 umfassen. In mindestens einer Ausführungsform kann der Speicher 1020 als eine DRAM-Vorrichtung, eine SRAM-Vorrichtung, eine Flash-Speichervorrichtung oder eine andere Speichervorrichtung implementiert sein. Der Speicher 1020 kann eine oder mehrere Anweisungen 1019 und/oder Daten 1021 speichern, die durch Datensignale repräsentiert werden, die von dem Prozessor 1002 ausgeführt werden können.
  • In mindestens einer Ausführungsform kann ein Systemlogikchip mit dem Prozessorbus 1010 und dem Speicher 1020 gekoppelt sein. In mindestens einer Ausführungsform kann der Systemlogikchip, ohne darauf beschränkt zu sein, einen Speichercontroller-Hub („MCH“) 1016 umfassen, und der Prozessor 1002 kann über den Prozessorbus 1010 mit dem MCH 1016 kommunizieren. In mindestens einer Ausführungsform kann der MCH 1016 einen Speicherpfad 1018 mit hoher Bandbreite zu dem Speicher 1020 für Befehls- und Datenspeicherung sowie zur Speicherung von Graphikbefehlen, Daten und Texturen bereitstellen. In mindestens einer Ausführungsform kann der MCH 1016 Datensignale zwischen dem Prozessor 1002, dem Speicher 1020 und anderen Komponenten in dem Computersystem 1000 leiten und Datensignale zwischen dem Prozessorbus 1010, dem Speicher 1020 und einer System-E/A-Schnittstelle 1022 überbrücken. In mindestens einer Ausführungsform kann ein Systemlogikchip einen Graphikport zur Kopplung an einen Graphik-Controller bereitstellen. In mindestens einer Ausführungsform kann der MCH 1016 über einen Speicherpfad 1018 mit hoher Bandbreite mit dem Speicher 1020 gekoppelt sein, und eine Graphik-/Video-Karte 1018 kann über eine Accelerated Graphics Port („AGP“) Zwischenverbindung 1014 mit dem MCH 1016 gekoppelt sein.
  • In mindestens einer Ausführungsform kann das Computersystem 1000 die System-E/A-Schnittstelle 1022 als einen proprietärer Hub-Schnittstellenbus verwenden, um den MCH 1016 mit einem E/A-Controller-Hub („ICH“) 1030 zu verbinden. In mindestens einer Ausführungsform kann der ICH 1030 über einen lokalen E/A-Bus direkte Verbindungen zu einigen E/A-Vorrichtungen bereitstellen. In mindestens einer Ausführungsform kann ein lokaler E/A-Bus, ohne darauf beschränkt zu sein, einen Hochgeschwindigkeits-E/A-Bus zum Verbinden von Peripheriegeräten mit dem Speicher 1020, einem Chipsatz und dem Prozessor 1002 umfassen. Beispiele können, ohne darauf beschränkt zu sein, einen Audio-Controller 1029, einen Firmware-Hub („Flash-BIOS“) 1028, einen drahtlosen Transceiver 1026, eine Datenspeicherung 1024, einen Legacy-E/A-Controller 1023 mit Benutzereingabe und Tastaturschnittstellen, einen seriellen Erweiterungsport 1027, wie beispielsweise einen Universal Serial Bus („USB“) Port, und ein Netzwerk-Controller 1034 sein. In mindestens einer Ausführungsform kann die Datenspeicherung 1024 ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, eine Flash-Speicher-Vorrichtung oder eine andere Massenspeicherungsvorrichtung umfassen.
  • In mindestens einer Ausführungsform veranschaulicht 10 ein System, welches miteinander verbundene Hardware-Vorrichtungen oder „Chips“ umfasst, während in anderen Ausführungsformen 10 ein beispielhaftes SoC darstellen kann. In mindestens einer Ausführungsform können in 10 veranschaulichte Vorrichtungen mit proprietären Zwischenverbindungen, standardisierten Zwischenverbindungen (z.B. PCIe) oder einer Kombination derselben verbunden sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten des Computersystems 1000 unter Verwendung von Compute Express Link („CXL“)-Zwischenverbindungen verbunden.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 11 veranschaulicht ein System 1100 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist das System 1100 eine elektronische Vorrichtung, die einen Prozessor 1110 benutzt. In mindestens einer Ausführungsform kann das System 1100, beispielsweise und ohne darauf beschränkt zu sein, ein Notebook, ein Tower-Server, ein Rack-Server, ein Blade-Server, ein Laptop, ein Desktop, ein Tablett, eine mobile Vorrichtung, ein Telefon, ein eingebetteter Computer oder jede andere geeignete elektronische Vorrichtung sein.
  • In mindestens einer Ausführungsform kann das System 1100, ohne darauf beschränkt zu sein, den Prozessor 1110 umfassen, der kommunikativ mit einer beliebigen geeigneten Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Vorrichtungen gekoppelt ist. In mindestens einer Ausführungsform ist der Prozessor 1110 über einen Bus oder eine Schnittstelle, wie beispielsweise einen I2C-Bus, einen System Management Bus („SMBus“), einen Low Pin Count (LPC)-Bus, eine serielle Peripherieschnittstelle („SPI“), einen High Definition Audio („HDA“)-Bus, einen Serial Advance Technology Attachment („SATA“)-Bus, einen Universal Serial Bus („USB“) (Versionen 1, 2, 3 usw.) oder einen Universal Asynchronous Receiver/Transmitter („UART“)-Bus, gekoppelt. In mindestens einer Ausführungsform veranschaulicht 11 ein System, welches miteinander verbundene Hardware-Vorrichtungen oder „Chips“ umfasst. In mindestens einer Ausführungsform kann 11 ein beispielhaftes SoC darstellen. In mindestens einer Ausführungsform können in 11 veranschaulichte Vorrichtungen mit proprietären Verbindungen, standardisierten Zwischenverbindungen (z.B. PCIe) oder einer Kombination davon verbunden sein. In mindestens einer Ausführungsform sind eine oder mehrere Komponenten von 11 unter Verwendung von CXL-Zwischenverbindungen miteinander verbunden.
  • In mindestens einer Ausführungsform kann 11 eine Anzeige 1124, einen berührungsempfindlichen Bildschirm bzw. Touchscreen 1125, ein berührungsempfindliches Feld bzw. Touchpad 1130, eine Nahfeld-Kommunikationseinheit (Near Field Communications Unit; „NFC“) 1145, einen Sensor-Hub 1140, einen Thermosensor 1146, einen Express-Chipsatz („EC“) 1135, ein Trusted Platform Module („TPM“) 1138, BIOS/Firmware/Flash-Speicher („BIOS, FW-Flash“) 1122, einen DSP 1160, ein Laufwerk („SSD oder HDD“) 1112, wie beispielsweise eine Solid State Disk („SSD“) oder eine Festplatte („HDD“), eine Wireless Local Area Network Unit („WLAN“) 1150, eine Bluetooth-Einheit 1152, eine Wireless Wide Area Network Unit („WWAN“) 1156, eine Global Positioning System („GPS“) Einheit 1155, eine Kamera („USB 3.0 Camera“) 1154, wie beispielsweise eine USB 3.0-Kamera, oder eine Low Power Double Data Rate („LPDDR“)-Speichereinheit („LPDDR3“) 1115, die beispielsweise in einem LPDDR3-Standard implementiert ist, umfassen. Diese Komponenten können jeweils in beliebig geeigneter Art und Weise implementiert sein.
  • In mindestens einer Ausführungsform können andere Komponenten durch die hier beschriebenen Komponenten kommunikativ mit dem Prozessor 1110 gekoppelt sein. In mindestens einer Ausführungsform können ein Beschleunigungssensor 1141, ein Umgebungslichtsensor (Ambient Light Sensor; „ALS“) 1142, ein Kompass 1143 und ein Gyroskop 1144 kommunikativ mit dem Sensor-Hub 1140 gekoppelt sein. In mindestens einer Ausführungsform können ein Thermosensor 1139, ein Lüfter 1137, eine Tastatur 1146 und ein Touchpad 1130 kommunikativ mit dem EC 1135 gekoppelt sein. In mindestens einer Ausführungsform können ein Lautsprecher 1163, Kopfhörer 1164 und ein Mikrofon („mic“) 1165 kommunikativ mit einer Audioeinheit („Audio-Codec und Class D-Amp“) 1164 gekoppelt sein, die wiederum kommunikativ mit dem DSP 1160 gekoppelt sein kann. In mindestens einer Ausführungsform kann eine Audioeinheit 1164, beispielsweise und ohne darauf beschränkt zu sein, einen Audio-Codierer/Decodierer („Codec“) und einen Klasse-D-Verstärker umfassen. In mindestens einer Ausführungsform kann eine SIM-Karte („SIM“) 1157 kommunikativ mit der WWAN-Einheit 1156 gekoppelt sein. In mindestens einer Ausführungsform können Komponenten, wie beispielsweise eine WLAN-Einheit 1150 und eine Bluetooth-Einheit 1152 sowie auch eine WWAN-Einheit 1156 in einem Formfaktor der nächsten Generation (Next Generation Form Faktor; „NGFF“) implementiert sein.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 12 veranschaulicht eine beispielhafte integrierte Schaltung 1200 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die integrierte Schaltung 1200 ein SoC, die unter Verwendung einer oder mehrerer IP-Kerne hergestellt werden kann. In mindestens einer Ausführungsform umfasst die integrierte Schaltung 1200 einen oder mehrere Anwendungsprozessor(en) 1205 (z.B. CPUs), mindestens einen Graphikprozessor 1210 und kann zusätzlich einen Bildprozessor 1215 und/oder einen Videoprozessor 1220 umfassen, von welchen jeder ein modularer IP-Kern sein kann. In mindestens einer Ausführungsform umfasst die integrierte Schaltung 1200 Peripherie- oder Buslogik mit einem USB-Controller 1225, einem UART-Controller 1230, einem SPI/SDIO-Controller 1235 und einem I22S/I22C-Controller 1240. In mindestens einer Ausführungsform kann die integrierte Schaltung 1200 eine Anzeigevorrichtung 1245 umfassen, die mit einem oder mehreren eines High-Definition-Multimedia-Schnittstellen-(HDMI)-Controller 1250 und einer Anzeigeschnittstelle 1255 für ein Mobile Industry Processor Interface (MIPI) gekoppelt ist. In mindestens einer Ausführungsform kann eine Speicherung durch ein Flash-Speicher-Teilsystem 1260 einschließlich eines Flash-Speichers und eines Flash-Speichercontrollers bereitgestellt sein. In mindestens einer Ausführungsform kann eine Speicherschnittstelle über einen Speichercontroller 1265 für Zugriff auf SDRAM- oder SRAM-Speichervorrichtungen bereitgestellt sein. In mindestens einer Ausführungsform umfassen einige integrierte Schaltungen zusätzlich eine eingebettete Sicherheits-Maschine 1270.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 13 veranschaulicht ein Rechensystem 1300 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das Computersystem 1300 ein Verarbeitungsteilsystem 1301 mit einem oder mehreren Prozessor(en) 1302 und einem Systemspeicher 1304, der über einen Zwischenverbindungspfad kommuniziert, der einen Speicher-Hub 1305 umfassen kann. In mindestens einer Ausführungsform kann der Speicher-Hub 1305 eine separate Komponente innerhalb einer Chipsatz-Komponente sein oder kann in einem oder mehreren Prozessor(en) 1302 integriert sein. In mindestens einer Ausführungsform koppelt der Speicher-Hub 1305 über eine Kommunikationsverbindung 1306 mit einem E/A-Teilsystem 1311. In mindestens einer Ausführungsform umfasst das E/A-Teilsystem 1311 einen E/A-Hub 1307, der dem Computersystem 1300 ermöglichen kann, Eingaben von einer oder mehreren Eingabevorrichtung(en) 1308 zu empfangen. In mindestens einer Ausführungsform kann der E/A-Hub 1307 einem Anzeigen-Controller, der in einem oder mehreren Prozessor(en) 1302 umfasst sein kann, ermöglichen, Ausgaben an eine oder mehrere Anzeigevorrichtung(en) 1310A bereitzustellen. In mindestens einer Ausführungsform können eine oder mehrere mit dem E/A-Hub 1307 gekoppelte Anzeigevorrichtung(en) 1310A eine lokale, interne oder eingebettete Anzeigevorrichtung umfassen.
  • In mindestens einer Ausführungsform umfasst das Verarbeitungsteilsystem 1301 einen oder mehrere Parallelprozessor(en) 1312, die über einen Bus oder eine andere Kommunikationsverbindung 1313 mit dem Speicher-Hub 1305 gekoppelt sind. In mindestens einer Ausführungsform kann die Kommunikationsverbindung 1313 eine von einer beliebigen Anzahl von auf Standards basierenden Kommunikation-Verbindungstechnologien oder - Verbindungsprotokollen sein, wie beispielsweise, jedoch nicht beschränkt auf, PCIe, oder kann sie eine anbieterspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessor(en) 1312 ein rechnerisch fokussiertes Parallel- oder Vektor-Verarbeitungssystem, das eine große Anzahl von Verarbeitungskernen und/oder Verarbeitungsclustern, wie beispielsweise einen Prozessor mit vielen integrierten Kernen, umfassen kann. In mindestens einer Ausführungsform bilden ein oder mehrere Parallelprozessor(en) 1312 ein Graphikverarbeitungs-Teilsystem, das Pixel an eine oder mehrere Anzeigevorrichtung(en) 1310A ausgeben kann, die über den E/A-Hub 1307 gekoppelt sind. In mindestens einer Ausführungsform können ein oder mehrere Parallelprozessor(en) 1312 ebenfalls einen Anzeigecontroller und eine Anzeigeschnittstelle (nicht gezeigt) umfassen, um eine direkte Verbindung mit einer oder mehreren Anzeigevorrichtung(en) 1310B zu ermöglichen.
  • In mindestens einer Ausführungsform kann sich eine Systemspeichereinheit 1314 mit dem E/A-Hub 1307 verbinden, um einen Speicherungsmechanismus für das Computersystem 1300 bereitzustellen. In mindestens einer Ausführungsform kann ein E/A-Schalter 1316 verwendet werden, um einen Schnittstellenmechanismus bereitzustellen, um Verbindungen zwischen dem E/A-Hub 1307 und anderen Komponenten, wie beispielsweise einem Netzwerkadapter 1318 und/oder einem drahtlosen Netzwerkadapter 1319, der in die Plattform integriert sein kann, und verschiedenen anderen Vorrichtungen, die über eine oder mehrere Add-In-Vorrichtung(en) 1312 hinzugefügt sein können, zu ermöglichen. In mindestens einer Ausführungsform kann der Netzwerkadapter 1318 ein Ethernet-Adapter oder ein anderer verdrahteter Netzwerkadapter sein. In mindestens einer Ausführungsform kann der drahtlose Netzwerkadapter 1319 ein oder mehrere Wi-Fi, Bluetooth-, Nahfeldkommunikation(NFC)- oder andere Netzwerkvorrichtung umfassen, die ein oder mehrere drahtlose Funkeinrichtungen umfasst.
  • In mindestens einer Ausführungsform kann das Computersystem 1300 andere Komponenten umfassen, die nicht explizit gezeigt sind, einschließlich USB- oder andere Portverbindungen, optische Speicherlaufwerke, Videoaufnahmevorrichtungen und dergleichen, die auch mit dem E/A-Hub 1307 verbunden sein können. In mindestens einer Ausführungsform können Kommunikationspfade, die verschiedene Komponenten in 13 miteinander verbinden, unter Verwendung beliebiger geeigneter Protokolle, wie z. B. PCIbasierter Protokolle (z.B. PCIe), oder anderer Bus- oder Punktzu-Punkt-Kommunikationsschnittstellen und/oder - Protokolle(n), wie beispielsweise eine NV-Link-Hochgeschwindigkeitszwischenverbindung oder Zwischenverbindungsprotokolle, implementiert sein.
  • In mindestens einer Ausführungsform umfassen ein oder mehrere Parallelprozessor(en) 1312 für Graphik- und Videoverarbeitung optimierte Schaltungen, die beispielsweise Videoausgabeschaltungen umfassen und eine Graphikverarbeitungseinheit („GPU“) bilden. In mindestens einer Ausführungsform umfassen ein oder mehrere Parallelprozessor(en) 1312 Schaltungen, die zur Verarbeitung für allgemeine Zwecke optimiert sind. In mindestens einer Ausführungsform können Komponenten des Computersystems 1300 mit einem oder mehreren anderen Systemelementen auf einer einzigen integrierten Schaltung integriert sein. Beispielsweise können in mindestens einer Ausführungsform ein oder mehrere Parallelprozessor(en) 1312, der Speicher-Hub 1305, der bzw. die Prozessor(en) 1302 und der E/A-Hub 1307 in eine SoC-integrierte Schaltung integriert sein. In mindestens einer Ausführungsform können Komponenten des Computersystems 1300 in ein einziges Gehäuse integriert sein, um eine System-in-Package („SIP“)-Konfiguration zu bilden. In mindestens einer Ausführungsform kann mindestens ein Teil von Komponenten des Computersystems 1300 in ein Multi-Chip-Modul („MCM“) integriert sein, welches mit anderen Multi-Chip-Modulen zu einem modularen Computersystem verbunden sein kann. In mindestens einer Ausführungsform werden das Teilsystem und die Anzeigevorrichtungen 1310B von dem Rechensystem 1300 weggelassen.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • Verarbeitungssysteme
  • Die folgenden Figuren legen, ohne darauf beschränkt zu sein, beispielhafte Verarbeitungssysteme dar, die verwendet werden können, um mindestens eine Ausführungsform zu implementieren.
  • 14 veranschaulicht eine beschleunigte Verarbeitungseinheit („APU“) 1400 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird die APU 1400 von AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform kann die APU 1400 konfiguriert sein, um ein Anwendungsprogramm, wie beispielsweise ein CUDA-Programm, auszuführen. In mindestens einer Ausführungsform umfasst die APU 1400, ohne darauf beschränkt zu sein, einen Kernkomplex 1410, einen Graphikkomplex 1440, eine Fabric 1460, E/A-Schnittstellen 1470, einen Speichercontroller 1480, einen Anzeigecontroller 1492 und eine Multimediamaschine 1494. In mindestens einer Ausführungsform kann die APU 1400, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernkomplexen 1410, eine beliebige Anzahl von Graphikkomplexen 1450, eine beliebige Anzahl von Anzeigecontrollern 1492 und eine beliebige Anzahl von Multimediamaschinen 1494 in beliebiger Kombination umfassen. Für erläuternde Zwecke werden mehrere Instanzen von ähnlichen Objekten hier mit Bezugszeichen bezeichnet, die das Objekt kennzeichnen, und parenthetische Zahlen, welche die Instanz kennzeichnen, wo dies benötigt wird.
  • In mindestens einer Ausführungsform ist der Kernkomplex 1410 eine CPU, der Graphikkomplex 1440 eine GPU und die APU 1400 eine Verarbeitungseinheit, die, ohne darauf beschränkt zu sein, 1410 und 1440 auf einem einzigen Chip integriert. In mindestens einer Ausführungsform können einige Aufgaben dem Kernkomplex 1410 zugewiesen sein und andere Aufgaben können dem Graphikkomplex 1440 zugewiesen sein. In mindestens einer Ausführungsform ist der Kernkomplex 1410 konfiguriert, um eine Hauptsteuerungssoftware, die der APU 1400 zugeordnet ist, wie beispielsweise ein Betriebssystem, auszuführen. In mindestens einer Ausführungsform ist der Kernkomplex 1410 der Hauptprozessor der APU 1400, der Operationen von anderen Prozessoren steuert und koordiniert. In mindestens einer Ausführungsform gibt der Kernkomplex 1410 Befehle aus, die den Betrieb des Graphikkomplexes 1440 steuern. In mindestens einer Ausführungsform kann der Kernkomplex 1410 konfiguriert sein, um einen Host-ausführbaren Code auszuführen, der von dem CUDA-Quellencode abgeleitet ist, und Graphikkomplex 1440 kann konfiguriert sein, um einen Vorrichtung-ausführbaren Code auszuführen, der von dem CUDA-Quellencode abgeleitet ist.
  • In mindestens einer Ausführungsform umfasst der Kernkomplex 1410, ohne darauf beschränkt zu sein, Kerne 1420(1)-1420(4) und einen L3-Cache 1430. In mindestens einer Ausführungsform kann der Kernkomplex 1410, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernen 1420 und eine beliebige Anzahl und Art von Caches in einer beliebigen Kombination umfassen. In mindestens einer Ausführungsform sind die Kerne 1420 konfiguriert, um Anweisungen einer bestimmten Anweisungssatzarchitektur (Instruction Set Architecture; „ISA“) auszuführen. In mindestens einer Ausführungsform ist jeder Kern 1420 ein CPU-Kern.
  • In mindestens einer Ausführungsform umfasst jeder Kern 1420, ohne darauf beschränkt zu sein, eine Hol/Decodier-Einheit 1422, eine Ganzzahl-Ausführungsmaschine 1424, eine Gleitkomma-Ausführungsmaschine 1426 und einen L2-Cache 1428. In mindestens einer Ausführungsform holt die Hol/Decodier-Einheit 1422 Anweisungen, decodiert derartige Anweisungen, erzeugt Mikrooperationen und sendet separate Mikroanweisungen an die Ganzzahl-Ausführungsmaschine 1424 und die Gleitkomma-Ausführungsmaschine 1426. In mindestens einer Ausführungsform kann die Hol/Decodier-Einheit 1422 gleichzeitig eine Mikroanweisung an die Ganzzahl-Ausführungsmaschine 1424 und eine andere Mikroanweisung an die Gleitkomma-Ausführungsmaschine 1426 senden. In mindestens einer Ausführungsformführt führt die Ganzzahl-Ausführungsmaschine 1424, ohne darauf beschränkt zu sein, Ganzzahl- und Speicheroperationen aus. In mindestens einer Ausführungsform führt die Gleitkomma-Maschine 1426, ohne darauf beschränkt zu sein, Gleitkomma- und Vektoroperationen aus. In mindestens einer Ausführungsform sendet die Hol/Decodier-Einheit 1422 Mikroanweisungen an eine einzelne Ausführungsmaschine, die sowohl die Ganzzahl-Ausführungsmaschine 1424 als auch die Gleitkomma-Ausführungsmaschine 1426 ersetzt.
  • In mindestens einer Ausführungsform kann jeder Kern 1420(i), wobei i eine Ganzzahl ist, die eine bestimmte Instanz des Kerns 1420 darstellt, auf den L2-Cache 1428(i) zugreifen, der in dem Kern 1420(i) enthalten ist. In mindestens einer Ausführungsform ist jeder Kern 1420, der in dem Kernkomplex 1410(j) enthalten ist, wobei j eine Ganzzahl ist, die eine bestimmte Instanz des Kernkomplexes 1410 darstellt, mit anderen in dem Kernkomplex 1410(j) enthaltenen Kernen 1420 über den L3-Cache 1430(j) verbunden, der in dem Kernkomplex 1410(j) enthalten ist. In mindestens einer Ausführungsform können Kerne 1420, die in dem Kernkomplex 1410(j) enthalten sind, wobei j eine Ganzzahl ist, die eine bestimmte Instanz des Kernkomplexes 1410 darstellt, auf den gesamten L3-Cache 1430(j) zugreifen, der in dem Kernkomplex 1410(j) enthalten ist. In mindestens einer Ausführungsform kann der L3-Cache 1430, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Slices enthalten.
  • In mindestens einer Ausführungsform kann der Graphikkomplex 1440 konfiguriert sein, um Rechenoperationen auf eine hochparallele Art und Weise durchzuführen. In mindestens einer Ausführungsform ist der Graphikkomplex 1440 konfiguriert, um Graphik-Pipeline-Operationen auszuführen, wie beispielsweise Zeichenbefehle, Pixeloperationen, geometrische Berechnungen und andere Operationen, die dem Rendern eines Bildes auf einer Anzeige zugeordnet sind. In mindestens einer Ausführungsform ist der Graphikkomplex 1440 konfiguriert, um Operationen mit Bezug auf Graphik auszuführen. In mindestens einer Ausführungsform ist der Graphikkomplex 1440 konfiguriert, um sowohl Operationen mit Bezug auf Graphik als auch Operationen ohne Bezug auf Graphik auszuführen.
  • In mindestens einer Ausführungsform umfasst der Graphikkomplex 1440, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Recheneinheiten 1450 und einen L2-Cache 1442. In mindestens einer Ausführungsform nutzen die Recheneinheiten 1450 den L2-Cache 1442 gemeinsam. In mindestens einer Ausführungsform ist der L2-Cache 1442 partitioniert. In mindestens einer Ausführungsform umfasst der Graphikkomplex 1440, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Recheneinheiten 1450 und eine beliebige Anzahl (einschließlich null) und Art von Caches. In mindestens einer Ausführungsform umfasst der Graphikkomplex 1440, ohne darauf beschränkt zu sein, einer beliebigen Menge an fest zugeordneter Graphikhardware.
  • In mindestens einer Ausführungsform umfasst jede Recheneinheit 1450, ohne darauf beschränkt zu sein, eine beliebige Anzahl von SIMD-Einheiten 1452 und einen gemeinsam genutzten Speicher 1454. In mindestens einer Ausführungsform implementiert jede SIMD-Einheit 1452 eine SIMD-Architektur und ist konfiguriert, um Operationen parallel durchzuführen. In mindestens einer Ausführungsform kann jede Recheneinheit 1450 eine beliebige Anzahl von Thread-Blöcken ausführen, wobei jeder Thread-Block auf einer einzelnen Recheneinheit 1450 ausgeführt wird. In mindestens einer Ausführungsform umfasst ein Thread-Block, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Ausführungs-Threads. In mindestens einer Ausführungsform ist eine Arbeitsgruppe ein Thread-Block. In mindestens einer Ausführungsform führt jede SIMD-Einheit 1452 einen unterschiedlichen Warp aus. In mindestens einer Ausführungsform ist ein Warp eine Gruppe von Threads (z.B. 16 Threads), wobei jeder Thread in dem Warp zu einem einzelnen Thread-Block gehört und konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf einem einzigen Satz von Anweisungen zu verarbeiten. In mindestens einer Ausführungsform kann Prädikation verwendet werden, um einen oder mehrere Threads in einem Warp zu deaktivieren. In mindestens einer Ausführungsform ist eine Spur ein Thread. In mindestens einer Ausführungsform ist ein Arbeitselement ein Thread. In mindestens einer Ausführungsform ist ein Wellenfront ein Warp. In mindestens einer Ausführungsform können unterschiedliche Wellenfronten in einem Thread-Block zusammen synchronisieren und über den gemeinsam genutzten Speicher 1454 kommunizieren.
  • In mindestens einer Ausführungsform ist die Fabric 1460 eine Systemzwischenverbindung, die Daten- und Steuerübertragungen über den Kernkomplex 1410, den Graphikkomplex 1440, E/A-Schnittstellen 1470, den Speichercontroller 1480, den Anzeigecontroller 1492 und die Multimediamaschine 1494 erleichtert. In mindestens einer Ausführungsform kann die APU 1400, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Systemzwischenverbindung zusätzlich zu oder anstelle der Fabric 1460 umfassen, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtert, die intern oder extern zu der APU 1400 sein können. In mindestens einer Ausführungsform sind E/A-Schnittstellen 1470 für eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCI, PCI-Extended („PCI-X“), PCIe, Gigabit-Ethernet („GBE“), USB usw.) repräsentativ. In mindestens einer Ausführungsform sind verschiedene Arten von peripheren Vorrichtungen mit den E/A-Schnittstellen 1470 gekoppelt. In mindestens einer Ausführungsform können periphere Vorrichtungen, die mit den E/A-Schnittstellen 1470 gekoppelt sind, ohne darauf beschränkt zu sein, Tatstaturen, Mäuse, Drucker, Scanner, Joysticks oder andere Arten von Spielecontrollern, Medienaufnahmevorrichtungen, externe Speicherungsvorrichtungen, Netzwerkschnittstellenkarten und so weiter umfassen.
  • In mindestens einer Ausführungsform zeigt der Anzeigecontroller AMD92 Bilder auf einer oder mehreren Anzeigevorrichtungen an, wie beispielsweise einer Vorrichtung einer Flüssigkristallanzeige (Liquid Crystal Display; „LCD“). In mindestens einer Ausführungsform umfasst die Multimediamaschine 240, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Schaltungen, die in Zusammenhang mit Multimedia stehen, wie beispielsweise einen Videodecodierer, einen Videocodierer, einen Bildsignalprozessor usw. In mindestens einer Ausführungsform erleichtert der Speichercontroller 1480 Datenübertragungen zwischen der APU 1400 und einem vereinheitlichten Systemspeicher 1490. In mindestens einer Ausführungsform nutzen der Kernkomplex 1410 und der Graphikkomplex 1440 den vereinheitlichten Systemspeicher 1490 gemeinsam.
  • In mindestens einer Ausführungsform implementiert die APU 1400 ein Speichersubsystem, das, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Speichercontrollern 1480 und Speichervorrichtungen (z.B. gemeinsam genutzten Speicher 1454) umfasst, die einer Komponente fest zugeordnet sein oder unter mehreren Komponenten gemeinsam genutzt werden können. In mindestens einer Ausführungsform implementiert die APU 1400 ein Cache-Subsystem, das, ohne darauf beschränkt zu sein, eine oder mehrere Cache-Speicher (z.B. L2-Caches 1528, L3-Cache 1430 und L2-Cache 1442) umfasst, die jeweils privat zu einer beliebigen Anzahl von Komponenten sein können oder zwischen diesen gemeinsam genutzt werden können (z.B. Kerne 1420, den Kernkomplex 1410, SIMD-Einheiten 1452, Recheneinheiten 1450 und den Graphikkomplex 1440).
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 15 veranschaulicht eine CPU 1500 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird die CPU 1500 von der AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform kann die CPU 1500 konfiguriert sein, um ein Anwendungsprogramm auszuführen. In mindestens einer Ausführungsform ist die CPU 1500 konfiguriert, um Hauptsteuersoftware, wie beispielsweise ein Betriebssystem, auszuführen. In mindestens einer Ausführungsform gibt die CPU 1500 Befehle aus, die den Betrieb einer externen GPU (nicht gezeigt) steuern. In mindestens einer Ausführungsform kann die CPU 1500 konfiguriert sein, um einen Host-ausführbaren Code auszuführen, der von dem CUDA-Quellencode abgeleitet ist, und eine externe GPU kann konfiguriert sein, um einen Vorrichtung-ausführbaren Code auszuführen, der von einem derartigen CUDA-Quellencode abgeleitet ist. In mindestens einer Ausführungsform umfasst die CPU 1500, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernkomplexen 1510, eine Fabric 1560, E/A-Schnittstellen 1570 und Speichercontroller 1580.
  • In mindestens einer Ausführungsform umfasst der Kernkomplex 1510, ohne darauf beschränkt zu sein, Kerne 1520(1)-1520(4) und einen L3-Cache 1530. In mindestens einer Ausführungsform kann der Kernkomplex 1510, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Kernen 1520 und eine beliebige Anzahl und Art von Caches in beliebiger Kombination umfassen. In mindestens einer Ausführungsform sind Kerne 1520 konfiguriert, um Anweisungen einer bestimmten ISA auszuführen. In mindestens einer Ausführungsform ist jeder Kern 1520 ein CPU-Kern.
  • In mindestens einer Ausführungsform umfasst jeder Kern 1520, ohne darauf beschränkt zu sein, eine Hol/Decodier-Einheit 1522, eine Ganzzahl-Ausführungsmaschine 1524, eine Gleitkomma-Ausführungsmaschine 1526 und einen L2-Cache 1528. In mindestens einer Ausführungsform holt die Hol/Decodier-Einheit 1522 Anweisungen, decodiert derartige Anweisungen, erzeugt Mikrooperationen und sendet separate Mikroanweisungen an die Ganzzahl-Ausführungsmaschine 1524 und die Gleitkomma-Ausführungsmaschine 1526. In mindestens einer Ausführungsform kann die Hol/Decodier-Einheit 1522 gleichzeitig eine Mikroanweisung an die Ganzzahl-Ausführungsmaschine 1524 und eine andere Mikroanweisung an die Gleitkomma-Ausführungsmaschine 1526 senden. In mindestens einer Ausführungsform führt die Ganzzahl-Ausführungsmaschine 1524, ohne darauf beschränkt zu sein, Ganzzahl- und Speicheroperationen aus. In mindestens einer Ausführungsform führt die Gleitkomma-Maschine 1526, ohne darauf beschränkt zu sein, Gleitkomma- und Vektoroperationen aus. In mindestens einer Ausführungsform sendet die Hol/Decodier-Einheit 1522 Mikroanweisungen an eine einzige Ausführungsmaschine, die sowohl die Ganzzahl-Ausführungsmaschine 1524 als auch die Gleitkomma-Ausführungsmaschine 1526 ersetzt.
  • In mindestens einer Ausführungsform kann jeder Kern 1520(i), wobei i eine Ganzzahl ist, die eine bestimmte Instanz des Kerns 1520 darstellt, auf den L2-Cache 1528(i) zugreifen, der in dem Kern 1520(i) enthalten ist. In mindestens einer Ausführungsform ist jeder Kern 1520, der in dem Kernkomplex 1510(j) enthalten ist, wobei j ist eine Ganzzahl ist, die eine bestimmte Instanz von Kernkomplex 1510 darstellt, mit anderen Kernen 1520 in dem Kernkomplex 1510(j) über den in dem Kernkomplex 1510(j) enthaltenen L3-Cache 1530(j) verbunden. In mindestens einer Ausführungsform können die Kerne 1520, die in dem Kernkomplex 1510(j) enthalten sind, wobei j ein Ganzzahl ist, die eine bestimmte Instanz von Kernkomplex 1510 darstellt, auf den gesamten L3-Cache 1530(j) zugreifen, der in dem Kernkomplex 1510(j) enthalten ist. In mindestens einer Ausführungsform kann der L3-Cache 1530, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Abschnitten bzw. Slices umfassen.
  • In mindestens einer Ausführungsform ist die Fabric 1560 eine Systemzwischenverbindung, die Daten- und Steuerübertragungen über Kernkomplexe 1510(1)-1510(N) (wobei N ein Ganzzahl größer als Null ist), E/A-Schnittstellen 1570 und Speichercontrollern 1580 erleichtert. In mindestens einer Ausführungsform kann die CPU 1500 umfassen, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Systemzwischenverbindungen zusätzlich zu oder anstelle der Fabric 1560, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtern kann, die intern oder extern zu der CPU 1500 sein können. In mindestens einer Ausführungsform sind E/A-Schnittstellen 1570 für eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCI, PCI-X, PCIe, GBE, USB usw.) repräsentativ. In mindestens einer Ausführungsform sind verschiedene Arten von peripheren Vorrichtungen mit den E/A-Schnittstellen 1570 gekoppelt. In mindestens einer Ausführungsform können periphere Vorrichtungen, die mit den E/A-Schnittstellen 1570 gekoppelt sind, ohne darauf beschränkt zu sein, Anzeigen, Tatstaturen, Mäuse, Drucker, Scanner, Joysticks oder andere Arten von Spielecontrollern, Medienaufnahmevorrichtungen, externe Speicherungsvorrichtungen, Netzwerkschnittstellenkarten und so weiter umfassen.
  • In mindestens einer Ausführungsform erleichtert der Speichercontroller 1580 Datenübertragungen zwischen der CPU 1500 und einem Systemspeicher 1590. In mindestens einer Ausführungsform nutzen der Kernkomplex 1510 und der Graphikkomplex 1540 den Systemspeicher 1590 gemeinsam. In mindestens einer Ausführungsform implementiert die CPU 1500 ein Speichersubsystem, das umfasst, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Speichercontrollern 1580 und Speichervorrichtungen, die einer Komponente fest zugeordnet sind oder unter mehreren Komponenten gemeinsam genutzt werden. In mindestens einer Ausführungsform implementiert die CPU 1500 ein Cache-Subsystem, das umfasst, ohne darauf beschränkt zu sein, einen oder mehrere Cache-Speicher (z.B. L2-Caches 1528 und L3-Caches 1530), die jeweils private sein oder zwischen einer beliebigen Anzahl von Komponenten (z.B. Kernen 1520 und Kernkomplexen 1510) gemeinsam genutzt werden können.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 16 veranschaulicht einen beispielhaften Beschleunigungsintegration-Slice 1690 gemäß mindestens einer Ausführungsform. Wie hier verwendet, umfasst ein „Slice“ einen spezifizierten Abschnitt von Verarbeitungsressourcen einer Beschleunigungsintegrationsschaltung. In mindestens einer Ausführungsform stellt die Beschleunigungsintegrationsschaltung Cache-Verwaltung, Speicherzugriff, Kontextverwaltung und Interrupt-Verwaltungsdienste im Auftrag mehrerer Graphik-Verarbeitungsmaschinen bereit, die in einem GraphikBeschleunigungsmodul enthalten sind. Die Graphik-Verarbeitungsmaschinen können jeweils eine separate GPU umfassen. Alternativ können die Graphik-Verarbeitungsmaschinen unterschiedlichen Arten von Graphik-Verarbeitungsmaschinen innerhalb einer GPU umfassen, wie beispielsweise Graphikausführungseinheiten, Medienverarbeitungsmaschinen (z.B. Video-Codierer/Decodierer), Abtaster und Blit-Maschinen. In mindestens einer Ausführungsform kann das GraphikBeschleunigungsmodul eine GPU mit mehreren Graphik-Verarbeitungsmaschinen sein. In mindestens einer Ausführungsform können die Graphik-Verarbeitungsmaschinen einzelne GPUs sein, die auf einem gemeinsamen Gehäuse, einer gemeinsamen Leitungskarte oder einem gemeinsamen Chip integriert sind.
  • Ein Anwendung-wirksamer Adressraum 1682 innerhalb des Systemspeichers 1614 speichert Prozesselemente 1683. In einer Ausführungsform werden die Prozesselemente 1683 sind gespeicherten als Reaktion auf GPU-Aufrufe 1681 von Anwendungen 1680 gespeichert, die auf dem Prozessor 1607 ausgeführt werden.
  • Ein Prozesselement 1683 enthält den Prozesszustand für die entsprechende Anwendung 1680. Ein Arbeitsdeskriptor (Work Descriptor; „WD“) 1684, der in dem Prozesselement 1683 enthalten ist, kann ein einzelner Job sein, der von einer Anwendung angefordert wird, oder kann einen Zeiger auf eine Warteschlange von Jobs enthalten. In mindestens einer Ausführungsform ist der WD 1684 ein Zeiger auf eine Jobanforderungs-Warteschlange in dem Anwendung-wirksamen Adressraum 1682.
  • Ein Graphikbeschleunigungsmodul 1646 und/oder einzelne Graphikverarbeitungs-Maschinen können von allen oder einer Teilmenge von Prozessen in einem System gemeinsam genutzt werden. In mindestens einer Ausführungsform kann eine Infrastruktur zum Einrichten des Prozesszustands und zum Senden eines WD 1684 an ein Graphikbeschleunigungsmodul 1646 zum Starten eines Auftrags in einer virtualisierten Umgebung enthalten sein.
  • In mindestens einer Ausführungsform ist ein fest zugeordnetes Prozessprogrammierungsmodell implementierungsspezifisch. In diesem Modell besitzt ein einzelner Prozess das Graphikbeschleunigungsmodul 1646 oder eine einzelne Graphikverarbeitungs-Maschine. Weil das Graphikbeschleunigungsmodul 1646 einem einzelnen Prozess gehört, initialisiert ein Hypervisor eine Beschleunigerintegrationsschaltung für eine besitzende Partition und ein Betriebssystem initialisiert eine Beschleunigerintegrationsschaltung für einen besitzenden Prozess, wenn das Graphikbeschleunigungsmodul 1646 zugewiesen ist.
  • In mindestens einer Ausführungsform holt im Betrieb eine WD-Holeinheit 1691 in dem Beschleunigerintegrations-Slice 1690 als nächstes den nächsten WD 1684, welcher eine Angabe der von einer oder mehreren Graphikverarbeitungs-Maschinen des Graphikbeschleunigungsmoduls 1646 zu verrichtenden Arbeiten umfasst. Daten aus dem WD 1684 können in Registern 1645 gespeichert und von einer Speicherverwaltungseinheit (Memory Management Unit; „MMU“) 1639, der Unterbrechungsverwaltungsschaltung 1647 und/oder der Kontextverwaltungsschaltung 1648, wie veranschaulicht, verwendet werden. Eine Ausführungsform der MMU 1639 beinhaltet beispielsweise eine Segment-/Seiten-Durchlauf-Schaltungsanordnung zum Zugreifen auf Segment-/Seitentabellen 1686 innerhalb eines virtuellen Adressraums 1685 des Betriebssystems (OS). Die Unterbrechungsverwaltungsschaltung 1647 Unterbrechungsereignisse („INT“) 1692 verarbeiten, die von dem Graphikbeschleunigungsmodul 1646 empfangen werden. Wenn Graphikoperationen durchgeführt werden, wird eine von einer Graphikverarbeitungs-Maschine erzeugte effektive Adresse 1693 von der MMU 1639 in eine reale Adresse übersetzt.
  • In einer Ausführungsform wird ein und derselbe Satz von Registern 1645 für jede Graphikverarbeitungs-Maschine und/oder Graphikbeschleunigungs-Modul 1646 dupliziert und kann von einem Hypervisor oder Betriebssystem initialisiert werden. Jedes dieser duplizierten Register kann in einem Beschleunigerintegrations-Slice 1690 umfasst sein. Beispielhafte Register, die von einem Hypervisor initialisiert werden können, werden in Tabelle 1 gezeigt. Tabelle 1 - Hypervisor-initialisierte Register
    1 Slice-Steuerregister
    2 Zeiger auf reale Adresse (RA) des Bereichs geplanter Prozesse
    3 Register für die Übersteuerung von Berechtigungsmasken
    4 Versatz des Unterbrechungsvektortabelleneintrag
    5 Grenze Unterbrechungsvektortabelleneintrag
    6 Zustandsregister
    7 ID der logischen Partition
    8 Zeiger auf reale Adresse (RA) des Hypervisor-Beschleunigerauslastungseintrags
    9 Speicherbeschreibungsregister
  • Beispielhafte Register, die von einem Betriebssystem initialisiert werden können, werden in Tabelle 2 gezeigt. Tabelle 2 - Betriebssystem-initialisierte Register
    1 Prozess- und Thread-Identifikation
    2 Zeiger auf effektive Adresse (EA) des Kontext-Sichern/Wiederherstellens
    3 Zeiger auf virtuelle Adresse (VA) des Beschleunigerauslastungseintrags
    4 Zeiger auf virtuelle Adresse (VA) der Speichersegmenttabelle
    5 Berechtigungsmaske
    6 Arbeitsdeskriptor
  • In mindestens einer Ausführungsform ist jeder WD 1684 spezifisch für ein bestimmtes Graphikbeschleunigungsmodul 1646 und/oder einer bestimmten Graphikverarbeitungs-Maschine. Sie enthält alle Informationen, die von einer Graphikverarbeitungs-Maschine zum Verrichten von Arbeit benötigt werden, oder sie kann ein Zeiger auf einen Speicherort sein, bei dem eine Anwendung eine Befehlswarteschlange für abzuschließende Arbeiten eingerichtet hat.
  • 17A und 17B veranschaulichen beispielhafte Graphikprozessoren gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann ein beliebiger der beispielhaften Graphikprozessoren unter Verwendung eines oder mehrerer IP-Kerne hergestellt werden. Zusätzlich zu dem, was veranschaulicht ist, können andere Logik und Schaltungen in mindestens einer Ausführungsform enthalten sein, einschließlich zusätzlicher Graphikprozessoren/Kerne, peripherer Schnittstellencontroller oder Allweckprozessorkerne. In mindestens einer Ausführungsform sind die beispielhaften Graphikprozessoren zur Verwendung innerhalb eines SoC.
  • 17A veranschaulicht einen beispielhaften Graphikprozessor 1710 eines Systems auf einer integrierten Chip-Schaltung, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß mindestens einer Ausführungsform. 17B veranschaulicht einen zusätzlichen beispielhaften Graphikprozessor 1740 eines Systems auf einer integrierten Chip-Schaltung, der unter Verwendung eines oder mehrerer IP-Kerne hergestellt sein kann, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Graphikprozessor 1710 von 17A ein Graphikprozessorkern mit niedrigem Stromverbrauch. In mindestens einer Ausführungsform ist der Graphikprozessor 1740 von 17B ein leistungsfähigerer Graphikprozessorkern. In mindestens einer Ausführungsform kann jeder der Graphikprozessoren 1710, 1740 Varianten des Graphikprozessors 1910 von 12 sein.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 1710 einen Vertex-Prozessor 1705 und einen oder mehrere Fragment-Prozessor(en) 1715A-1715N (z.B. 1715A, 1715B, 1715C, 1715D bis 1715N-1 und 1715N). In mindestens einer Ausführungsform kann der Graphikprozessor 1710 verschiedene Shader-Programme über eine separate Logik ausführen, so dass der Vertex-Prozessor 1705 für die Ausführung von Operationen für Vertex-Shader-Programme optimiert ist, während ein oder mehrere Fragment-Prozessoren 1715A-1715N Fragment (beispielsweise Pixel)-Shading-Operationen für Fragment- oder Pixel-Shader-Programme ausführen. In mindestens einer Ausführungsform führt der Vertex-Prozessor 1705 eine Vertex-Verarbeitungsphase einer 3D-Graphikpipeline durch und erzeugt Primitive und Vertex-Daten. In mindestens einer Ausführungsform verwenden der(die) Fragment-Prozessor(en) 1715A-1715N Primitive- und Vertex-Daten, die von dem Vertex-Prozessor 1705 erzeugt wurden, um einen Frame- bzw. Einzelbildpuffer zu erzeugen, der auf einer Anzeigevorrichtung angezeigt wird. In mindestens einer Ausführungsform sind der bzw. die Fragment-Prozessor(en) 1715A-1715N optimiert, um Fragment-Shader-Programme auszuführen, wie sie in einer OpenGL-API vorgesehen sind, welche verwendet werden können, um ähnliche Operationen wie ein Pixel-Shader-Programm durchzuführen, wie sie in einer Direct 3D-API vorgesehen sind.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 1710 zusätzlich eine oder mehrere Speicherverwaltungseinheiten (MMUs) 1717A-1717B, Cache(s) 1725A-1725B und Schaltungszwischenverbindung(en) 1730A-1730B. In mindestens einer Ausführungsform stellen eine oder mehrere MMU(s) 1720A-1720B ein Adressmapping von virtuell nach physikalisch für den Graphikprozessor 1710 bereit, einschließlich des Vertex-Prozessors 1705 und/oder des/der Fragment-Prozessoren 1715A-1715N, die auf Vertex- oder Bild-/Texturdaten Bezug nehmen können, die im Speicher gespeichert sind, zusätzlich zu Vertex- oder Bild-/Textur-Daten, die in einem oder mehreren Cache(s) 1725A-1725B gespeichert sind. In mindestens einer Ausführungsform können eine oder mehrere MMU(s) 1720A-1720B mit anderen MMU(s) innerhalb des Systems synchronisiert werden, einschließlich einer oder mehrerer MMU(s), die einem oder mehreren Anwendungsprozessor(en) 1205, Bildprozessoren 1215 und/oder Videoprozessoren 1214 von 12 zugeordnet sind, so dass jeder Prozessor 1205-1214 an einem gemeinsam genutzten oder vereinigten virtuellen Speichersystem partizipieren kann. In mindestens einer Ausführungsform ermöglichen eine oder mehrere Schaltungs-Zwischenverbindung(en) 1730A-1730B dem Graphikprozessor 1710, sich mit anderen IP-Kernen innerhalb des SoC entweder über einen internen Bus des SoC oder über eine direkte Verbindung schnittstellenmäßig zu verbinden.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 1740 eine oder mehrere MMU(s) 1720A-1720B, Caches 1725A-1725B und Schaltungs-Zwischenverbindungen 1730A-1730B des Graphikprozessors 1710 von 17A. In mindestens einer Ausführungsform umfasst der Graphikprozessor 1740 einen oder mehrere Shader-Kerne 1755A-1755N (z.B. 1755A, 1755B, 1755C, 1755D, 1755E, 1755F bis 1755N-1 und 1755N), welche eine vereinheitlichte Shader-Kern-Architektur bereitstellen, in welcher ein einzelner Kern oder Typ oder Kern alle Arten von programmierbarem Shader-Code ausführen kann, einschließlich Shader-Programmcode zur Implementierung von Vertex-Shadern, Fragment-Shadern und/oder Rechen-Shadern. In mindestens einer Ausführungsform kann eine Anzahl von Shader-Kernen variieren. In mindestens einer Ausführungsform umfasst der Graphikprozessor 1740 einen Inter-Core-Task-Manager 1745, der als ein Thread-Dispatcher fungiert, um Ausführung-Threads an einen oder mehrere Shader-Kerne 1755A-1755N zu senden, und eine Kachelungs-Einheit 1758, um Kachelungs-Operationen für kachelbasiertes Rendering zu beschleunigen, bei welchen Rendering-Operationen für eine Szene im Bildraum unterteilt sind, um beispielsweise lokale räumliche Kohärenz innerhalb einer Szene auszunutzen oder die Nutzung interner Caches zu optimieren.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 18A veranschaulicht einen Graphikkern 1800 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Graphikkern innerhalb des Graphikprozessors 1210 von 12 enthalten sein. In mindestens einer Ausführungsform umfasst der Graphikkern 1800 einen gemeinsam genutzten Anweisungs-Cache 1802, eine Textureinheit 1818 und einen Cache/gemeinsam genutzten Speicher 18, die für Ausführungsressourcen innerhalb des Graphikkerns 1800 gemeinsam sind. In mindestens einer Ausführungsform kann der Graphikkern 1800 mehrere Slices 1801A-1801N oder Partitionen für jeden Kern umfassen und ein Graphikprozessor kann mehrere Instanzen des Graphikkerns 1800 umfassen. In mindestens einer Ausführungsform können die Slices 1801A-1801N eine Unterstützungslogik umfassen, die einen lokalen Anweisungs-Cache 1804A-1804N, einen Thread-Planer 1806A-1806N, einen Thread-Dispatcher 1808A-1808N und einen Satz von Registern 1810A-1810N umfasst. In mindestens einer Ausführungsform können die Slices 1801A-1801N einen Satz zusätzlicher Funktionseinheiten (AFUs 1814A-1814N), Gleitkommaeinheiten (FPU 1814A-1814N), Ganzzahl-Rechenlogikeinheiten (ALUs 1816A-1816N), Adressberechnungseinheiten (ACU 1813A-1813N), doppelt genaue Gleitkommaeinheiten (DPFPU 1815A-1815N) und Matrixverarbeitungseinheiten (MPU 1817A-1817N) umfassen.
  • In mindestens einer Ausführungsform können FPUs 1814A-1814N einfach genaue (32-Bit) und halb genaue (16-Bit) Gleitkomma-Operationen durchführen, während DPFPUs 1815A-1815N doppelt genaue (64-Bit) Gleitkomma-Operationen durchführen. In mindestens einer Ausführungsform können ALUs 1816A-1816N Ganzzahl-Operationen mit variabler Genauigkeit mit 8-Bit-, 16-Bit- und 32-Bit-Genauigkeit durchführen und für Operationen mit gemischter Genauigkeit konfiguriert sein. In mindestens einer Ausführungsform können die MPUs 1817A-1817N auch für Matrix-Operationen mit gemischter Genauigkeit konfiguriert sein, die halb genaue Gleitkomma- und 8-Bit Ganzzahl-Operationen umfassen. In mindestens einer Ausführungsform können die MPUs 1817-1817N ebenfalls eine Vielzahl von Matrix-Operationen durchführen, um CUDA-Programme zu beschleunigen, die das Ermöglichen der Unterstützung für beschleunigte allgemeine bzw. generelle Matrix-zu-Matrix Multiplikation („GEMM“) umfassen können. In mindestens einer Ausführungsform können die AFUs 1812A-1812N zusätzliche logische Operationen durchführen, die nicht von Gleitkomma- oder Integer-Einheiten unterstützt werden, die trigonometrische Operationen (z.B. Sinus, Cosinus usw.) umfassen.
  • 18B veranschaulicht eine Allzweck-Verarbeitungseinheit (GPGPU) 1830, die konfiguriert sein kann, um hochparallele Rechenoperationen zu ermöglichen, die von einer Anordnung von Graphikverarbeitungseinheiten durchzuführen sind, in mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann die GPGPU 1830 direkt mit anderen Instanzen der GPGPU 1830 verknüpft sein, um einen Multi-GPU-Cluster zu erzeugen, um die Ausführungszeit für CUDA-Pogramme zu verbessern. In mindestens einer Ausführungsform umfasst die GPGPU 1830 eine Host-Schnittstelle 1832, um eine Verbindung mit einem Host-Prozessor zu ermöglichen. In mindestens einer Ausführungsform ist die Host-Schnittstelle 1832 eine PCI-Express-Schnittstelle. In mindestens einer Ausführungsform kann die Host-Schnittstelle 1832 eine herstellerspezifische Kommunikationsschnittstelle oder Kommunikationsstruktur sein. In mindestens einer Ausführungsform empfängt die GPGPU 1830 Befehle von einem Host-Prozessor und verwendet einen globalen Planer 1834, um die diesen Befehlen zugeordneten Ausführung-Threads an einen Satz von Rechenclustern 1836A-1836H zu verteilen. In mindestens einer Ausführungsform nutzen die Rechencluster 1836A-1836H einen Cache-Speicher 1838 gemeinsam. In mindestens einer Ausführungsform kann der Cache-Speicher 1838 als ein übergeordneter Cache für Cache-Speicher innerhalb der Rechencluster 1836A-1836H dienen.
  • In mindestens einer Ausführungsform umfasst die GPGPU 1830 Speicher 1844A-1844B, die mit den Rechenclustern 1836A-1836H über einen Satz von Speichercontrollern 1842A-1842B gekoppelt sind. In mindestens einer Ausführungsform können die Speicher 1844A-1844B verschiedene Arten von Speichervorrichtungen umfassen, einschließlich eines dynamischen Direktzugriffsspeichers (DRAM) oder eines Graphik-Direktzugriffspeichers, wie beispielsweise einen synchronen Graphik-Direktzugriffspeicher („SGRAM“), der einen Graphikspeicher mit doppelter Datenrate („GDDR“) umfasst.
  • In mindestens einer Ausführungsform umfassen die Rechencluster 1836A-1836H jeweils einen Satz von Graphikkernen, wie beispielsweise den Graphikkern 1800 von 18A, der mehrere Typen von Ganzzahl- und Gleitkomma-Logikeinheiten umfassen kann, die Rechenoperationen mit einer Reihe von Genauigkeitsstufen durchführen können, die für Berechnungen geeignet sind, die CUDA-Programmen zugeordnet sind. Beispielsweise kann in mindestens einer Ausführungsform mindestens eine Teilmenge von Gleitkommaeinheiten in jedem der Rechencluster 1836A-1836H konfiguriert sein, um 16-Bit- oder 32-Bit-Gleitkommaoperationen durchzuführen, während eine andere Teilmenge von Gleitkommaeinheiten konfiguriert sein kann, um 64-Bit-Gleitkommaoperationen durchzuführen.
  • In mindestens einer Ausführungsform können mehrere Instanzen der GPGPU 1830 konfiguriert sein, als Rechencluster zu arbeiten. In mindestens einer Ausführungsform variiert die Kommunikation, die von den Rechenclustern 1836A-1836H für die Synchronisation und den Datenaustausch verwendet wird, je nach Ausführungsform. In mindestens einer Ausführungsform kommunizieren mehrere Instanzen der GPGPU 1830 über die Host-Schnittstelle 1832. In mindestens einer Ausführungsform umfasst die GPGPU 1830 einen E/A-Hub 1839, der die GPGPU 1830 mit einer GPU-Verbindung 1840 koppelt, die eine direkte Verbindung zu anderen Instanzen der GPGPU 1830 ermöglicht. In mindestens einer Ausführungsform ist die GPU-Verbindung 1840 mit einer fest zugeordneten GPU-zu-GPU-Brücke gekoppelt, die die Kommunikation und Synchronisation zwischen mehreren GPGPU 1830-Instanzen ermöglicht. In mindestens einer Ausführungsform koppelt die GPU-Verbindung 1840 mit einer Hochgeschwindigkeitsverbindung, um Daten an andere GPGPUs oder Parallelprozessoren zu senden und zu empfangen. In mindestens einer Ausführungsform befinden sich mehrere Instanzen der GPGPU 1830 in separaten Datenverarbeitungssystemen und kommunizieren über eine Netzwerkvorrichtung, die über die Host-Schnittstelle 1832 zugänglich ist. In mindestens einer Ausführungsform kann die GPU-Verbindung 1840 konfiguriert sein, um eine Verbindung zu einem Host-Prozessor zusätzlich oder alternativ zu der Host-Schnittstelle 1832 zu ermöglichen. In mindestens einer Ausführungsform kann die GPGPU 1830 konfiguriert sein, um ein CUDA-Programm auszuführen.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 19A veranschaulicht einen Parallelprozessor 1900 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform können verschiedene Komponenten des Parallelprozessors 1900 unter Verwendung einer oder mehrerer integrierter Schaltungsvorrichtungen, wie beispielsweise programmierbare Prozessoren, anwendungsspezifische integrierte Schaltungen (ASICs) oder feldprogrammierbare Gate-Arrays (FPGA) implementiert sein.
  • In mindestens einer Ausführungsform umfasst der Parallelprozessor 1900 eine Parallelverarbeitungseinheit 1902. In mindestens einer Ausführungsform umfasst die Parallelverarbeitungseinheit 1902 eine E/A-Einheit 1904, die eine Kommunikation mit anderen Vorrichtungen ermöglicht, einschließlich anderer Instanzen der Parallelverarbeitungseinheit 1902. In mindestens einer Ausführungsform kann die E/A-Einheit 1904 direkt mit anderen Vorrichtungen verbunden sein. In mindestens einer Ausführungsform verbindet sich die E/A-Einheit 1904 mit anderen Vorrichtungen unter Verwendung eines Hubs oder einer Schalter-Schnittstelle, wie beispielsweise dem Speicher-Hub 1305. In mindestens einer Ausführungsform bilden Verbindungen zwischen dem Speicher-Hub 1305 und der E/A-Einheit 1904 eine Kommunikationsverbindung 1913. In mindestens einer Ausführungsform verbindet sich die E/A-Einheit 1904 mit einer Host-Schnittstelle 1906 und einer Speicherquerschiene 1916, wobei die Host-Schnittstelle 1906 Befehle empfängt, die zur Durchführung von Verarbeitungsoperationen bestimmt sind, und die Speicherquerschiene 1916 Befehle empfängt, die zur Durchführung von Speicheroperationen bestimmt sind.
  • In mindestens einer Ausführungsform kann dann, wenn die Host-Schnittstelle 1906 über die E/A-Einheit 1904 einen Befehlspuffer empfängt, die Host-Schnittstelle 1906 Arbeitsoperationen anweisen, um diese Befehle an einem Frontend 1908 auszuführen. In mindestens einer Ausführungsform koppelt das Frontend 1908 mit einem Planer 1910, der konfiguriert ist, um Befehle oder andere Arbeitselemente an eine Verarbeitungsanordnung 1912 zu verteilen. In mindestens einer Ausführungsform stellt der Planer 1910 sicher, dass die Clusteranordnung 1912 richtig konfiguriert ist und sich in einem gültigen Zustand befindet, bevor Aufgaben an die Verarbeitungsanordnung 1912 der Verarbeitungsanordnung 1912 verteilt werden. In mindestens einer Ausführungsform ist der Planer 1910 über Firmware-Logik implementiert, die auf einem Mikrocontroller ausgeführt wird. In mindestens einer Ausführungsform ist der von dem Mikrocontroller implementierte Planer 1910 konfigurierbar, um komplexe Planungs- und Arbeitsverteilungsoperationen mit grober und feiner Granularität durchzuführen, was eine schnelle Vorwegnahme und Kontextumschaltung von Threads ermöglicht, die auf der Verarbeitungsanordnung 1912 ausgeführt werden. In mindestens einer Ausführungsform kann die Host-Software Arbeitslasten für die Planung auf der Verarbeitungsanordnung 1912 über eine von mehreren Graphikverarbeitungstürklingeln nachweisen. In mindestens einer Ausführungsform können dann Arbeitslasten über die Verarbeitungsanordnung 1912 hinweg durch die Logik des Planers 1910 innerhalb eines Mikrocontrollers einschließlich des Planers 1910 automatisch verteilt werden.
  • In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 bis zu „N“-Verarbeitungscluster (z.B. Cluster 1914A, Cluster 1914B bis Cluster 1914N) umfassen. In mindestens einer Ausführungsform kann jeder Cluster 1914A-1914N der Verarbeitungsanordnung 1912 eine große Anzahl gleichzeitiger Threads ausführen. In mindestens einer Ausführungsform kann der Planer 1910 den Clustern 1914A-1914N der Verarbeitungsanordnung 1912 unter Verwendung verschiedener Planungs- und/oder Arbeitsverteilungs-Algorithmen Arbeit zuweisen, welche je nach Arbeitsbelastung, die für jede Art von Programm oder Berechnung aufkommt, variieren kann. In mindestens einer Ausführungsform kann die Planung von dem Planer 1910 dynamisch gehandhabt werden, oder kann teilweise durch Kompiliererlogik während der Kompilierung der Programmlogik, die für die Ausführung durch die Verarbeitung der Clusteranordnung 1912 konfiguriert ist, unterstützt werden. In mindestens einer Ausführungsform können verschiedene Cluster 1914A-1914N der Verarbeitungsanordnung 1912 zur Verarbeitung verschiedener Arten von Programmen oder zur Durchführung verschiedener Arten von Berechnungen zugeteilt sein.
  • In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 konfiguriert sein, um verschiedene Arten von Parallelverarbeitungsoperationen durchzuführen. In mindestens einer Ausführungsform ist die Verarbeitungsanordnung 1912 konfiguriert, um allgemeine parallele Rechenoperationen durchzuführen. Beispielsweise kann in mindestens einer Ausführungsform die Verarbeitungsanordnung 1912 Logik umfassen, um Verarbeitungsaufgaben einschließlich eines Filterns von Video- und/oder Audiodaten, Durchführens von Modellierungsoperationen, einschließlich physikalischer Operationen, und Durchführens von Datentransformationen auszuführen.
  • In mindestens einer Ausführungsform ist die Verarbeitungsanordnung 1912 konfiguriert, um parallele Graphikverarbeitungsoperationen durchzuführen. In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 zusätzliche Logik umfassen, um die Ausführung derartiger Graphikverarbeitungsoperationen zu unterstützen, einschließlich einer, jedoch nicht beschränkt auf, Texturabtastlogik zur Durchführung von Texturoperationen, sowie einer Tessellierungslogik und anderer Vertex-Verarbeitungslogik. In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 konfiguriert sein, um graphikverarbeitungsbezogene Shader-Programme auszuführen, wie beispielsweise Vertex-Shaders, Tessellation-Shaders, Geometrie-Shaders und Pixel-Shaders. In mindestens einer Ausführungsform kann die Parallelverarbeitungseinheit 1902 Daten aus dem Systemspeicher über die E/A-Einheit 1904 zur Verarbeitung übertragen. In mindestens einer Ausführungsform können während der Verarbeitung übertragene Daten während der Verarbeitung in einem On-Chip-Speicher (z.B. Speicher des Parallelprozessors 1922) gespeichert und anschließend in den Systemspeicher zurückgeschrieben werden.
  • In mindestens einer Ausführungsform kann dann, wenn die Parallelverarbeitungseinheit 1902 zur Durchführung von Graphikverarbeitung verwendet wird, der Planer 1910 konfiguriert sein, um eine Verarbeitungsarbeitslast in etwa gleich große Aufgaben aufzuteilen, um die Verteilung von Graphikverarbeitungsoperationen auf mehrere Cluster 1914A-1914N der Verarbeitungsanordnung 1912 besser zu ermöglichen. In mindestens einer Ausführungsform können Abschnitte der Verarbeitungsanordnung 1912 konfiguriert sein, um verschiedene Arten von Verarbeitung durchzuführen. Beispielsweise kann in mindestens einer Ausführungsform ein erster Abschnitt konfiguriert sein, um Vertex-Shading und Topologieerzeugung durchzuführen, ein zweiter Abschnitt kann konfiguriert sein, um Tesselations- und Geometrie-Shading durchzuführen, und ein dritter Abschnitt kann konfiguriert sein, um Pixel-Shading oder andere Bildschirmraumoperationen durchzuführen, um ein gerendertes Bild für die Anzeige zu erzeugen. In mindestens einer Ausführungsform können Zwischendaten, die von einem oder mehreren der Cluster 1914A-1914N erzeugt wurden, in Puffern gespeichert werden, so dass Zwischendaten zwischen den Clustern 1914A-1914N zur weiteren Verarbeitung übertragen werden können.
  • In mindestens einer Ausführungsform kann die Verarbeitungsanordnung 1912 Verarbeitungsaufgaben empfangen, die über den Planer 1910 auszuführen sind, der von dem Frontend 1908 Befehle empfängt, die Verarbeitungsaufgaben definieren. In mindestens einer Ausführungsform können Verarbeitungsaufgaben Indizes von zu verarbeitenden Daten umfassen, z.B. Oberflächen-(Patch)-Daten, Stammfunktionsdaten, Vertex-Daten und/oder Pixeldaten, sowie Zustandsparameter und Befehle, die definieren, wie Daten zu verarbeiten sind (z.B. welches Programm auszuführen ist). In mindestens einer Ausführungsform kann der Planer 1910 konfiguriert sein, um Indizes zu holen, die Aufgaben entsprechen, oder kann Indizes von dem Frontend 1908 empfangen. In mindestens einer Ausführungsform kann das Frontend 1908 konfiguriert sein, um sicherzustellen, dass die Verarbeitungsanordnung 1912 in einen gültigen Zustand konfiguriert ist, bevor eine durch eingehende Befehlspuffer (z.B. Stapelpuffer, Schiebepuffer usw.) spezifizierte Arbeitslast initiiert wird.
  • In mindestens einer Ausführungsform kann jede von einer oder mehreren Instanzen der Parallelverarbeitungseinheit 1902 mit dem Parallelprozessorspeicher 1922 gekoppelt sein. In mindestens einer Ausführungsform kann auf den Parallelprozessorspeicher 1922 über die Speicherquerschiene 1916 zugegriffen werden, die Speicheranforderungen von der Verarbeitungsanordnung 1912 sowie der E/A-Einheit 1904 empfangen kann. In mindestens einer Ausführungsform kann die Speicherquerschiene 1916 über eine Speicherschnittstelle 1918 auf den Parallelprozessorspeicher 1922 zugreifen. In mindestens einer Ausführungsform kann die Speicherschnittstelle 1918 mehrere Partitionierungseinheiten (z.B. Partitionierungseinheit 1920A, Partitionierungseinheit 1920B bis Partitionierungseinheit 1920N) umfassen, die jeweils mit einem Abschnitt (z.B. der Speichereinheit) des Parallelprozessorspeichers 1922 koppeln können. In mindestens einer Ausführungsform ist eine Anzahl von Partitionierungseinheiten 1920A-1922N konfiguriert, um gleich einer Anzahl von Speichereinheiten zu sein, so dass eine erste Partitionierungseinheit 1920A eine entsprechende erste Speichereinheit 1924A aufweist, eine zweite Partitionierungseinheit 1920B eine entsprechende Speichereinheit 1924B aufweist und eine N-te Partitionierungseinheit 1920N eine entsprechende N-te Speichereinheit 1924N aufweist. In mindestens einer Ausführungsform kann eine Anzahl von Partitionierungseinheiten 1920A-1920N nicht gleich einer Anzahl von Speichervorrichtungen sein.
  • In mindestens einer Ausführungsform können die Speichereinheiten 1924A-1924N verschiedene Arten von Speichervorrichtungen umfassen, einschließlich eines dynamischen Direktzugriffspeicher (DRAM) oder Graphik-Direktzugriffspeicher, wie beispielsweise synchronen Graphik-Direktzugriffspeichers (SGRAM), einschließlich eines Graphikspeichers mit doppelter Datenrate (GDDR). In mindestens einer Ausführungsform können die Speichereinheiten 1924A-1924N auch 3D-Stapelspeicher umfassen, einschließlich, jedoch nicht beschränkt auf, Speicher mit hoher Bandbreite (HBM). In mindestens einer Ausführungsform können Renderziele, wie beispielsweise Einzelbildpuffer bzw. Frame-Puffer oder Texturkarten, über Speichereinheiten 1924A-1924N hinweg gespeichert sein, so dass die Partitionseinheiten 1920A-1920N Abschnitte jedes Renderziels parallel schreiben können, um die verfügbare Bandbreite des Parallelprozessorspeichers 1922 effizient zu nutzen. In mindestens einer Ausführungsform kann eine lokale Instanz des Parallelprozessorspeichers 1922 zugunsten eines vereinheitlichten Speicherdesigns, das Systemspeicher in Verbindung mit lokalem Cache-Speicher nutzt, ausgeschlossen sein.
  • In mindestens einer Ausführungsform kann jeder beliebige der Cluster 1914A-1914N der Verarbeitungsanordnung 1912 Daten verarbeiten, die in einer beliebigen der Speichereinheiten 1924A-1924N in dem Parallelprozessorspeicher 1922 geschrieben werden. In mindestens einer Ausführungsform kann die Speicherquerschiene 1916 konfiguriert sein, um eine Ausgabe jedes Clusters 1914A-1914N an eine beliebige Partitionseinheit 1912A-1912N oder an einen anderen Cluster 1914A-1914N zu übertragen, der zusätzliche Verarbeitungsoperationen an einer Ausgabe durchführen kann. In mindestens einer Ausführungsform kann jeder Cluster 1914A-1914N mit der Speicherschnittstelle 1918 über die Speicherquerschiene 1916 kommunizieren, um aus verschiedenen externen Speichervorrichtungen zu lesen oder in diese zu schreiben. In mindestens einer Ausführungsform weist die Speicherquerschiene 1916 zur Kommunikation mit der E/A-Einheit 1904 zu der Speicherschnittstelle 1918 auf, sowie eine Verbindung zu einer lokalen Instanz des Parallelprozessorspeichers 1922 auf, so dass Verarbeitungseinheiten innerhalb verschiedener Verarbeitungscluster 1914A-1914N mit dem Systemspeicher oder anderem Speicher kommunizieren können, der nicht lokal zu der Parallelverarbeitungseinheit 1902 ist. In mindestens einer Ausführungsform kann die Speicherquerschiene 1916 virtuelle Kanäle verwenden, um Ströme von Datenaufkommen zwischen den Clustern 1914A-1914N und den Partitionierungseinheiten 1920A-1920N zu trennen.
  • In mindestens einer Ausführungsform können mehrere Instanzen der Parallelverarbeitungseinheit 1902 auf einer einzelnen Erweiterungskarte bereitgestellt sein oder mehrere Erweiterungskarten können miteinander verbunden sein. In mindestens einer Ausführungsform können verschiedene Instanzen der Parallelverarbeitungseinheit 1902 konfiguriert sein, auch dann miteinander zu arbeiten, wenn verschiedene Instanzen eine unterschiedliche Anzahl von Verarbeitungskernen, unterschiedliche Mengen an lokalem Parallelprozessorspeicher und/oder andere Konfigurationsunterschiede aufweisen. Beispielsweise können in mindestens einer Ausführungsform einige Instanzen der Parallelverarbeitungseinheit 1902 relativ zu anderen Instanzen Gleitkommaeinheiten mit höherer Genauigkeit umfassen. In mindestens einer Ausführungsform können Systeme, die eine oder mehrere Instanzen der Parallelverarbeitungseinheit 1902 oder des Parallelprozessors 1900 umfassen, in einer Mehrzahl von Konfigurationen und Formfaktoren implementiert sein, einschließlich, jedoch nicht beschränkt auf, Desktop-, Laptop- oder Handheld-Personal Computer, Servern, Workstations, Spielkonsolen und/oder eingebetteten Systeme.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 19B veranschaulicht einen Verarbeitungscluster 1994 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Verarbeitungscluster 1994 innerhalb einer Parallelverarbeitungseinheit enthalten. In mindestens einer Ausführungsform ist der Verarbeitungscluster 1994 einer der Verarbeitungscluster 1914A-1914N von 19A. In mindestens einer Ausführungsform kann der Verarbeitungscluster 1914 konfiguriert sein, um viele Threads parallel auszuführen, wobei sich der Begriff „Thread“ auf eine Instanz eines bestimmten Programms bezieht, das auf einem bestimmten Satz von Eingangsdaten ausgeführt wird. In mindestens einer Ausführungsform werden Einzelanweisungs-Mehrfachdaten (Single Instruction, Multiple Data; SIMD)-Anweisungsausgabetechniken verwendet, die parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten bereitzustellen. In mindestens einer Ausführungsform werden Einzelanweisungs-Mehrfachthread (Single Instruction, Multiple Thread; „SIMT“)-Techniken verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads zu unterstützen, wobei eine gemeinsame Anweisungseinheit verwendet wird, die konfiguriert ist, um Anweisungen an eine Anzahl von Verarbeitungs-Maschinen innerhalb jedes Verarbeitungscluster 1994 auszugeben.
  • In mindestens einer Ausführungsform kann der Betrieb des Verarbeitungsclusters 1914 über einen Pipeline-Verwalter 1932 gesteuert werden, der Verarbeitungsaufgaben an SIMT-Parallelprozessoren verteilt. In mindestens einer Ausführungsform empfängt der Pipeline-Verwalter 1932 Anweisungen von dem Planer 1910 von 19 und verwaltet die Ausführung dieser Anweisungen über einen Graphik-Multiprozessor 1934 und/oder eine Textureinheit 1936. In mindestens einer Ausführungsform ist der Graphik-Multiprozessor 1934 eine beispielhafte Instanz eines SIMT-Parallelprozessors. In mindestens einer Ausführungsform können jedoch verschiedene Arten von SIMT-Parallelprozessoren unterschiedlicher Architekturen innerhalb des Verarbeitungsclusters 1914 umfasst sein. In mindestens einer Ausführungsform können eine oder mehrere Instanzen des Graphik-Multiprozessors 1934 in einem Verarbeitungscluster 1914 umfasst sein. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 Daten verarbeiten und kann eine Datenquerschiene 1940 verwendet, um verarbeitete Daten an eines von mehreren möglichen Zielen, einschließlich anderer Shader-Einheiten, zu verteilen. In mindestens einer Ausführungsform kann der Pipeline-Verwalter 1932 die Verteilung der verarbeiteten Daten erleichtern, indem er Ziele für verarbeitete Daten spezifiziert, die über die Datenquerschiene 1940 zu verteilen sind.
  • In mindestens einer Ausführungsform kann jeder Graphik-Multiprozessor 1934 innerhalb des Verarbeitungsclusters 1914 einen identischen Satz funktionaler Ausführungslogik (z.B. Arithmetik-Logikeinheiten, Lade-Speicher-Einheiten usw.) umfassen. In mindestens einer Ausführungsform kann funktionale Ausführungslogik nach Art des Pipeline-Prinzips konfiguriert sein, in welcher neue Anweisungen ausgegeben werden können, bevor frühere Anweisungen beendet sind. In mindestens einer Ausführungsform unterstützt die funktionale Ausführungslogik eine Mehrzahl von Operationen, einschließlich Ganzzahl- und Gleitkommaarithmetik, Vergleichsoperationen, boolesche Operationen, Bit-Shifting und Berechnung verschiedener algebraischer Funktionen. In mindestens einer Ausführungsform kann die gleiche Hardware der funktionalen Einheit wirksam genutzt werden, um verschiedene Operationen durchzuführen, und jede beliebige Kombination von funktionalen Einheiten kann vorhanden sein.
  • In mindestens einer Ausführungsform bilden an den Verarbeitungscluster 1914 übertragene Anweisungen einen Thread. In mindestens einer Ausführungsform ist ein Satz von Threads, der über einen Satz von Parallelverarbeitungs-Maschinen ausgeführt wird, eine Thread-Gruppe. In mindestens einer Ausführungsform führt die Thread-Gruppe ein Programm an verschiedenen Eingangsdaten aus. In mindestens einer Ausführungsform kann jeder Thread innerhalb einer Thread-Gruppe einer unterschiedlichen Verarbeitungs-Maschine innerhalb eines Graphik-Multiprozessors 1934 zugeordnet sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe weniger Threads umfassen als eine Anzahl von Verarbeitungs-Maschinen innerhalb des Graphik-Multiprozessors 1934. In mindestens einer Ausführungsform kann, wenn eine Thread-Gruppe weniger Threads als eine Anzahl von Verarbeitungs-Maschinen enthält, eine oder mehrere der Verarbeitungs-Maschinen während der Zyklen, in welchen diese Thread-Gruppe verarbeitet wird, im Leerlauf sein. In mindestens einer Ausführungsform kann eine Thread-Gruppe mehr Threads als eine Anzahl von Verarbeitungs-Maschinen innerhalb des Graphik-Multiprozessors 1934 umfassen. In mindestens einer Ausführungsform kann, wenn eine Thread-Gruppe mehr Threads als eine Anzahl von Verarbeitungs-Maschinen innerhalb des Graphik-Multiprozessors 1934 umfasst, die Verarbeitung über aufeinanderfolgende Taktzyklen durchgeführt werden. In mindestens einer Ausführungsform können mehrere Thread-Gruppen nebenläufig auf einem Graphik-Multiprozessor 1934 ausgeführt werden.
  • In mindestens einer Ausführungsform umfasst der Graphik-Multiprozessor 1934 einen internen Cache-Speicher, um Lade- und Speicheroperationen durchzuführen. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 auf einen internen Cache verzichten und einen Cache-Speicher (z.B. den L1-Cache 1948) innerhalb des Verarbeitungsclusters 1914 verwenden. In mindestens einer Ausführungsform weist jeder Graphik-Multiprozessor 1934 auch Zugriff auf L2-Caches innerhalb von Partitionseinheiten auf (z.B. den Partitionseinheiten 1920A-1920N von 19A), die unter allen Verarbeitungsclustern 1914 gemeinsam genutzt werden und zum Übertragen von Daten zwischen Threads verwendet werden können. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 auch auf einen globalen Speicher außerhalb des Chips zugreifen, der einen oder mehrere lokale Parallelprozessorspeicher und/oder Systemspeicher umfassen kann. In mindestens einer Ausführungsform kann jeder Speicher, der außerhalb der Parallelverarbeitungseinheit 1902 liegt, als globaler Speicher verwendet werden. In mindestens einer Ausführungsform umfasst der Verarbeitungscluster 1914 mehrere Instanzen des Graphik-Multiprozessors 1934, der gemeinsame Anweisungen und Daten austauschen kann, welche in dem L1-Cache 1948 gespeichert sein können.
  • In mindestens einer Ausführungsform kann jeder Verarbeitungscluster 1914 eine MMU 1945 (Speicherverwaltungseinheit) umfassen, die konfiguriert ist, um virtuelle Adressen auf physikalische Adressen abzubilden. In mindestens einer Ausführungsform können sich eine oder mehrere Instanzen der MMU 1945 innerhalb der Speicherschnittstelle 1918 von 19 befinden. In mindestens einer Ausführungsform umfasst die MMU 1945 einen Satz von Seitentabelleneinträgen (Page Table Entries; PTEs), die verwendet werden, um eine virtuelle Adresse auf eine physikalische Adresse einer Kachel und optional einen Cache-Zeilenindex abzubilden. In mindestens einer Ausführungsform kann die MMU 1945 Adressübersetzungs-Lookaside-Puffer (TLB) oder Caches umfassen, die sich in dem Graphik-Multiprozessor 1934 oder in dem L1-Cache 1948 oder in dem Verarbeitungscluster 1914 befinden können. In mindestens einer Ausführungsform wird eine physikalische Adresse verarbeitet, um den Oberflächendatenzugriff lokal zu verteilen, um eine effiziente Verschachtelung von Anforderungen zwischen Partitionierungseinheiten zu ermöglichen. In mindestens einer Ausführungsform kann der Cache-Zeilenindex verwendet werden, um zu bestimmen, ob eine Anforderung für eine Cache-Zeile ein Treffer oder ein Nichttreffer ist.
  • In mindestens einer Ausführungsform kann ein Verarbeitungscluster 1914 derart konfiguriert sein, dass jeder Graphik-Multiprozessor 1934 mit einer Textureinheit 1936 zum Durchführen von Texturmappingoperationen, z.B. einem Bestimmen von Texturprobenpositionen, einem Lesen von Texturdaten und einem Filtern von Texturdaten, gekoppelt ist. In mindestens einer Ausführungsform werden Texturdaten aus einem internen Textur-Ll-Cache (nicht gezeigt) oder aus einem L1-Cache innerhalb des Graphik-Multiprozessors 1934 gelesen und bei Bedarf aus einem L2-Cache, einem lokalen Parallelprozessorspeicher oder einem Systemspeicher geholt. In mindestens einer Ausführungsform gibt jeder Graphik-Multiprozessor 1934 verarbeitete Aufgaben an die Datenquerschiene 1940 aus, um die verarbeitete Aufgabe einem anderen Verarbeitungscluster 1914 zur weiteren Verarbeitung bereitzustellen oder um die verarbeitete Aufgabe über die Speicherquerschiene 1916 in einem L2-Cache, lokalen Parallelprozessorspeicher oder Systemspeicher zu speichern. In mindestens einer Ausführungsform ist eine preROP 1942 (Pre-Raster Operations Unit) bzw. Vorrasteroperationseinheit konfiguriert, um Daten von dem Graphik-Multiprozessor 1934 zu empfangen und Daten an ROP-Einheiten zu leiten, welche mit Partitionierungseinheiten, wie hier beschrieben, angeordnet sein können (z.B. die Partitionierungseinheiten 1920A-1920N von 19). In mindestens einer Ausführungsform kann die PreROP-Einheit 1942 Optimierungen zur Farbmischung durchführen, Pixelfarbdaten organisieren und Adressübersetzungen durchführen.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 19C veranschaulicht einen Graphik-Multiprozessor 1996 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der Graphik-Multiprozessor 1996 der Graphik-Multiprozessor 1934 von 19B. In mindestens einer Ausführungsform koppelt sich der Graphik-Multiprozessor 1934 mit dem Pipeline-Verwalter 1932 des Verarbeitungsclusters 1914. In mindestens einer Ausführungsform weist der Graphik-Multiprozessor 1934 eine Ausführungspipeline auf, die einen Anweisungs-Cache 1952, eine Anweisungseinheit 1954, eine Adresszuordnungseinheit 1956, eine Registerdatei 1958, einen oder mehrere GPGPU-Kerne 1962 und eine oder mehrere LSUs 1966 umfasst, ohne darauf beschränkt zu sein. Die GPGPU-Kerne 1962 und die LSUs 1966 sind mit dem Cache-Speicher 1972 und dem gemeinsam genutzten Speicher 1970 über eine Speicher- und Cache-Zwischenverbindung 1968 gekoppelt.
  • In mindestens einer Ausführungsform empfängt der Anweisungs-Cache 1952 einen Strom von Anweisungen, die von dem Pipeline-Verwalter 1932 auszuführen sind. In mindestens einer Ausführungsform werden Anweisungen in dem Anweisungs-Cache 1952 zwischengespeichert und zur Ausführung durch die Anweisungseinheit 1954 bereitgestellt. In mindestens einer Ausführungsform kann die Anweisungseinheit 1954 Anweisungen als Thread-Gruppen (z.B. Warps) senden, wobei jeder Thread der Thread-Gruppe einer anderen Ausführungseinheit innerhalb des GPGPU-Kerns 1962 zugeordnet ist. In mindestens einer Ausführungsform kann eine Anweisung auf einen beliebigen eines lokalen, gemeinsam genutzten oder globalen Adressraums zugreifen, indem sie eine Adresse innerhalb eines vereinheitlichten Adressraums spezifiziert. In mindestens einer Ausführungsform kann die Adresszuordnungseinheit 1956 verwendet werden, um Adressen in einem vereinheitlichten Adressraum in eine eindeutige Speicheradresse zu übersetzen, auf die von den Lade-/Speicher-Einheiten 1966 zugegriffen werden kann.
  • In mindestens einer Ausführungsform stellt die Registerdatei 1958 einen Satz von Registern für Funktionseinheiten des Graphik-Multiprozessors 1934 bereit. In mindestens einer Ausführungsform stellt die Registerdatei 1958 einen temporären Speicher für Operanden bereit, die mit Datenpfaden von Funktionseinheiten (z.B. GPGPU-Kernen 1962, Lade-/Speicher-Einheiten 1966) des Graphik-Multiprozessors 1934 verbunden sind. In mindestens einer Ausführungsform ist die Registerdatei 1958 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein fest zugeordneter Abschnitt der Registerdatei 1958 zugeordnet ist. In mindestens einer Ausführungsform ist die Registerdatei 1958 zwischen verschiedenen Thread-Gruppen aufgeteilt, die von dem Graphik-Multiprozessor 1934 ausgeführt werden.
  • In mindestens einer Ausführungsform können die GPGPU-Kerne 1962 jeweils Gleitkommaeinheiten (FPUs) und/oder Ganzzahlarithmetik-Logikeinheiten (ALUs) umfassen, die zum Ausführen von Anweisungen des Graphik-Multiprozessors 1934 verwendet werden. Die GPGPU-Kerne 1962 können in der Architektur ähnlich sein oder sich in der Architektur unterscheiden. In mindestens einer Ausführungsform umfasst ein erster Abschnitt der GPGPU-Kerne 1962 eine FPU einfacher Genauigkeit und eine Ganzzahl-ALU, während ein zweiter Abschnitt der GPGPU-Kerne eine FPU doppelter Genauigkeit umfasst. In mindestens einer Ausführungsform können FPUs den IEEE 754-1208-Standard für Gleitkommaarithmetik implementieren oder eine Gleitkommaarithmetik mit variabler Genauigkeit ermöglichen. In mindestens einer Ausführungsform kann der Graphik-Multiprozessor 1934 zusätzlich eine oder mehrere Einheiten mit fester Funktion oder Spezialfunktion zum Durchführen bestimmter Funktionen, wie beispielsweise Kopierrechteck- oder Pixelblendingoperationen, umfassen. In mindestens einer Ausführungsform kann bzw. können ein oder mehrere GPGPU-Kerne 1962 auch Logik für eine feste oder spezielle Funktion umfassen.
  • In mindestens einer Ausführungsform umfassen die GPGPU-Kerne 1962 eine SIMD-Logik, die in der Lage ist, eine einzelne Anweisung auf bzw. für mehrere Datensätze durchzuführen. In mindestens einer Ausführungsform können GPGPU-Kerne 1962 SIMD4-, SIMD8- und SIMD16-Anweisungen physikalisch ausführen und SIMD1-, SIMD2- und SIMD32-Anweisungen logisch ausführen. In mindestens einer Ausführungsform können SIMD-Anweisungen für GPGPU-Cores zur Kompilierungszeit von einem Shader-Kompilierer generiert oder automatisch bei dem Ausführen von Programmen erzeugt werden, die für Single Program, Multiple Data (SPMD) oder SIMT-Architekturen geschrieben und kompiliert wurden. In mindestens einer Ausführungsform können mehrere Threads eines für ein SIMT-Ausführungsmodell konfigurierten Programms über eine einzelne SIMD-Anweisung ausgeführt werden. Beispielsweise können in mindestens einer Ausführungsform acht SIMT-Threads, die gleiche oder ähnliche Operationen durchführen, über eine einzige SIMD8-Logikeinheit parallel ausgeführt werden.
  • In mindestens einer Ausführungsform ist die Speicher- und Cache-Zwischenverbindung 1968 ein Zwischenverbindungsnetzwerk, das jede Funktionseinheit des Graphik-Multiprozessors 1934 mit der Registerdatei 1958 und dem gemeinsamen Speicher 1970 verbindet.
  • In mindestens einer Ausführungsform ist die Speicher- und Cache-Zwischenverbindung 1968 eine Querschienen-Zwischenverbindung, die der Lade-/Speicher-Einheit 1966 ermöglicht, Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher 1970 und der Registerdatei 1958 zu implementieren. In mindestens einer Ausführungsform kann die Registerdatei 1958 mit der gleichen Frequenz wie die GPGPU-Kerne 1962 arbeiten, so dass die Datenübertragung zwischen den GPGPU-Kernen 1962 und der Registerdatei 1958 eine sehr geringe Latenzzeit aufweist. In mindestens einer Ausführungsform kann der gemeinsame Speicher 1970 verwendet werden, um die Kommunikation zwischen Threads zu ermöglichen, die auf Funktionseinheiten innerhalb des Graphik-Multiprozessors 1934 ausgeführt werden. In mindestens einer Ausführungsform kann der Cache-Speicher 1972 beispielsweise als ein Datencache verwendet werden, um Texturdaten zwischenzuspeichern, die zwischen Funktionseinheiten und der Textureinheit 1936 ausgetauscht werden. In mindestens einer Ausführungsform kann der gemeinsam genutzte Speicher 1970 auch als ein programmverwalteter Cache verwendet werden. In mindestens einer Ausführungsform können Threads, die auf GPGPU-Kernen 1962 ausgeführt werden, Daten innerhalb des gemeinsam genutzten Speichers programmatisch zusätzlich zu automatisch zwischengespeicherten Daten speichern, die innerhalb des Cache-Speichers 1972 gespeichert sind.
  • In mindestens einer Ausführungsform ist ein Parallelprozessor oder eine GPGPU, wie hier beschrieben, kommunikativ mit Host/Prozessor-Kernen gekoppelt, um Graphikoperationen, Maschinenlernoperationen, Musteranalyseoperationen und verschiedene allgemeine GPU (GPGPU)-Funktionen zu beschleunigen. In mindestens einer Ausführungsform kann die GPU kommunikativ mit den Host/Prozessor-Kernen über einen Bus oder eine andere Zwischenverbindung (z.B. eine Hochgeschwindigkeits-Zwischenverbindung wie PCIe oder NVLink) gekoppelt sein. In mindestens einer Ausführungsform kann die GPU in bzw. auf demselben Gehäuse oder Chip wie die Kerne integriert und kommunikativ mit Kernen über einen internen Prozessorbus/eine interne Zwischenverbindung (d.h. intern in Bezug auf das Gehäuse oder den Chip) gekoppelt sein. In mindestens einer Ausführungsform können Prozessorkerne unabhängig davon, wie die GPU verbunden ist, der GPU Arbeit in Form von Sequenzen von Befehlen/Anweisungen zuweisen, die in einem Arbeitsdeskriptor umfasst sind. In mindestens einer Ausführungsform verwendet die GPU dann fest zugeordnete Schaltkreise/Logik zum effizienten Verarbeiten dieser Befehle/Anweisungen.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 20 veranschaulicht einen Graphikprozessor 2000 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 eine Ring-Zwischenverbindung 2002, ein Pipeline-Frontend 2004, eine Medien-Maschine 2037 und Graphikkerne 2080A-2080N. In mindestens einer Ausführungsform koppelt die Ring-Zwischenverbindung 2002 den Graphikprozessor 2000 an andere Verarbeitungseinheiten, einschließlich andere Graphikprozessoren oder einen oder mehrere universelle Prozessorkerne. In mindestens einer Ausführungsform ist der Graphikprozessor 2000 einer von vielen Prozessoren, die innerhalb eines Multikernverarbeitungssystems integriert sind.
  • In mindestens einer Ausführungsform empfängt der Graphikprozessor 2000 Stapel von Befehlen über die Ring-Zwischenverbindung 2002. In mindestens einer Ausführungsform werden eingehende Befehle von einem Befehlsstreamer 2003 in dem Pipeline-Frontend 2004 interpretiert. In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 eine skalierbare Ausführungslogik zur Durchführung von 3D-Geometrieverarbeitung und Medienverarbeitung über den/die Graphikkern(e) 2080A-2080N. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2003 für 3D-Geometrieverarbeitungsbefehle Befehle an die Geometrie-Pipeline 2036. In mindestens einer Ausführungsform liefert der Befehlsstreamer 2003 für mindestens einige Befehle zur Medienverarbeitung Befehle an ein Video-Frontend 2034, das mit einer Medien-Maschine 2037 gekoppelt ist. In mindestens einer Ausführungsform umfasst die Medien-Maschine 2037 eine Videoqualitäts-Maschine (VQE) 2030 zur Video- und Bildnachbearbeitung und eine Multiformat-Codier-/Decodier-Maschine (MFX) 2023 zur hardwarebeschleunigten Mediendatencodierung und -decodierung. In mindestens einer Ausführungsform erzeugen die Geometrie-Pipeline 2036 und die Medien-Maschine 2037 jeweils Ausführungsthreads für Thread-Ausführungsressourcen, die von mindestens einem Graphikkern 2080A bereitgestellt werden.
  • In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 skalierbare Thread-Ausführungsressourcen mit modularen Graphikkernen 2080A-2080N (manchmal als Kern-Slices bezeichnet), die jeweils mehrere Unterkerne 2050A-2550N, 2060A-2560N (manchmal als Kern-Subslices bezeichnet) aufweisen. In mindestens einer Ausführungsform kann der Graphikprozessor 2000 eine beliebige Anzahl von Graphikkernen 2080A bis 2080N aufweisen. In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 einen Graphikkern 2080A mit mindestens einem ersten Unterkern 2050A und einem zweiten Unterkern 2060A. In mindestens einer Ausführungsform ist der Graphikprozessor 2000 ein stromsparender Prozessor mit einem einzigen Unterkern (z.B. 2050A). In mindestens einer Ausführungsform umfasst der Graphikprozessor 2000 mehrere Graphikkerne 2080A-2080N, die jeweils einen Satz von ersten Unterkernen 2050A-2050N und einen Satz von zweiten Unterkernen 2060A-2060N umfassen. In mindestens einer Ausführungsform umfasst jeder Unterkern in den ersten Unterkernen 2050A-2050N mindestens einen ersten Satz von Ausführungseinheiten 2052A-2052N und Medien/Textur-Abtastern 2054A-2054N. In mindestens einer Ausführungsform umfasst jeder Unterkern in den zweiten Unterkernen 2060A-2060N mindestens einen zweiten Satz von Ausführungseinheiten 2062A-2062N und Abtastern 2064A-2064N. In mindestens einer Ausführungsform teilt sich jeder Unterkern 2050A-2050N, 2060A-2060N einen Satz gemeinsamer Ressourcen 2070A-2070N. In mindestens einer Ausführungsform umfassen gemeinsam genutzte Ressourcen den gemeinsam genutzten Cache-Speicher und Pixeloperationslogik.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 21 zeigt einen Prozessor 2100 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform kann der Prozessor 2100, ohne darauf beschränkt zu sein, Logikschaltungen zum Ausführen von Anweisungen umfassen. In mindestens einer Ausführungsform kann der Prozessor 2100 Anweisungen ausführen, die x86-Anweisungen, ARM-Anweisungen, spezielle Anweisungen für anwendungsspezifische integrierte Schaltungen (ASICs) usw. umfassen. In mindestens einer Ausführungsform kann der Prozessor 2100 Register zum Speichern gepackter Daten umfassen, wie beispielsweise 64-Bit breite MMXTM-Register in Mikroprozessoren, die mit MMX-Technologie der Intel Corporation, Santa Clara, Kalifornien, aktiviert sind. In mindestens einer Ausführungsform können MMX-Register, die sowohl in Ganzzahl- als auch in Gleitkomma-Formen verfügbar sind, mit gepackten Datenelementen arbeiten, die SIMD- und Streaming-SIMD-Erweiterungen („SSE“) begleiten. In mindestens einer Ausführungsform können 128-Bit breite XMM-Register, die sich auf Technologie des SSE2, SSE3, SSE4, AVX oder darüber hinaus beziehen (allgemein als „SSEx“ bezeichnet), derartige gepackte Datenoperanden halten. In mindestens einer Ausführungsform können Prozessoren 2100 Anweisungen ausführen, um CUDA-Programme zu beschleunigen.
  • In mindestens einer Ausführungsform umfasst der Prozessor 2100 ein In-Reihenfolge-Frontend („Frontend“) 2101, um auszuführende Anweisungen zu holen und Anweisungen vorzubereiten, die später in der Prozessor-Pipeline zu verwenden sind. In mindestens einer Ausführungsform kann das Frontend 2101 mehrere Einheiten umfassen. In mindestens einer Ausführungsform holt ein Anweisungsvorabrufer 2126 Anweisungen aus dem Speicher und leitet Anweisungen an einen Anweisungsdecodierer 2128 weiter, der wiederum Anweisungen decodiert oder interpretiert. Beispielsweise decodiert in mindestens einer Ausführungsform der Anweisungsdecodierer 2128 eine empfangene Anweisung in eine oder mehrere Operationen, die als „Mikroanweisungen“ oder „Mikrooperationen“ bezeichnet werden (die auch als „Mikro-Ops“ oder „Uops“ bezeichnet werden), die eine Maschine ausführen kann. In mindestens einer Ausführungsform parst bzw. analysiert der Anweisungsdecodierer 2128 eine Anweisung in einen Opcode und entsprechende Daten und Steuerfelder, die von der Mikroarchitektur verwendet werden können, um Operationen durchzuführen. In mindestens einer Ausführungsform kann ein Trace-Cache 2130 decodierte Uops zu programmgeordneten Sequenzen oder Spuren in einer Uop-Warteschlange 2134 zur Ausführung zusammenstellen. In mindestens einer Ausführungsform stellt dann, wenn der Trace-Cache 2130 auf eine komplexe Anweisung trifft, ein Mikrocode-ROM 2132 die für den Abschluss einer Operation erforderlichen Uops bereit.
  • In mindestens einer Ausführungsform können einige Anweisungen in eine einzige Mikro-Op umgewandelt werden, während andere mehrere Mikro-Ops benötigen, um die volle Operation abzuschließen. In mindestens einer Ausführungsform kann dann, wenn mehr als vier Mikro-Ops benötigt werden, um eine Anweisung abzuschließen, der Anweisungsdecodierer 2128 auf den Mikrocode-ROM 2132 zugreifen, um die Anweisung auszuführen. In mindestens einer Ausführungsform kann eine Anweisung zur Verarbeitung an dem Anweisungsdecodierer 2128 in eine kleine Anzahl von Mikro-Ops decodiert werden. In mindestens einer Ausführungsform kann eine Anweisung in dem Mikrocode-ROM 2132 gespeichert werden, falls eine Anzahl von Mikro-Operationen zur Durchführung des Betriebs erforderlich sein sollte. In mindestens einer Ausführungsform bezieht sich der Trace-Cache 2130 auf einen Eintrittspunkt einer programmierbare Logikanordnung („PLA“), um einen korrekten Mikroanweisungszeiger zum Lesen von Mikrocodesequenzen zu bestimmen, um eine oder mehrere Anweisungen von dem Mikrocode-ROM 2132 abzuschließen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform beendet der Mikrocode-ROM 2132 die Sequenzierung von Mikro-Ops für eine Anweisung, wobei das Frontend 2101 der Maschine das Abholen von Mikro-Ops aus dem Trace-Cache 2130 wieder aufnehmen kann.
  • In mindestens einer Ausführungsform kann eine Außer-Betrieb bzw. Out-of-Order-Ausführungs-Maschine („Out-of-Order-Maschine“) 2103 Anweisungen zur Ausführung vorbereiten. In mindestens einer Ausführungsform weist die Out-of-Order-Ausführungslogik eine Anzahl von Puffern auf, um den Fluss von Anweisungen zu glätten und neu zu ordnen, um die Leistung zu optimieren, während sie eine Pipeline hinuntergehen und zur Ausführung eingeplant werden. Die Out-of-Order-Ausführungs-Maschine 2103 umfasst, ohne darauf beschränkt zu sein, einen Zuteiler/Registerumbenenner 2140, eine Speicher-Uop-Warteschlange 2142, eine Ganzzahl/Gleitkomma-Uop-Warteschlange 2144, einen Speicher-Planer 2146, einen Schnell-Planer 2102, einen Langsam/Universal-Gleitkomma-Planer („slow/general FP scheduler“) 2104 und einen einfachen Gleitkomma-Planer („simple FP scheduler“) 2106. In mindestens einer Ausführungsform werden der Schnell-Planer 2102, der Langsam/Universal-Gleitkomma-Planer 2104 und der Einfach-Gleitkomma-Planer 2106 hier auch kollektiv als „Uop-Planer 2102, 2104, 2106“ bezeichnet. Der Zuteiler/Registerumbenenner 2140 teilt Maschinenpuffer und Ressourcen zu, die jeder Uop zur Ausführung benötigt. In mindestens einer Ausführungsform benennt der Zuteiler/Registerumbenenner 2140 Logikregister auf Einträge in einer Registerdatei um. In mindestens einer Ausführungsform teilt der Zuteiler/Registerumbenenner 2140 auch einen Eintrag für jede Uop in einer von zwei Uop-Warteschlangen, der Speicher-Uop-Warteschlange 2142 für Speicheroperationen und der Ganzzahl/Gleitkomma-Uop-Warteschlange 2144 für Nichtspeicher-Operationen, vor dem Speicher-Planer 2146 und den Uop-Planern 2102, 2104, 2106 zu. In mindestens einer Ausführungsform bestimmen die Uop-Planer 2102, 2104, 2106 wann ein Uop ausführbereit ist, basierend auf der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit von Ausführungsressourcen, die Uops benötigen, um ihre Operation abzuschließen. In mindestens einer Ausführungsform kann der Schnell-Planer 2102 von mindestens einer Ausführungsform auf jeder Hälfte eines Haupttaktzyklus planen, während der Langsam/Universal-Gleitkomma-Planer 2104 und der Einfach-Gleitkomma-Planer 2106 einmal pro Hauptprozessortaktzyklus planen können. In mindestens einer Ausführungsform arbitrieren die Uop-Planer 2102, 2104, 2106 für Sende-Ports, um Uops zur Ausführung einzuplanen.
  • In mindestens einer Ausführungsform umfasst ein Ausführungsblock 2111, ohne darauf beschränkt zu sein, ein Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108, ein Gleitkomma-Registerdatei/Umgehungsnetzwerk („FP register file/bypass network“) 2110, Adresserzeugungseinheiten („AGUs“) 2112 und 2114, schnelle ALUs 2116 und 2118, eine langsame ALU 2112, eine Gleitkomma-ALU („FP“) 2122 und eine Gleitkomma-Bewegungseinheit („FP move“) 2124. In mindestens einer Ausführungsform werden das Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108 und das Gleitkomma-Registerdatei/Umgehungs-Netzwerk 2110 hier auch als „Registerdateien 2108, 2110“ bezeichnet. In mindestens einer Ausführungsform werden AGUSs 2112 und 2114, schnelle ALUs 2116 und 2118, die langsame ALU 2112, die Gleitkomma-ALU 2122 und die Gleitkomma-Bewegungseinheit 2124 auch als „Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122 und 2124“ bezeichnet. In mindestens einer Ausführungsform kann ein Ausführungsblock, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich Null) und Art von Registerdateien, Umgehungsnetzwerken, Adresserzeugungseinheiten und Ausführungseinheiten in beliebiger Kombination umfassen.
  • In mindestens einer Ausführungsform können Registerdateien 2108, 2110 zwischen Uop-Planern 2102, 2104, 2106 und Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122 und 2124 angeordnet sein. In mindestens einer Ausführungsform führt das Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108 Ganzzahl-Operationen aus. In mindestens einer Ausführungsform führt das Gleitkomma-Registerdatei/Umgehungs-Netzwerk 2110 Gleitkommaoperationen durch. In mindestens einer Ausführungsform kann jede der Registerdateien 2108, 2110, ohne darauf beschränkt zu sein, ein Umgehungs-Netzwerk umfassen, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, umgehen oder an neue abhängige Uops weiterleiten kann. In mindestens einer Ausführungsform können die Registerdateien 2108, 2110 Daten miteinander kommunizieren. In mindestens einer Ausführungsform kann das Ganzzahl-Registerdatei/Umgehungs-Netzwerk 2108, ohne darauf beschränkt zu sein, zwei separate Registerdateien, eine Registerdatei für 32 Datenbits niedriger Ordnung und eine zweite Registerdatei für 32 Datenbits hoher Ordnung, umfassen. In mindestens einer Ausführungsform kann das Gleitkomma-Registerdatei/Umgehungs-Netzwerk 2110, ohne darauf beschränkt zu sein, 128-Bit breite Einträge umfassen, weil Gleitkommaanweisungen typischerweise Operanden von 64 bis 128 Bit Breite aufweisen.
  • In mindestens einer Ausführungsform können die Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122, 2124 Anweisungen ausführen. In mindestens einer Ausführungsform speichern die Registerdateien 2108, 2110 Ganzzahl- und Gleitkomma-Daten-Operandenwerte, die Mikroanweisungen ausführen müssen. In mindestens einer Ausführungsform kann der Prozessor 2100, ohne darauf beschränkt zu sein, eine beliebige Anzahl und Kombination von Ausführungseinheiten 2112, 2114, 2116, 2118, 2112, 2122, 2124 umfassen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2122 und die Gleitkomma-Bewegungseinheit 2124 Gleitkomma-, MMX-, SIMD-, AVX- und SSE-Operationen oder andere Operationen ausführen. In mindestens einer Ausführungsform kann die Gleitkomma ALU 2122, ohne darauf beschränkt zu sein, einen 64-Bit mal 64-Bit-Gleitkommateiler umfassen, um Divisions-, Quadratwurzel- und Rest-Mikrooperationen auszuführen. In mindestens einer Ausführungsform können Anweisungen, die einen Gleitkommawert umfassen, von Gleitkomma-Hardware gehandhabt werden. In mindestens einer Ausführungsform können ALU-Operationen an schnelle ALUs 2116, 2118 übergeben werden. In mindestens einer Ausführungsform können schnelle ALUS 2116, 2118 schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. In mindestens einer Ausführungsform gehen die komplexesten Ganzzahl-Operationen auf die langsame ALU 2112 über, da die langsame ALU 2112, ohne darauf beschränkt zu sein, eine Ganzzahl-Ausführungshardware für Operationen mit langer Latenz umfassen kann, wie beispielsweise einen Multiplikator, einen Schieber, eine Flag- bzw. Kennzeichenbit-Logik und Zweigverarbeitung. In mindestens einer Ausführungsform können Speicher-Lade-/Speicher-Operationen von AGUs 2112, 2114 ausgeführt werden. In mindestens einer Ausführungsform können die schnelle ALU 2116, die schnelle ALU 2118 und die langsame ALU 2112 Ganzzahl-Operationen an 64-Bit-Datenoperanden durchführen. In mindestens einer Ausführungsform können die schnelle ALU 2116, die schnelle ALU 2118 und die langsame ALU 2120 implementiert sein, um eine Mehrzahl von Datenbitgrößen einschließlich sechzehn, zweiunddreißig, 128, 326 usw. zu unterstützen. In mindestens einer Ausführungsform können die Gleitkomma-ALU 2122 und die Gleitkomma-Bewegungseinheit 2124 implementiert sein, um eine Anzahl von Operanden mit Bits unterschiedlicher Breite zu unterstützen, wie beispielsweise 128-Bit breite gepackte Datenoperanden in Verbindung mit SIMD- und Multimedia-Anweisungen.
  • In mindestens einer Ausführungsform versenden die Uop-Planer 2102, 2104, 2106 abhängige Operationen, bevor die Ausführung einer Elternlast beendet ist. In mindestens einer Ausführungsform kann, da Uops spekulativ geplant und in dem Prozessor 2100 ausgeführt werden können, der Prozessor 2100 auch eine Logik zur Handhabung von Speicherfehlzugriffen umfassen. In mindestens einer Ausführungsform kann es dann, wenn eine Datenlast in einem Datencache fehlt, abhängige Operationen im Lauf der Pipeline geben, die einen Planer mit vorübergehend falschen Daten zurückgelassen haben. In mindestens einer Ausführungsform verfolgt ein Wiedergabemechanismus Anweisungen, die falsche Daten verwenden, und führt sie erneut aus. In mindestens einer Ausführungsform müssen abhängige Operationen möglicherweise wiedergegeben werden und unabhängige Operationen können abgeschlossen werden. In mindestens einer Ausführungsform können Planer und ein Wiedergabemechanismus von mindestens einer Ausführungsform eines Prozessors ebenfalls ausgelegt sein, um Anweisungssequenzen für Textkettenvergleichsoperationen abzufangen.
  • In mindestens einer Ausführungsform kann sich „Register“ auf On-Board-Prozessorspeicherplätze beziehen, die als Teil von Anweisungen zum Identifizieren von Operanden verwendet werden können. In mindestens einer Ausführungsform können Register diejenigen sein, die (aus der Sicht eines Programmierers) von außerhalb des Prozessors verwendbar sind. In mindestens einer Ausführungsform sind Register möglicherweise nicht auf einen bestimmten Schaltungstyp beschränkt. Vielmehr kann in mindestens einer Ausführungsform ein Register Daten speichern, Daten bereitstellen und die hier beschriebenen Funktionen ausführen. In mindestens einer Ausführungsform können hier beschriebene Register durch Schaltkreise innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl verschiedener Techniken implementiert werden, wie beispielsweise fest zugeordnete physikalische Register, dynamisch allokierte physikalische Register, die Registerumbenennung verwenden, Kombinationen von fest zugeordneten und dynamisch zugeordneten physikalischen Registern usw. In mindestens einer Ausführungsform speichern Ganzzahlregister 32-Bit-Ganzzahldaten. Eine Registerdatei mindestens einer Ausführungsform enthält darüber hinaus acht Multimedia-SIMD-Register für gepackte Daten.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 22 veranschaulicht einen Prozessor 2200 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst der Prozessor, ohne darauf beschränkt zu sein, einen oder mehrere Prozessorkerne 2202A-2202N, einen integrierten Speichercontroller 2214 und einen integrierten Graphikprozessor 2208. In mindestens einer Ausführungsform kann der Prozessor 2200 zusätzliche Kerne bis zu und einschließlich des zusätzlichen Prozessorkerns 2202N umfassen, die durch gestrichelte, linierte Kästen dargestellt sind. In mindestens einer Ausführungsform umfasst jeder der Prozessorkerne 2202A-2202N eine oder mehrere interne Cache-Einheiten 2204A-2204N. In mindestens einer Ausführungsform weist jeder Prozessorkern auch Zugriff auf eine oder mehrere gemeinsam genutzte Cache-Einheiten 2206 auf.
  • In mindestens einer Ausführungsform stellen die internen Cache-Einheiten 2204A-2204N und die gemeinsam genutzten Cache-Einheiten 2206 eine Cache-Speicherhierarchie innerhalb des Prozessors 2200 dar. In mindestens einer Ausführungsform können die Cache-Speichereinheiten 2204A-2204N mindestens eine Anweisungs- und Daten-Cache-Ebene innerhalb jedes Prozessorkerns und eine oder mehrere Ebenen gemeinsam genutzten Mid-Level-Caches, wie beispielsweise ein Level 2 (L2), ein Level 3 (L3), ein Level 4 (L4) oder andere Cache-Ebenen, umfassen, wobei eine höchste Cache-Ebene vor dem externen Speicher als eine LLC klassifiziert ist. In mindestens einer Ausführungsform behält die Cache-Kohärenzlogik Kohärenz zwischen den verschiedenen Cache-Einheiten 2206 und 2204A-2204N bei.
  • In mindestens einer Ausführungsform kann der Prozessor 2200 auch einen Satz einer oder mehrerer Bus-Controller-Einheiten 2216 und einen System-Agent-Kern 2210 umfassen. In mindestens einer Ausführungsform verwalten eine oder mehrere Bus-Controller-Einheiten 2216 einen Satz von Peripheriebussen, wie beispielsweise einen oder mehrere PCI- oder PCI-Express-Busse. In mindestens einer Ausführungsform stellt der System-Agent-Kern 2210 Verwaltungsfunktionen für verschiedene Prozessorkomponenten zur Verfügung. In mindestens einer Ausführungsform umfasst der System-Agent-Kern 2210 eine oder mehrere integrierte Speichercontroller 2214, um den Zugriff auf verschiedene externe Speichervorrichtungen (nicht gezeigt) zu verwalten.
  • In mindestens einer Ausführungsform umfassen einer oder mehrere der Prozessorkerne 2202A-2202N Unterstützung für gleichzeitiges Multithreading. In mindestens einer Ausführungsform umfasst der System-Agent-Kern 2210 Komponenten zum Koordinieren und Betreiben der Kerne 2202A-2202N während der Multithreading-Verarbeitung. In mindestens einer Ausführungsform kann der System-Agent-Kern 2210 zusätzlich eine Leistungssteuereinheit (PCU) umfassen, die Logik und Komponenten zum Regeln eines oder mehrerer Leistungszustände der Prozessorkerne 2202A-2202N und des Graphikprozessors 2208 umfasst.
  • In mindestens einer Ausführungsform umfasst der Prozessor 2200 zusätzlich den Graphikprozessor 2208, um Graphikverarbeitungsoperationen auszuführen. In mindestens einer Ausführungsform koppelt der Graphikprozessor 2208 mit den gemeinsam genutzten Cache-Einheiten 2206 und dem System-Agent-Kern 2210, einschließlich eines oder mehrerer integrierter Speichercontroller 2214. In mindestens einer Ausführungsform umfasst der System-Agent-Kern 2210 auch einen Anzeige-Controller 2211, um die Graphikprozessorausgabe auf eine oder mehrere gekoppelte Anzeigen zu treiben. In mindestens einer Ausführungsform kann der Anzeige-Controller 2211 auch ein separates Modul sein, das über mindestens eine Zwischenverbindung mit dem Graphikprozessor 2208 gekoppelt ist oder in den Graphikprozessor 2208 integriert sein kann.
  • In mindestens einer Ausführungsform wird eine ringbasierte Zwischenverbindungseinheit 2212 verwendet, um interne Komponenten des Prozessors 2200 zu koppeln. In mindestens einer Ausführungsform kann eine alternative Verbindungseinheit verwendet werden, wie beispielsweise eine Punkt-zu-Punkt-Zwischenverbindung, eine geschaltete Zwischenverbindung oder andere Techniken. In mindestens einer Ausführungsform koppelt der Graphikprozessor 2208 über eine E/A-Verbindung 2213 mit der Ring-Zwischenverbindung 2212.
  • In mindestens einer Ausführungsform stellt die E/A-Verbindung 2213 mindestens eine von mehreren Varianten von E/A-Zwischenverbindungen dar, einschließlich einer E/A-Zwischenverbindung auf dem Gehäuse, welche die Kommunikation zwischen verschiedenen Prozessorkomponenten und einem eingebetteten Hochleistungsspeichermodul 2218, wie beispielsweise einem eDRAM-Modul, erleichtert. In mindestens einer Ausführungsform verwenden jeder der Prozessorkerne 2202A-2202N und der Graphikprozessor 2208 eingebettete Speichermodule 2218 als einen gemeinsam genutzten Cache letzter Ebene bzw. Last Level Cache.
  • In mindestens einer Ausführungsform sind die Prozessorkerne 2202A-2202N homogene Kerne, die eine gemeinsame Anweisungssatzarchitektur ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2202A-2202N heterogen in Bezug auf die Anweisungssatzarchitektur (Instruction Set Architecture; ISA), wobei einer oder mehrere der Prozessorkerne 2202A-2202N einen gemeinsamen Anweisungssatz ausführen, während ein oder mehrere andere Kerne der Prozessorkerne 2202A-2202N eine Teilmenge eines gemeinsamen Anweisungssatzes oder einen bzw. eines anderen Anweisungssatzes ausführen. In mindestens einer Ausführungsform sind die Prozessorkerne 2202A-2202N in Bezug auf Mikroarchitektur heterogen, wobei ein oder mehrere Kerne mit einem relativ höheren Stromverbrauch mit einem oder mehreren Leistungskernen mit einem niedrigeren Stromverbrauch koppeln. In mindestens einer Ausführungsform kann der Prozessor 2200 auf einem oder mehreren Chips oder als eine in einem SoC integrierte Schaltung implementiert sein.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 23 veranschaulicht einen Graphikprozessorkerns 2300 gemäß mindestens einer beschriebenen Ausführungsform. In mindestens einer Ausführungsform ist der Graphikprozessorkern 2300 innerhalb einer Graphikkernanordnung enthalten. In mindestens einer Ausführungsform kann der Graphikprozessorkern 2300, manchmal auch als ein Kern-Slice bezeichnet, ein oder mehrere Graphikkerne innerhalb eines modularen Graphikprozessors sein. In mindestens einer Ausführungsform ist der Graphikprozessorkern 2300 beispielhaft für ein Graphikkern-Slice, und ein Graphikprozessor, wie hier beschrieben, kann mehrere Graphikkern-Slices basierend auf einer Sollleistung und Leistungshüllen umfassen. In mindestens einer Ausführungsform kann jeder Graphikkern 2300 einen Festfunktionsblock 2230 umfassen, der mit mehreren, auch als Sub-Slices bezeichneten Unterkernen 2301A-2301F gekoppelt ist, die modulare Blöcke von Allzweck- und Festfunktionslogik umfassen.
  • In mindestens einer Ausführungsform umfasst der Festfunktionsblock 2230 eine Geometrie/Festfunktions-Pipeline 2236, die von allen Unterkernen in dem Graphikprozessor 2300 beispielsweise bei Implementierungen von Graphikprozessoren mit geringerer Leistung und/oder geringerer Stromaufnahme gemeinsam genutzt werden kann. In mindestens einer Ausführungsform umfasst die Geometrie/Festfunktions-Pipeline 2236 eine 3D-Festfunktions-Pipeline, eine Video-Frontend-Einheit, einen Thread-Spawner und Thread-Dispatcher sowie einen Unified Return Buffer Manager, der vereinheitlichte Rückgabepuffer verwaltet.
  • In mindestens einer Ausführungsform umfasst der Festfunktionsblock 2230 auch eine Graphik-SoC-Schnittstelle 2233, einen Graphik-Mikrocontroller 2238 und eine Medien-Pipeline 2239. Die Graphik-SoC-Schnittstelle 2237 stellt eine Schnittstelle zwischen dem Graphikkern 2300 und anderen Prozessorkernen innerhalb einer integrierten SoC-Schaltung bereit. In mindestens einer Ausführungsform ist der Graphik-Mikrocontroller 2238 ein programmierbarer Subprozessor, der konfiguriert sein kann, um verschiedene Funktionen des Graphikprozessors 2300 zu verwalten, einschließlich der Thread-Versendung, des Scheduling und der Präemption. In mindestens einer Ausführungsform umfasst die Medien-Pipeline 2239 Logik zur Erleichterung der Decodierung, Codierung, Vorverarbeitung und/oder Nachbearbeitung von Multimedia-Daten, einschließlich Bild- und Videodaten. In mindestens einer Ausführungsform implementiert die Medien-Pipeline 2239 Medienoperationen über Anforderungen, um Logik innerhalb der Unterkerne 2301-2301F zu berechnen oder abzutasten.
  • In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 2337 dem Graphikkern 2300, mit universellen Anwendungsprozessorkernen (z.B. CPUs) und/oder anderen Komponenten innerhalb eines SoC, einschließlich Speicherhierarchieelementen, wie beispielsweise gemeinsam genutztem Last Level Cache-Speicher, System-RAM und/oder eingebettetem On-Chip- oder On-Package-DRAM, zu kommunizieren. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 2337 auch eine Kommunikation mit Vorrichtungen mit fester Funktion innerhalb eines SoC ermöglichen, wie beispielsweise Kameraabbildung-Pipelines, und ermöglicht die Verwendung und/oder Implementierung globaler Speicher-Atome, die zwischen dem Graphikkern 2300 und CPUs innerhalb eines SoC gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann die SoC-Schnittstelle 2337 auch Energieverwaltungssteuerungen für den Graphikkern 2300 implementieren und eine Schnittstelle zwischen einer Taktdomäne des Graphikkerns 2300 und anderen Taktdomänen innerhalb eines SoC ermöglichen. In mindestens einer Ausführungsform ermöglicht die SoC-Schnittstelle 2337 den Empfang von Befehlspuffern von einem Befehlsstreamer und einem globalen Thread-Versender, die konfiguriert sind, um Befehle und Anweisungen an jeden eines einzelnen oder mehrerer Graphikkerne innerhalb eines Graphikprozessors bereitzustellen. In mindestens einer Ausführungsform können Befehle und Anweisungen an die Medien-Pipeline 2339, wenn Medienoperationen durchgeführt werden sollen, oder an eine Geometrie/Festfunktions-Pipeline (z.B. Geometrie/Festfunktions-Pipeline 2336, Geometrie/Festfunktions-Pipeline 2314), wenn Graphikverarbeitungsoperationen durchgeführt werden sollen, gesendet werden.
  • In mindestens einer Ausführungsform kann der Graphik-Mikrocontroller 2338 konfiguriert sein, um verschiedene Planungs- und Verwaltungsaufgaben für den Graphikkern 2300 auszuführen. In mindestens einer Ausführungsform kann der Graphik-Mikrocontroller 2338 eine Graphik- und/oder Rechen-Arbeitslast-Planung auf verschiedenen parallelen Graphik-Maschinen innerhalb der Ausführungseinheit (EU)-Anordnungen 2302A-2302F, 2304A-2304F innerhalb der Unterkerne 2301A-2301F durchführen. In mindestens einer Ausführungsform kann Host-Software, die auf einem CPU-Kern eines SoC mit dem Graphikkern 2300 ausgeführt wird, Arbeitslasten einer von mehreren Graphikprozessorpfaden übergeben, welche einen Planungsvorgang auf einer geeigneten Graphik-Maschine auslösen. In mindestens einer Ausführungsform umfassen Planungsoperationen ein Bestimmen, welche Arbeitslast als nächstes auszuführen ist, ein Übermitteln einer Arbeitslast an einen Befehlsstreamer, ein Vorbelegen existierender Arbeitslasten, die auf einer Maschine ausgeführt werden, ein Überwachen des Fortschreitens einer Arbeitslast und ein Benachrichtigen der Host-Software, wenn eine Arbeitslast abgeschlossen ist. In mindestens einer Ausführungsform kann der Graphik-Mikrocontroller 2338 auch Zustände mit geringer Stromaufnahme oder Leerlaufzustände für den Graphikkern 2300 ermöglichen, die dem Graphikkern 2300 die Möglichkeit geben, Register innerhalb des Graphikkerns 2300 über Zustandsübergänge mit geringem Stromverbrauch unabhängig von einem Betriebssystem und/oder einer Graphiktreibersoftware auf einem System zu speichern und wiederherzustellen.
  • In mindestens einer Ausführungsform kann der Graphikkern 2300 mehr als oder weniger als die veranschaulichten Unterkerne 2301A-2301F und bis zu N modularen Unterkernen aufweisen. Für jeden Satz von N-Unterkernen kann der Graphikkern 2300 in mindestens einer Ausführungsform auch eine gemeinsam genutzte Funktionslogik 2310, einen gemeinsam genutzten und/oder Cache-Speicher 2312, eine Geometrie/Festfunktions-Pipeline 2314 sowie zusätzliche Festfunktionslogik 2316 zur Beschleunigung verschiedener Graphik- und Rechenverarbeitungsoperationen umfassen. In mindestens einer Ausführungsform kann die gemeinsam genutzte Funktionslogik 2310 Logikeinheiten (z.B. Abtaster-, Mathematik- und/oder Inter-Thread-Kommunikationslogik) umfassen, die von allen N Unterkernen innerhalb des Graphikkerns 2300 gemeinsam genutzt werden können. In mindestens einer Ausführungsform kann der gemeinsam genutzte und/oder Cache-Speicher 2312 ein Last-Level-Cache für die N Unterkerne 2301A-2301F innerhalb des Graphikkerns 2300 sein und kann ebenfalls als gemeinsam genutzter Speicher dienen, auf den mehrere Unterkerne zugreifen können. In mindestens einer Ausführungsform kann die Geometrie/Festfunktions-Pipeline 2314 anstelle der Geometrie/Festfunktions-Pipeline 2336 innerhalb des Festfunktionsblocks 2330 aufgenommen sein und kann gleiche oder ähnliche Logikeinheiten umfassen.
  • In mindestens einer Ausführungsform umfasst der Graphikkern 2300 eine zusätzliche Festfunktionslogik 2316, die verschiedene Festfunktionsbeschleunigungslogik zur Verwendung durch den Graphikkern 2300 umfassen kann. In mindestens einer Ausführungsform umfasst die zusätzliche Festfunktionslogik eine zusätzliche Geometrie-Pipeline zur Verwendung in Nur-Positions-Shading. Bei dem Nur-Positions-Shading existieren mindestens zwei Geometrie-Pipelines, wohin gehend in einer Vollgeometrie-Pipeline innerhalb der Geometrie/Festfunktions-Pipeline 2316, 2336, und eine Cull-Pipeline, welche eine zusätzliche Geometrie-Pipeline ist, welche innerhalb der zusätzlichen Festfunktionslogik 2316 umfasst sein kann. In mindestens einer Ausführungsform ist die Cull-Pipeline eine abgespeckte Version einer Vollgeometrie-Pipeline. In mindestens einer Ausführungsform können eine Vollpipeline und eine Cull-Pipeline verschiedene Instanzen einer Anwendung ausführen, wobei jede Instanz einen separaten Kontext hat. In mindestens einer Ausführungsform kann das Nur-Positions-Shading lange Cull-Läufe von verworfenen Dreiecken verbergen, so dass das Shading in einigen Fällen früher abgeschlossen werden kann. Beispielsweise kann in mindestens einer Ausführungsform die Cull-Pipeline-Logik innerhalb der zusätzlichen Festfunktionslogik 2316 Positions-Shader parallel zu einer Hauptanwendung ausführen und erzeugt im Allgemeinen kritische Ergebnisse schneller als eine Vollpipeline, da die Cull-Pipeline das Attribut der Position von Vertices holt und schattiert, ohne eine Rasterung und ein Rendern von Pixeln in einem Einzelbild-Puffer durchzuführen. In mindestens einer Ausführungsform kann die Cull-Pipeline erzeugte kritische Ergebnisse verwenden, um Sichtbarkeitsinformationen für alle Dreiecke unabhängig davon zu berechnen, ob diese Dreiecke gecullt werden. In mindestens einer Ausführungsform kann eine Vollpipeline (welche in diesem Fall als eine Wiedergabepipeline bezeichnet werden kann) Sichtbarkeitsinformationen verbrauchen, um gecullte Dreiecke zu überspringen, um nur sichtbare Dreiecke zu schattieren, die schließlich an eine Rasterungsphase übergeben werden.
  • In mindestens einer Ausführungsform kann die zusätzliche Festfunktionslogik 2316 auch eine Allzweck-Verarbeitungsbeschleunigungslogik, wie beispielsweise eine Festfunktion-Matrix-Multiplikationslogik, zum Beschleunigen von CUDA-Programmen umfassen.
  • In mindestens einer Ausführungsform umfasst jeder Graphik-Unterkern 2301A-2301F einen Satz von Ausführungsressourcen, die verwendet werden können, um Graphik-, Medien- und Rechenoperationen als Reaktion auf Anfragen von der Graphikpipeline, der Medien-Pipeline oder von Shader-Programmen durchzuführen. In mindestens einer Ausführungsform umfassen die Graphik-Unterkerne 2301A-2301F mehrere EU-Arrays 2302A-2302F, 2304A-2304F, Thread-Abfertigungs- und Inter-Thread-Kommunikationslogik (Thread Dispatch and Inter-Thread Communication; „TD/IC“) 2303A-2303F, einen 3D-(z.B. Textur-)Abtaster 2305A-2305F, einen Medien-Abtaster 2306A-2306F, einen Shaderprozessor 2307A-2307F und einen gemeinsam benutzten lokalen Speicher (Shared Local Memory; „SLM“) 2308A-2308F. Die EU-Arrays 2302A-2302F, 2304A-2304F umfassen jeweils mehrere Ausführungseinheiten, welche universelle Graphikverarbeitungseinheiten sind, die in der Lage sind, Gleitkomma- und Ganzzahl/Festpunkt-Logikoperationen im Dienst einer Graphik-, Medien- oder Rechenoperation durchzuführen, einschließlich von Graphik-, Medien- oder Rechen-Shader-Programmen. In mindestens einer Ausführungsform führt eine TD/IC-Logik 2303A-2303F lokale Thread-Abfertigungs- und Thread-Steuer-Operationen für Ausführungseinheiten innerhalb eines Unterkerns durch und erleichtert die Kommunikation zwischen Threads, die auf Ausführungseinheiten eines Unterkerns ausgeführt werden. In mindestens einer Ausführungsform kann der 3D-Abtaster 2305A-2305F Texturen oder andere 3D-Graphik-bezogene Daten in den Speicher einlesen. In mindestens einer Ausführungsform kann der 3D-Abtaster Texturdaten unterschiedlich lesen, basierend auf einem konfigurierten Abtastzustand und einem Texturformat, das einer bestimmten Textur zugeordnet ist. In mindestens einer Ausführungsform kann der Medien-Abtaster 2306A-2306F ähnliche Leseoperationen durchführen, die auf einem Typ und einem Format basieren, der/das Mediendaten zugeordnet ist. In mindestens einer Ausführungsform kann jeder Graphik-Unterkern 2301A-2301F abwechselnd einen vereinheitlichten 3D- und Medien-Abtaster umfassen. In mindestens einer Ausführungsform können Threads, die auf Ausführungseinheiten innerhalb jedes der Unterkerne 2301A-2301F ausgeführt werden, den gemeinsam genutzten lokalen Speicher 2308A-2308F innerhalb jedes Unterkerns verwenden, um Threads, die innerhalb einer Thread-Gruppe ausgeführt werden, die Ausführung unter Verwendung eines gemeinsamen Pools von On-Chip-Speicher zu ermöglichen.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 24 veranschaulicht eine Parallelverarbeitungs-Einheit („PPU“) 2400 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist die PPU 2400 mit einem maschinenlesbarem Code konfiguriert, der, falls von der PPU 2400 ausgeführt, die PPU 2400 veranlasst, einige oder sämtliche der Prozesse und Techniken durchzuführen, die in dieser Offenbarung durchweg beschrieben sind. In mindestens einer Ausführungsform ist die PPU 2400 ein Multi-Threaded-Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist, und der Multi-Threading als eine Latenz-verbergende Architektur benutzt, die ausgestaltet ist, um computerlesbare Anweisungen (auch als maschinenlesbare Anweisungen oder einfach als Anweisungen bezeichnet) an mehreren Threads parallel zu verarbeiten. In mindestens einer Ausführungsform bezieht sich ein Thread auf einen Ausführungsthread und ist eine Instanziierung eines Satzes von Anweisungen, die konfiguriert sind, um von der PPU 2400 ausgeführt zu werden. In mindestens einer Ausführungsform ist die PPU 2400 eine Graphikverarbeitungseinheit („GPU“), die konfiguriert ist, um eine Graphik-Rendering-Pipeline zur Verarbeitung von dreidimensionalen („3D“) Graphikdaten zu implementieren, um zweidimensionale („2D“) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeige(„LCD“)-Vorrichtung, zu erzeugen. In mindestens einer Ausführungsform wird die PPU 2400 benutzt, um Rechnungen, wie beispielsweise Operationen der linearen Algebra und Operationen des Maschinenlernens durchführen. 24 veranschaulicht einen beispielhaften parallelen Prozessor lediglich für veranschaulichende Zwecke und sollte als ein nicht einschränkendes Beispiel von Prozessorarchitekturen ausgelegt werden, die in mindestens einer Ausführungsform implementiert werden kann.
  • In mindestens einer Ausführungsform sind eine oder mehrere PPUs 2400 konfiguriert, um HPC(High Performance Computing), Rechenzentrum und Maschinenlern-Anwendungen zu beschleunigen. In mindestens einer Ausführungsform sind eine oder mehrere PPUs 2400 konfiguriert, um CUDA-Programme zu beschleunigen. In mindestens einer Ausführungsform umfasst die PPU 2400, ohne darauf beschränkt zu sein, eine Eingabe/Ausgabe(„E/A“)-Einheit 2406, eine Frontend-Einheit 2410, eine Planer-Einheit 2412, eine Arbeitsverteilungs-Einheit 2414, einen Hub 2416, eine Kreuzschiene („XBar“) 2420, einen oder mehrere allgemeine Verarbeitungscluster („GPCs“) 2418 und eine oder mehrere Partitions-Einheiten („Speicherpartitions-Einheiten“) 2422. In mindestens einer Ausführungsform ist die PPU 2400 mit einem Host-Prozessor oder anderen PPUs 2400 über eine oder mehrere Hochgeschwindigkeits-GPU-Zwischenverbindungen („GPU-Zwischenverbindungen“) 2408 verbunden. In mindestens einer Ausführungsform ist die PPU 2400 mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über eine Zwischenverbindung 2402 verbunden. In mindestens einer Ausführungsform ist die PPU 2400 mit einem lokalen Speicher verbunden, der eine oder mehrere Speichervorrichtungen („Speicher“) 2404 umfasst. In mindestens einer Ausführungsform umfassen die Speichervorrichtungen 2404, ohne darauf beschränkt zu sein, eine oder mehrere Direktzugriffsspeicher(„DRAM“)-Vorrichtungen. In mindestens einer Ausführungsform sind eine oder mehrere DRAM-Vorrichtungen als HBM(Speicher mit hoher Bandbreite)-Teilsysteme konfiguriert und/oder konfigurierbar, wobei mehrere DRAM-Dies innerhalb jeder Vorrichtung gestapelt sind.
  • In mindestens einer Ausführungsform kann sich die Hochgeschwindigkeits-GPU-Zwischenverbindung 2408 auf eine drahtgebundene mehrspurige Kommunikationsverbindung beziehen, die von Systemen verwendet wird, um eine oder mehrere PPUs 2400 zu skalieren und zu umfassen, die mit einer oder mehreren zentralen Verarbeitungseinheiten („CPUs“) kombiniert sind, unterstützt Cache-Kohärenz zwischen den PPUs 2400 und CPUs sowie CPU-Mastering. In mindestens einer Ausführungsform werden Daten und/oder Befehle mittels der Hochgeschwindigkeits-GPU-Zwischenverbindung 2408 durch den Hub 2416 an/von anderen Einheiten der PPU 2400 übertragen, wie beispielsweise eine oder mehrere Kopier-Maschinen, Videocodierer, Videodecodierer, Leistungsverwaltungseinheiten und andere Komponenten, die in 24 nicht explizit veranschaulicht werden können.
  • In mindestens einer Ausführungsform ist die E/A-Einheit 2406 konfiguriert, um Kommunikationen (d.h. Befehle, Daten usw.) von einem Host-Prozessor (in 24 nicht gezeigt) über den Systembus 2402 zu übertragen und zu empfangen. In mindestens einer Ausführungsform kommuniziert die E/A-Einheit 2406 mit dem Host-Prozessor direkt über den Systembus 2402 oder durch eine oder mehrere Zwischenvorrichtungen, wie beispielsweise eine Speicherbrücke. In mindestens einer Ausführungsform kann die E/A-Einheit 2406 mit einem oder mehreren anderen Prozessoren, wie beispielsweise einer oder mehreren PPUs, über den Systembus 2402 kommunizieren. In mindestens einer Ausführungsformen implementiert die E/A-Einheit 2406 eine PCIe-Schnittstelle für Kommunikationen über einen PCIe-Bus. In mindestens einer Ausführungsform implementiert die E/A-Einheit 2406 Schnittstellen zum Kommunizieren mit externen Vorrichtungen.
  • In mindestens einer Ausführungsform decodiert die E/A-Einheit 2406 Pakete, die über den Systembus 2402 empfangen wurden. In mindestens einer Ausführungsform stellen mindestens einige Pakete Befehle dar, die konfiguriert sind, um die PPU 2400 zu veranlassen, verschiedene Operationen durchzuführen. In mindestens einer Ausführungsform überträgt die E/A-Einheit 2406 decodierte Befehle an verschiedene andere Einheiten der PPU 2400, wie durch Befehle spezifiziert. In mindestens einer Ausführungsform werden Befehle an die Frontend-Einheit 2410 und/oder an den Hub 2416 oder andere Einheiten der PPU 2400 übertragen, wie beispielsweise eine oder mehrere Kopier-Maschinen, einen Video-Codierer, einen Video-Decodierer, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt). In mindestens einer Ausführungsform ist die E/A-Einheit 2406 konfiguriert, um Kommunikationen zwischen und unter verschiedenen logischen Einheiten der PPU 2400 weiterzuleiten.
  • In mindestens einer Ausführungsform codiert ein von dem Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, welcher der PPU 2400 Arbeitslasten zur Verarbeitung bereitstellt. In mindestens einer Ausführungsform umfasst eine Arbeitslast Anweisungen und Daten, die durch diese Anweisungen zu verarbeiten sind. In mindestens einer Ausführungsform ist der Puffer eine Region in einem Speicher, der von sowohl dem Host-Prozessor als auch der PPU 2400 zugänglich ist (d.h. Lesen/Schreiben) - eine Host-Schnittstelleneinheit kann konfiguriert sein, um auf diesen Puffer in einem Systemspeicher, der mit dem Systembus 2402 verbunden ist, über Speicheranforderungen zuzugreifen, die über den Systembus 2402 durch die E/A-Einheit 2406 übertragen werden. In mindestens einer Ausführungsform schreibt ein Host-Prozessor einen Befehlsstrom in einen Puffer und überträgt dann einen Zeiger zu einem Start des Befehlsstroms an die PPU 2400, so dass die Frontend-Einheit 2410 Zeiger zu einem oder mehreren Befehlsströme empfängt und einen oder mehrere Ströme verwaltet, Befehle aus den Befehlsströmen liest und Befehle an verschiedene Einheiten der PPU 2400 weiterleitet.
  • In mindestens einer Ausführungsform ist die Frontend-Einheit 2410 mit einer Planer-Einheit 2412 gekoppelt, die verschiedene GPCs 2418 konfiguriert, um Aufgaben zu verarbeiten, die durch einen oder mehrere Befehlsströme definiert sind. In mindestens einer Ausführungsform ist die Planer-Einheit 2412 konfiguriert, um Zustandsinformation zu verfolgen, die verschiedene Aufgaben betrifft, die von der Planer-Einheit 2412 verwaltet werden, wobei die Zustandsinformation angeben kann, welchem der GPCs 2418 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, ob der Aufgabe ein Prioritätsniveau zugeordnet ist, und so weiter. In mindestens einer Ausführungsform verwaltet die Planer-Einheit 2412 die Ausführung mehrerer Aufgaben auf einem oder mehreren der GPCs 2418.
  • In mindestens einer Ausführungsform ist die Planer-Einheit 2412 mit einer Arbeitsverteilungs-Einheit 2414 gekoppelt, die konfiguriert ist, um Aufgaben zur Ausführung auf GPCs 2418 abzufertigen. In mindestens einer Ausführungsform verfolgt die Arbeitsverteilungs-Einheit 2414 eine Anzahl von eingeplanten Aufgaben, die von der Planer-Einheit 2412 empfangen werden, und die Arbeitsverteilungs-Einheit 2414 verwaltet einen Pool für anstehende Aufgaben und einen Pool für aktive Aufgaben für jeden der GPCs 2418. In mindestens einer Ausführungsform umfasst der Pool für anstehende Aufgaben eine Anzahl von Schlitzen (z.B. 32 Schlitze), die Aufgaben enthalten, die zugewiesen sind, um von einem bestimmten GPC 2418 verarbeitet zu werden; ein Pool für aktive Aufgaben kann eine Anzahl von Schlitzen (z.B. 4 Schlitze) für Aufgaben umfassen, die von den GPCs 2418 aktiv verarbeitet werden, so dass, wenn einer der GPCs 2418 die Ausführung einer Aufgabe abschließt, diese Aufgabe aus dem Pool für aktive Aufgaben für den GPC 2418 geräumt wird und eine der anderen Aufgaben aus dem Pool für anstehende Aufgaben ausgewählt und zur Ausführung auf dem GPC 2418 eingeplant wird. In mindestens einer Ausführungsform, wenn eine aktive Aufgabe auf dem GPC 2418 inaktiv ist, wie beispielsweise während darauf gewartet wird, dass eine Datenabhängigkeit behoben wird, dann wird die aktive Aufgabe aus dem GPC 2418 geräumt und zu dem Pool für anstehende Aufgaben zurückgeführt, während eine andere Aufgabe in diesem Pool für anstehende Aufgaben ausgewählt und zur Ausführung auf dem GPC 2418 eingeplant wird.
  • In mindestens einer Ausführungsform kommuniziert die Arbeitsverteilungs-Einheit 2414 mit einem oder mehreren GPCs 2418 über die Kreuzschiene bzw. XBar 2420. In mindestens einer Ausführungsform ist die XBar 2420 ein Zwischenverbindung-Netzwerk, das viele der Einheiten der PPU 2400 mit anderen Einheiten der PPU 2400 koppelt und konfiguriert sein kann, um die Arbeitsverteilungs-Einheit 2414 mit einem bestimmten GPC 2418 zu koppeln. In mindestens einer Ausführungsform können eine oder mehrere andere Einheiten der PPU 2400 ebenfalls mit der XBar 2420 über den Hub 2416 verbunden sein.
  • In mindestens einer Ausführungsform werden Aufgaben von der Planer-Einheit 2412 verwaltet und an einen der GPCs 2418 durch die Arbeitsverteilungs-Einheit 2414 gesendet. In mindestens einer Ausführungsform ist der GPC 2418 konfiguriert, um eine Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. In mindestens einer Ausführungsform können Ergebnisse von anderen Aufgaben innerhalb des GPC 2418 konsumiert werden, an einen unterschiedlichen GPC 2418 über die XBar 2420 weitergeleitet oder im Speicher 2404 gespeichert werden. In mindestens einer Ausführungsform können Ergebnisse in den Speicher 2404 über Partitions-Einheiten 2422 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 2404 implementieren. In mindestens einer Ausführungsform können Ergebnisse an eine andere PPU 2404 oder CPU über die Hochgeschwindigkeit-GPU-Zwischenverbindung 2408 übertragen werden. In mindestens einer Ausführungsform umfasst die PPU, ohne darauf beschränkt zu sein, eine Anzahl U von Partitionseinheiten 2422, die gleich einer Anzahl von getrennten und unterschiedlichen Speichervorrichtungen 2404 ist, die mit der PPU 2400 gekoppelt sind.
  • In mindestens einer Ausführungsform führt ein Host-Prozessor einen Treiberkernel aus, der eine Anwendungsprogrammmier-Schnittstelle („API“) implementiert, die einer oder mehreren Anwendungen ermöglicht, auf dem Host-Prozessor ausgeführt werden, um Operationen zur Ausführung auf der PPU 2400 einzuplanen. In mindestens einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 2400 ausgeführt und die PPU 2400 stellt Isolierung, Dienstqualität („QoS“) und unabhängige Adressräume für mehrere Rechenanwendungen bereit. In mindestens einer Ausführungsform erzeugt eine Anwendung Anweisungen (z.B. in Form von API-Aufrufen), die einen Treiberkernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 2400 zu erzeugen, und der Treiberkernel gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 2400 verarbeitet werden. In mindestens einer Ausführungsform umfasst jede Aufgabe eine oder mehrere Gruppen von in Beziehung stehender Threads, die als ein Warp bezeichnet werden können. In mindestens einer Ausführungsform umfasst ein Warp mehrere in Beziehung stehende Threads (z.B. 32 Threads), die parallel ausgeführt werden können. In mindestens einer Ausführungsform können sich kooperierende Threads auf mehrere Threads beziehen, die Anweisungen umfassen, um eine Aufgabe durchzuführen, und die Daten durch einen gemeinsam genutzten Speicher austauschen.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 25 veranschaulicht einen GPC 2500 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der GPC 2500 der GPC 2418 von 24. In mindestens einer Ausführungsform umfasst jeder GPC 2500, ohne darauf beschränkt zu sein, eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben, und jeder GPC 2500 umfasst, ohne darauf beschränkt zu sein, einen Pipeline-Manager 2502, eine Vor-Raster-Operationen-Einheit („PROP“) 2504, eine Raster-Maschine 2508, eine Arbeitsverteilungs-Kreuzschiene („WDX“) 2516, eine MMU 2518 und einen oder mehrere Datenverarbeitungscluster (Data Processing Clusters; „DPCs“) 2506 und jede geeignete Kombination von Teilen.
  • In mindestens einer Ausführungsform wird der Betrieb des GPC 2500 durch den Pipeline-Manager 2502 gesteuert. In mindestens einer Ausführungsform verwaltet der Pipeline-Manager 2502 die Konfiguration eines oder mehrerer DPCs 2506 zur Verarbeitung von Aufgaben, die dem GPC 2500 zugeteilt sind. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2502 mindestens einen von einem oder mehreren DPCs 2506, um mindestens einen Abschnitt einer Graphik-Rendering-Pipeline zu implementieren. In mindestens einer Ausführungsform ist ein DPC 2506 konfiguriert, um ein Vertex-Shader-Programm auf einem programmierbaren Streaming-Multiprozessor („SM“) 2514 auszuführen. In mindestens einer Ausführungsform ist der Pipeline-Manager 2502 konfiguriert, um Pakete, die von einer Arbeitsverteilungs-Einheit empfangen werden, in mindestens einer Ausführungsform an geeignete logische Einheiten innerhalb des GPC 2500 weiterzuleiten, und in mindestens einer Ausführungsform können einige Pakete an Festfunktions-Hardwareeinheiten in dem PROP 2504 und/oder der Raster-Maschine 2508 weitergeleitet werden, während andere Pakete an DPCs 2506 zur Verarbeitung durch eine Primitiven-Maschine 2512 oder den SM 2514 weitergeleitet werden können. In mindestens einer Ausführungsform konfiguriert der Pipeline-Manager 2502 mindestens einen der DPCs, um mindestens einen Abschnitt eines CUDA-Programms auszuführen.
  • In mindestens einer Ausführungsform ist die PROP-Einheit 2504 konfiguriert, um Daten, die von der Raster-Maschine 2508 und den DPCs 2506 erzeugt wurden, an eine Raster-Operationen(„ROP“)-Einheit in der Partitions-Einheit weiterzuleiten, die oben ausführlicher in Verbindung mit 24 beschrieben ist. In mindestens einer Ausführungsform ist die PROP-Einheit 2504 konfiguriert, um Optimierungen zur Farbenmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen und mehr durchzuführen. In mindestens einer Ausführungsform umfasst die Raster-Maschine 2508, ohne darauf beschränkt zu sein, eine Anzahl von Festfunktions-Hardwareeinheiten, die konfiguriert sind, um verschiedene Raster-Operationen durchzuführen, und in mindestens einer Ausführungsform umfasst die Raster-Maschine 2508, ohne darauf beschränkt zu sein, eine Setup-Maschine, eine Grobraster-Maschine, eine Aussonderungs-Maschine, eine Abschneide-Maschine, eine Feinraster-Maschine und eine Kachelverschmelzende Maschine und jede geeignete Kombination davon.
  • In mindestens einer Ausführungsform empfängt die Setup-Maschine transformierte Vertices und erzeugt Ebenengleichungen, die geometrischen Primitiven zugeordnet sind, die durch Vertices definiert werden; Ebenengleichungen werden an die Grobraster-Maschine übertragen, um Abdeckungsinformation (z.B. eine (x,y)-Abdeckungsmaske für eine Kachel) für eine Primitive zu erzeugen; die Ausgabe der Grobraster-Maschine wird an die Aussonderungs-Maschine übertragen, wo Fragmente, die der Primitiven zugeordnet sind, die einen z-Test nicht bestehen, ausgesondert und an eine Abschneide-Maschine übertragen werden, wo Fragmente, die außerhalb eines Betrachtungsstumpfes liegen, abgeschnitten werden. In mindestens einer Ausführungsform werden diejenigen Fragmente, welche die Abschneidung und Aussonderung überleben, an eine Feinraster-Maschine weitergeben, um Attribute für Pixelfragmente basierend auf den Ebenengleichungen zu erzeugen, die durch eine Setup-Maschine erzeugt werden. In mindestens einer Ausführungsform umfasst eine Ausgabe der Raster-Maschine 2508 Fragmente, die durch eine geeignete Entität zu verarbeiten sind, wie beispielsweise durch einem Fragment-Shader, der innerhalb eines DPC 2506 implementiert ist.
  • In mindestens einer Ausführungsform umfasst jeder in dem GPC 2500 enthaltene DPC 2506, ohne darauf beschränkt zu sein, einen M-Pipe-Controller („MPC“) 2510; eine Primitiven-Maschine 2512; einen oder mehrere SMs 2514; und jede geeignete Kombination davon. In mindestens einer Ausführungsform steuert der MPC 2510 den Betrieb des DPC 2506, wobei von dem Pipeline-Manager 2502 empfangene Pakete an geeignete Einheiten im DPC 2506 weitergeleitet werden. In mindestens einer Ausführungsform werden Pakete, die einer Vertex zugeordnet sind, an die Primitiven-Maschine 2512 weitergeleitet, die konfiguriert ist, um der Vertex zugeordnete Vertexattribute aus dem Speicher abzurufen; im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den SM 2514 übertragen werden.
  • In mindestens einer Ausführungsform umfasst der SM 2514, ohne darauf beschränkt zu sein, einen programmierbaren Streaming-Prozessor, der konfiguriert ist, um Aufgaben zu verarbeiten, die durch eine Anzahl von Threads dargestellt werden. In mindestens einer Ausführungsform ist der SM 2514 multi-threaded (umfasst mehrere Threads) und ist konfiguriert, um eine Mehrzahl von Threads (z.B. 32 Threads) einer bestimmten Gruppe von Threads gleichzeitig auszuführen und implementiert eine SIMD-Architektur, wobei jeder Thread in einer Gruppe von Threads (d.h. ein Warp) konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten. In mindestens einer Ausführungsform führen alle Threads in der Gruppe von Threads einen gemeinsamen Satz von Anweisungen aus. In mindestens einer Ausführungsform implementiert der SM 2514 eine SIMT-Architektur, wobei jeder Thread in einer Gruppe von Threads konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten, wobei jedoch einzelnen Threads in der Gruppe von Threads ermöglicht wird, während der Ausführung zu divergieren. In einer anderen Ausführungsform wird ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand für jeden einzelnen Warp beibehalten, was eine Gleichzeitigkeit zwischen allen Threads, innerhalb und zwischen Warps ermöglicht. In mindestens einer Ausführungsform wird ein Ausführungszustand für jeden einzelnen Thread beibehalten und Threads, welche die gleichen Anweisungen ausführen, können konvergiert und zur besseren Effizienz parallel ausgeführt werden. Mindestens eine Ausführungsform des SM 2514 wird ausführlicher in Verbindung mit 26 beschrieben.
  • In mindestens einer Ausführungsform stellt die MMU 2518 eine Schnittstelle zwischen dem GPC 2500 und einer Partitions-Einheit (z.B. Partitions-Einheit 2422 von 24) bereit und die MMU 2518 stellt eine Übersetzung von virtuellen Adressen in physische Adressen, einen Speicherschutz und eine Arbitrierung von Speicheranforderungen bereit. In mindestens einer Ausführungsform stellt die MMU 2518 einen oder mehrere Adressenübersetzungspuffer (Translation Lookaside Buffer; TLBs) zum Durchführen einer Übersetzung von virtuellen Adressen in physische Adressen im Speicher bereit.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • 26 veranschaulicht einen Streaming-Multiprozessor („SM“) 2600 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist der SM 2600 der SM von 25. In mindestens einer Ausführungsform umfasst der SM 2600, ohne darauf beschränkt zu sein, einen Anweisungs-Cache-Speicher 2602; eine oder mehrere Planer-Einheiten 2604; eine Registerdatei 2608, einen oder mehrere Verarbeitungskerne („cores“) 2610, eine oder mehrere Spezialfunktionseinheiten („SFUs“) 2612, eine oder mehrere LSUs 2614, ein Zwischenverbindungsnetzwerk 2616, einen gemeinsam genutzten Speicher/ L1-Cache-Speicher 2618; und jede geeignete Kombination davon. In mindestens einer Ausführungsform fertigt eine Arbeitsverteilungs-Einheit Aufgaben zur Ausführung auf GPCs von Parallelverarbeitungs-Einheiten (PPUs) ab und jede Aufgabe wird einem bestimmten Datenverarbeitungscluster (Data Processing Cluster; DPC) innerhalb eines GPC zugeteilt, und wenn eine Aufgabe einem Shader-Programm zugeordnet ist, dann wird die Aufgabe einem der SMs 2600 zugeteilt. In mindestens einer Ausführungsform empfängt die Planer-Einheit 2604 Aufgaben von einer Arbeitsverteilungs-Einheit und verwaltet die Anweisungsplanung für einen oder mehrere Thread-Blöcke, die dem SM 2600 zugewiesen sind. In mindestens einer Ausführungsform plant die Planer-Einheit 2604 Thread-Blöcke zur Ausführung als Warps von parallelen Threads, wobei jeder Thread-Block mindestens einem Warp zugeteilt ist. In mindestens einer Ausführungsform führt jeder Warp Threads aus. In mindestens einer Ausführungsform verwaltet die Planer-Einheit 2604 mehrere unterschiedliche Thread-Blöcke, teilt Warps unterschiedlichen Thread-Blöcken zu und fertigt dann Anweisungen von mehreren unterschiedlichen kooperativen Gruppen an verschiedene Funktionseinheiten (z.B. Verarbeitungskernen 2610, SFUs 2612 und LSUs 2614) während jedes Taktzyklus ab.
  • In mindestens einer Ausführungsform können sich „Cooperative Groups“ auf ein Programmiermodell zum Organisieren von Gruppen von kommunizierenden Threads beziehen, die es Entwicklern ermöglicht, die Granularität auszudrücken, bei der Threads kommunizieren, wobei der Ausdruck von reicheren, effizienteren Parallelzerlegungen ermöglicht wird. In mindestens einer Ausführungsform unterstützen Cooperative-Start-APIs die Synchronisierung unter Thread-Blöcken zur Ausführung von parallelen Algorithmen. In mindestens einer Ausführungsform stellen herkömmliche Programmiermodelle einen einzigen, einfachen Konstrukt zum Synchronisieren von kooperierenden Threads bereit: eine Barriere über alle Threads eines Thread-Blocks (d.h. die Funktion syncthreads( )). In mindestens einer Ausführungsform können Programmierer Gruppen von Threads jedoch bei kleineren als Thread-Block-Granularitäten definieren und innerhalb der definierten Gruppen synchronisieren, um größere Leistung, Gestaltungsflexibilität und Software-Wiederverwendung in der Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen. In mindestens einer Ausführungsform ermöglichen Cooperative Groups Programmierern, Gruppen von Threads explizit bei Sub-Block- und Multi-Block-Granularitäten zu definieren und kollektive Operationen, wie beispielsweise Synchronisierung, an den Threads in einer kooperativen Gruppe durchzuführen. In mindestens einer Ausführungsform ist eine Sub-Block-Granularität so klein wie ein einzelner Thread. In mindestens einer Ausführungsform unterstützt das Programmiermodell eine saubere Zusammensetzung über Softwaregrenzen, so dass Bibliotheken und Dienstprogrammfunktionen sicher innerhalb ihres lokalen Kontexts synchronisieren können, ohne Annahmen über Konvergenz machen zu müssen. In mindestens einer Ausführungsform ermöglichen Grundelemente kooperativer Gruppen neue Muster von kooperativer Parallelität, die, ohne darauf beschränkt zu sein, Erzeuger-Verbraucher Parallelität, opportunistische Parallelität und globale Synchronisierung über ein gesamtes Gitter von Threadblöcken umfassen.
  • In mindestens einer Ausführungsform ist eine Abfertigungseinheit 2606 konfiguriert, um Anweisungen an eine oder mehrere Funktionseinheiten zu übertragen, und die Planer-Einheit 2604 umfasst, ohne darauf beschränkt zu sein, zwei Abfertigungseinheiten 2606, die ermöglichen, dass zwei unterschiedliche Anweisungen von dem gleichen Warp während jedes Taktzyklus abgefertigt werden. In mindestens einer Ausführungsform umfasst jede Planer-Einheit 2604 eine einzige Abfertigungseinheit 2606 oder zusätzliche Abfertigungseinheiten 2606.
  • In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, eine Registerdatei 2608, die einen Satz von Registern für die Funktionseinheiten des SM 2600 bereitstellt. In mindestens einer Ausführungsform ist die Registerdatei 2608 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jede Funktionseinheit einem zugehörigen Abschnitt der Registerdatei 2608 zugeteilt ist. In einer anderen Ausführungsform ist die Registerdatei 2608 zwischen unterschiedlichen Warps aufgeteilt, die von dem SM 2600 ausgeführt werden, und die Registerdatei 2608 stellt eine temporäre Speicherung für Operanden bereit, die mit Datenpfaden der Funktionseinheiten verbunden sind. In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, L Verarbeitungskerne 2610. In mindestens einer Ausführungsform umfasst der SM 2600, ohne darauf beschränkt zu sein, eine große Anzahl (z.B. 128 oder mehr) von distinkten Verarbeitungskernen 2610. In mindestens einer Ausführungsform umfasst jeder Verarbeitungskern 2610, ohne darauf beschränkt zu sein, eine vollständig in einer Pipeline angeordnete (fullypipelined) Verarbeitungseinheit mit einfacher, doppelter oder gemischter Präzision, die, ohne darauf beschränkt zu sein, eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit umfasst. In mindestens einer Ausführungsform implementieren die Gleitkommaarithmetik-Logikeinheiten den IEEE 754-2008 Standard für Gleitkommaarithmetik. In mindestens einer Ausführungsform umfassen die Verarbeitungskerne 2610, ohne darauf beschränkt zu sein, 64 Einfach-Präzisions-(32-Bit)-Gleitkommakerne, 64 Ganzzahlkerne, 32 Doppel-Präzisions-(64-Bit)-Gleitkommakerne und 8 Tensorkerne.
  • In mindestens einer Ausführungsform sind Tensorkerne konfiguriert, um Matrixoperationen durchzuführen. In mindestens einer Ausführungsform sind ein oder mehrere Tensorkerne in Verarbeitungskernen 2610 enthalten. In mindestens einer Ausführungsform sind Tensorkerne konfiguriert, um Matrixarithmetik tiefen Lernens, wie beispielsweise Faltungsoperationen für neuronales Netzwerktraining und Inferenzieren, durchzuführen. In mindestens einer Ausführungsform arbeitet jeder Tensorkern an einer 4x4 Matrix und führt eine Matrix-Multiplikation- und Akkumulation-Operation D=A×B+C durch, wobei A, B, C und D 4x4 Matrizen sind.
  • In mindestens einer Ausführungsform sind Matrix-Multiplikations-Eingaben A und B 16-Bit-Gleitkomma-Matrizen und die Akkumulationsmatrizen C und D sind 16-Bit-Gleitkomma- oder 32-Bit-Gleitkomma-Matrizen. In mindestens einer Ausführungsform arbeiten Tensorkerne an 16-Bit-Gleitkomma-Eingangsdaten mit 32-Bit-Gleitkomma-Akkumulation. In mindestens einer Ausführungsform verwendet die 16-Bit-Gleitkomma-Multiplikation 64 Operationen und ergibt ein Produkt voller Präzision, das dann unter Verwendung einer 32-Bit-Gleitkomma-Addition mit den anderen Zwischenprodukten für eine 4x4x4-Matrix-Multiplikation akkumuliert wird. Tensorkerne werden verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die in dieser Ausführungsform von diesen kleineren Elementen aufgebaut werden. In mindestens einer Ausführungsform exponiert eine API, wie beispielsweise die CUDA-C++ API, spezialisierte Matrix-Lade-, Matrix-Multiplikations- und Matrix-Akkumulations- und Matrix-Speicher-Operationen, um Tensorkerne von einem CUDA-C++ Programm effizient zu verwenden. In mindestens einer Ausführungsform nimmt ein Warp-Schnittstelle auf der CUDA-Ebene 16x16 große Matrizen an, die alle 32 Threads eines Warp überspannen.
  • In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, M SFUs 2612, die Sonderfunktionen durchführen (z.B. Attributauswertung, reziproke Quadratwurzel und ähnliches). In mindestens einer Ausführungsform können die SFUs 2612, ohne darauf beschränkt zu sein, eine Baumtraversierungseinheit umfassen, die konfiguriert ist, um eine hierarchische Baumdatenstruktur zu durchlaufen. In mindestens einer Ausführungsform umfassen die SFUs 2612, ohne darauf beschränkt zu sein, eine Textureinheit, die konfiguriert ist, um Texturkarten-Filteroperationen durchzuführen. In mindestens einer Ausführungsform sind die Textureinheiten konfiguriert, um Texturkarten (z.B. eine 2D-Anordnung von Texeln) aus dem Speicher zu laden und Texturkarten abzutasten, um abgetastete Texturwerte zum Gebrauch in Shader-Programmen zu erzeugen, die durch den SM 2600 ausgeführt werden. In mindestens einer Ausführungsform werden Texturkarten in dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 gespeichert. In einer Ausführungsform implementieren die Textureinheiten Texturoperationen, wie beispielsweise Filteroperationen, unter Verwendung von Mip-Maps (z.B. Texturkarten von veränderlichem Detaillierungsgrad). In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, zwei Textureinheiten.
  • In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, N LSUs 2614, die Lade- und Speicheroperationen zwischen dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 und der Registerdatei 2608 implementieren. In mindestens einer Ausführungsform umfasst jeder SM 2600, ohne darauf beschränkt zu sein, ein Zwischenverbindung-Netzwerk 2616, das jede der Funktionseinheiten mit der Registerdatei 2608 und die LSU 2614 mit der Registerdatei 2608 und dem gemeinsam genutzten Speicher/ L1-Cache-Speicher 2618 verbindet. In mindestens einer Ausführungsform ist das Zwischenverbindung-Netzwerk 2616 eine Kreuzschiene, die konfiguriert sein kann, um eine beliebige der Funktionseinheiten mit irgendeinem der Register in der Registerdatei 2608 zu verbinden und die LSUs 2614 mit der Registerdatei 2608 und Speicherstellen in dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 zu verbinden.
  • In mindestens einer Ausführungsform ist der gemeinsam benutzte Speicher/L1-Cache-Speicher 2618 eine Anordnung eines On-Chip-Speichers, der Datenspeicherung und Kommunikation zwischen dem SM 2600 und einer Primitiven-Maschine und zwischen Threads in dem SM 2600 ermöglicht. In mindestens einer Ausführungsform umfasst der gemeinsam benutzte Speicher/L1-Cache-Speicher 2618, ohne darauf beschränkt zu sein, 128KB von Speicherkapazität und ist in dem Pfad von dem SM 2600 zu einer Partitions-Einheit. In mindestens einer Ausführungsform wird der gemeinsam benutzte Speicher/L1-Cache-Speicher 2618 verwendet, um Lese- und Schreibvorgänge zwischenzuspeichern. In mindestens einer Ausführungsform sind ein oder mehrere von dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618, L2-Cache-Speicher und dem Speicher Hintergrundspeicher.
  • In mindestens einer Ausführungsform stellt ein Kombinieren von Daten-Cache und gemeinsam genutzter Speicherfunktionalität in einem einzigen Speicherblock eine verbesserte Leistung für beide Arten von Speicherzugriffen bereit. In mindestens einer Ausführungsform wird die Kapazität als ein Cache für Programme benutzt oder ist dafür nutzbar, die keinen gemeinsam genutzten Speicher verwenden, wie beispielsweise, wenn ein gemeinsam genutzter Speicher konfiguriert ist, dass er die Hälfte der Kapazität verwendet, und die Textur- und Lade-/Speicher-Operationen die verbleibende Kapazität verwenden können. In mindestens einer Ausführungsform ermöglicht die Integration innerhalb des gemeinsam genutzten Speichers/Ll-Cache-Speichers 2618 ermöglicht dem gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 als eine Hochdurchsatzleitung zum Streamen von Daten zu arbeiten, während gleichzeitig ein Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und geringer Latenzzeit bereitgestellt wird. In mindestens einer Ausführungsform kann, wenn für Allzweck-Parallelberechnung konfiguriert, im Vergleich mit Graphikverarbeitung eine einfachere Konfiguration verwendet werden. In mindestens einer Ausführungsform werden Festfunktions-GPUs umgangen, wobei ein viel einfacheres Programmiermodell erzeugt wird. In mindestens einer Ausführungsform und in einer Allzweck-Parallelberechnungs-Konfiguration werden Blöcke von Threads von einer Arbeitsverteilungs-Einheit direkt DPCs in mindestens einer Ausführungsform zugewiesen und verteilt. In mindestens einer Ausführungsform führen Threads in einem Block das gemeinsame Programm unter Verwendung einer eindeutigen Thread-ID in einer Berechnung aus, um sicherzustellen, dass jeder Thread unter Verwendung des SM 2600 eindeutige Ergebnisse erzeugt, um das Programm auszuführen und Berechnungen durchzuführen, des gemeinsam genutzten Speicher/Ll-Cache-Speichers 2618, um zwischen Threads zu kommunizieren, und der LSU 2614, um einen globalen Speicher durch den gemeinsam genutzten Speicher/L1-Cache-Speicher 2618 und die Speicherpartitions-Einheit zu lesen und zu beschreiben. In mindestens einer Ausführungsform schreibt, wenn für Allzweck-Parallelberechnung konfiguriert, der SM 2600 Befehle, welche die Planer-Einheit 2604 verwenden kann, um neue Arbeit auf DPCs zu starten.
  • In mindestens einer Ausführungsform ist die PPU enthalten in oder gekoppelt mit einem Tischcomputer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z.B. einer drahtlosen handgehaltenen Vorrichtung), einem PDA, einer Digitalkamera, einem Fahrzeug, einer Head-Mounted-Display, einer handgehaltenen elektronischen Vorrichtung und mehr. In mindestens einer Ausführungsform ist die PPU auf einem einzelnen Halbleitersubstrat verkörpert. In mindestens einer Ausführungsform ist die PPU in einem SoC zusammen mit einer oder mehreren anderen Vorrichtungen, wie beispielsweise zusätzlichen PPUs, Speicher, einer RISC-CPU, einer MMU, einem Digital/AnalogWandler („DAC“) und dergleichen enthalten.
  • In mindestens einer Ausführungsform kann die PPU auf einer Graphikkarte enthalten sein, die eine oder mehrere Speichervorrichtungen umfasst. In mindestens einer Ausführungsform kann eine Graphikkarte konfiguriert sein, um sich mit einem PCIe-Schlitz auf einer Hauptplatine eines Desktop-Computers schnittstellenmäßig zu verbinden. In mindestens einer Ausführungsform kann die PPU eine integrierte GPU („iGPU“) sein, die in dem Chipsatz einer Hauptplatine enthalten ist.
  • In mindestens einer Ausführungsform wird eine Komponente der FIG. durch eine Kühlkörperanordnung gekühlt, die durch eine flexible Wärmeleitung mit der Komponente verbunden ist. In mindestens einer Ausführungsform umfasst die flexible Wärmeleitung ein Schleifenthermosiphon. In mindestens einer Ausführungsform ist eine Position des Kühlkörpers einstellbar, während der Kühlkörper mit der FIG. verbunden ist. In mindestens einer Ausführungsform verbessert die Positionseinstellung des Kühlkörpers den Luftstrom zu dem Kühlkörper oder zu anderen Komponenten oder Kühlkörpern. In mindestens einer Ausführungsform verbessert der verbesserte Luftstrom die Kühleffizienz.
  • Software-Konstruktionen für Allzweckberechnungen
  • Die folgenden Figuren legen, ohne darauf beschränkt zu sein, beispielhafte Softwarekonstrukte zum Implementieren mindestens einer Ausführungsform dar.
  • 27 veranschaulicht einen Softwarestapel einer Programmierplattform gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist eine Programmierplattform eine Plattform zum wirksamen Einsetzen von Hardware auf einem Rechensystem, um Rechenaufgaben zu beschleunigen. Eine Programmierplattform kann in mindestens einer Ausführungsform Softwareentwicklern durch Bibliotheken, Kompiliererdirektiven und/oder Erweiterungen zu Programmiersprachen zugänglich sein. In mindestens einer Ausführungsform kann eine Programmierplattform, ist jedoch nicht darauf beschränkt, CUDA, Radeon Open Compute Plattform („ROCm“), OpenCL (OpenCL™ wird von der Khronos Gruppe entwickelt), SYCL oder Intel One API sein.
  • In mindestens einer Ausführungsform stellt ein Softwarestapel 2700 einer Programmierplattform eine Ausführungsumgebung für eine Anwendung 2701 bereit. In mindestens einer Ausführungsform kann die Anwendung 2701 jegliche Computersoftware umfassen, die imstande ist, auf dem Softwarestapel 2700 gestartet zu werden. In mindestens einer Ausführungsform kann die Anwendung 2701 umfassen, ist jedoch nicht darauf beschränkt, eine Anwendung der künstlichen Intelligenz („KI“)/des Maschinenlernens („ML“), eine Anwendung von Hochleistungsrechnen („HPC“), eine virtuelle Desktop-Infrastruktur („VDI“) oder eine Arbeitslast eines Rechenzentrums.
  • In mindestens einer Ausführungsform werden die Anwendung 2701 und der Softwarestapel 2700 auf einer Hardware 2707 ausgeführt. Die Hardware 2707 kann eine oder mehrere GPUs, CPUs, FPGAs, KI-Maschinen und/oder andere Arten von Rechenvorrichtungen umfassen, die eine Programmierplattform in mindestens einer Ausführungsform unterstützen. In mindestens einer Ausführungsform kann, wie beispielsweise mit CUDA, der Softwarestapel 2700 anbieterspezifisch und lediglich mit Vorrichtungen von bestimmte Anbieter(n) kompatibel sein. In mindestens einer Ausführungsform kann, wie beispielsweise mit OpenCL, der Softwarestapel 2700 mit Vorrichtungen von unterschiedlichen Anbietern verwendet werden. In mindestens einer Ausführungsform umfasst die Hardware 2707 einen Host, der mit einer oder mehreren Vorrichtungen verbunden ist, auf den zugegriffen werden kann, um Rechenaufgaben über Aufrufe einer Anwendungsprogrammierschnittstelle („API“) durchzuführen. In mindestens einer Ausführungsform kann eine Vorrichtung innerhalb der Hardware 2707 eine GPU, eine FPGA, eine KI-Maschine oder eine andere Rechenvorrichtung (die jedoch ebenfalls eine CPU umfassen kann) und ihren Speicher im Gegensatz zu einem Host innerhalb der Hardware 2707 umfassen, der eine CPU (jedoch ebenfalls eine Rechenvorrichtung umfassen kann) und ihren Speicher umfassen kann, jedoch ohne darauf beschränkt zu sein.
  • In mindestens einer Ausführungsform umfasst der Softwarestapel 2700 einer Programmierplattform, ohne darauf beschränkt zu sein, eine Anzahl von Bibliotheken 2703, eine Laufzeit 2705 und einen Vorrichtungskerneltreiber 2706. In mindestens einer Ausführungsform kann jede der Bibliotheken 2703 Daten und einen Programmiercode umfassen, die von Computerprogrammen verwendet werden können und während der Softwareentwicklung wirksam eingesetzt werden. In mindestens einer Ausführungsform können Bibliotheken 2703, ohne jedoch darauf beschränkt zu sein, einen vorab geschriebenen Code und Subroutinen, Klassen, Werte, Typspezifikationen, Konfigurationsdaten, Dokumentation, Hilfedaten und/oder Nachrichtenvorlagen umfassen. In mindestens einer Ausführungsform umfassen Bibliotheken 2703 Funktionen, die zur Ausführung auf einem oder mehrere Arten von Vorrichtungen optimiert sind. In mindestens einer Ausführungsform können Bibliotheken 2703, ohne jedoch darauf beschränkt zu sein, Funktionen zum Durchführen von mathematischen, tiefen Lernens und/oder andere Arten von Operationen auf Vorrichtungen umfassen. In mindestens einer Ausführungsform sind Bibliotheken 2803 entsprechenden APIs 2802 zugeordnet, die eine oder die mehreren APIs umfassen können, die in Bibliotheken 2803 implementierte Funktionen freilegen.
  • In mindestens einer Ausführungsform wird die Anwendung 2701 als Quellcode geschrieben, die in ausführbaren Code kompiliert wird, wie ausführlicher nachstehend in Verbindung mit 32-34 erläutert. In mindestens einer Ausführungsform kann der ausführbare Code der Anwendung 2701 mindestens teilweise auf einer Ausführungsumgebung ausgeführt werden, die durch den Softwarestapel 2700 bereitgestellt wird. In mindestens einer Ausführungsform kann während der Ausführung der Anwendung 2701 ein Code erreicht werden, der im Gegensatz zu einem Host auf einer Vorrichtung ausgeführt werden muss. In einem derartigen Fall kann in mindestens einer Ausführungsform die Laufzeit 2705 aufgerufen werden, um den erforderlichen Code auf die Vorrichtung zu laden und zu starten. In mindestens einer Ausführungsform kann die Laufzeit 2705 jegliches technisch machbare Laufzeitsystem umfassen, das imstande ist, die Ausführung der Anwendung 2701 zu unterstützen.
  • In mindestens einer Ausführungsform wird die Laufzeit 2705 als eine oder mehrere Laufzeitbibliotheken implementiert, die entsprechenden APIs zugeordnet sind, die als API(s) 2704 gezeigt werden. Eine oder mehrere derartiger Laufzeitbibliotheken kann unter anderem, ohne darauf beschränkt zu sein, Funktionen zur Speicherverwaltung, Ausführungssteuerung, Vorrichtungsverwaltung, Fehlerbehandlung und/oder Synchronisierung in mindestens einer Ausführungsform umfassen. In mindestens einer Ausführungsform können die Speicherverwaltungsfunktionen, ohne jedoch darauf beschränkt zu sein, Funktionen umfassen, um den Vorrichtungsspeicher zuzuteilen, freizugeben und zu kopieren, sowie auch Daten zwischen dem Host-Speicher und dem Vorrichtungsspeicher zu übertragen. In mindestens einer Ausführungsform können Ausführungssteuerfunktionen, ohne jedoch darauf beschränkt zu sein, Funktionen umfassen, um eine Funktion (manchmal als ein „Kernel“ bezeichnet, wenn eine Funktion eine von einem Host aufrufbare globale Funktion ist) auf einer Vorrichtung zu starten und Attributwerte in einem von einer Laufzeitbibliothek unterhaltenen Puffer für eine gegebene Funktion einzustellen, die auf einer Vorrichtung auszuführen ist.
  • In mindestens einer Ausführungsform können Laufzeitbibliotheken und entsprechende API(s) 2704 in jeglicher technisch machbaren Art und Weise implementiert werden. In mindestens einer Ausführungsform kann eine (oder eine beliebige Anzahl von) API einen Satz von Funktionen niedriger Ebene zur feinkörnigen Steuerung einer Vorrichtung freilegen, während eine andere (oder eine beliebige Anzahl von) API einen Satz höherer Ebene derartiger Funktionen freilegen kann. In mindestens einer Ausführungsform kann eine Laufzeit-API hoher Ebene auf einer API niedriger Ebene aufgebaut sein. In mindestens einer Ausführungsform können eine oder mehrere Laufzeit-APIs sprachenspezifische APIs sein, die über eine sprachunabhängige Laufzeit-API geschichtet sind.
  • In mindestens einer Ausführungsform ist der Vorrichtungskerneltreiber 2706 konfiguriert, um eine Kommunikation mit einer zugrundeliegenden Vorrichtung zu erleichtern. In mindestens einer Ausführungsform kann der Vorrichtungskerneltreiber Funktionalitäten auf niedriger Ebene bereitstellen, auf die sich APIs, wie beispielsweise API(s) 2704, und/oder andere Software stützen. In mindestens einer Ausführungsform kann der Vorrichtungskerneltreiber 2706 konfiguriert sein, um einen Code einer Zwischendarstellung (Intermediate Code; „IR“) in Binärcode zur Laufzeit zu kompilieren. Für CUDA kann der Vorrichtungskerneltreiber 2706 einen Parallel Thread Execution („PTX“) IR-Code, der nicht Hardware-spezifisch ist, in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompilieren (mit Caching von kompilierten Binärcode), der manchmal ebenfalls als „finalisierender“ Code bezeichnet wird, in mindestens einer Ausführungsform. Dabei kann in mindestens einer Ausführungsform erlaubt sein, dass der finalisierte Code auf einer Zielvorrichtung laufen kann, was nicht existieren würde, wenn der Quellcode ursprünglich in PTX-Code kompiliert worden wäre. Alternativ kann in mindestens einer Ausführungsform der Vorrichtung-Quellcode in Binärcode offline kompiliert werden, ohne zu erfordern, dass der Vorrichtungskerneltreiber 2706 den IR-Code zur Laufzeit kompiliert.
  • 28 veranschaulicht eine CUDA-Implementierung des Softwarestapels 2700 von 27 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein CUDA-Softwarestapel 2800, der auf dem eine Anwendung 2801 gestartet werden kann, CUDA-Bibliotheken 2803, eine CUDA-Laufzeit 2805, einen CUDA-Treiber 2807 und einen Vorrichtungskerneltreiber 2808. In mindestens einer Ausführungsform wird der CUDA-Softwarestapel 2800 auf Hardware 2809 ausgeführt, die eine GPU umfassen kann, die CUDA unterstützt und von NVIDIA Corporation, Santa Clara, CA, entwickelt wird.
  • In mindestens einer Ausführungsform können die Anwendung 2801, die CUDA-Laufzeit 2805 und der Vorrichtungskerneltreiber 2808 jeweils ähnliche Funktionalitäten wie die Anwendung 2701, die Laufzeit 2705 und der Vorrichtungskerneltreiber 2706 durchführen, die oben in Verbindung mit 27 beschrieben sind. In mindestens einer Ausführungsform umfasst der CUDA-Treiber 2807 eine Bibliothek (libcuda.so), die eine CUDA-Treiber-API 2806 implementiert. Ähnliche wie eine CUDA-Laufzeit-API 2804, die von einer CUDA-Laufzeitbibliothek (cudart) implementiert wird, kann die CUDA-Treiber-API 2806, ohne darauf beschränkt zu sein, Funktionen zur Speicherverwaltung, Ausführungssteuerung, Vorrichtungsverwaltung, Fehlerbehandlung, Synchronisierung und/oder Graphikinteroperabilität unter anderem in mindestens einer Ausführungsform freilegen. In mindestens einer Ausführungsform unterscheidet sich die CUDA-Treiber-API 2806 von der CUDA-Laufzeit-API 2804 dadurch, dass die CUDA-Laufzeit-API 2804 die Vorrichtungscodeverwaltung durch Bereitstellen impliziter Initialisierung, Kontext(analog zu einem Prozess)-Verwaltung und Modul(analog zu dynamisch geladenen Bibliotheken)-Verwaltung vereinfacht. Im Gegensatz zu der CUDA-Laufzeit-API 2804 hoher Ebene ist die CUDA-Treiber-API 2806 eine API niedriger Ebene, die in mindestens einer Ausführungsform eine feinkörnigere Steuerung der Vorrichtung insbesondere mit Bezug auf Kontexte und Modulladen bereitstellt. In mindestens einer Ausführungsform kann die CUDA-Treiber-API 2806 Funktionen zur Kontextverwaltung freilegen, die nicht von der CUDA-Laufzeit-API 2804 freigelegt werden. In mindestens einer Ausführungsform ist die CUDA-Treiber-API 2806 ebenfalls sprachunabhängig und unterstützt z.B. OpenCL zusätzlich zu der CUDA-Laufzeit-API 2804. Ferner können in mindestens einer Ausführungsform, Entwicklungsbibliotheken, einschließlich der CUDA-Laufzeit 2805, als getrennt von Treiberkomponenten betrachtet werden, die Benutzer-Modus CUDA-Treiber 2807 und Kernel-Modus Vorrichtungstreiber 2808 umfassen (ebenfalls manchmal als ein „Anzeigen“-Treiber bezeichnet).
  • In mindestens einer Ausführungsform können CUDA-Bibliotheken 2803, ohne jedoch darauf beschränkt zu sein, mathematische Bibliotheken, Bibliotheken mit tiefem Lernen, Parallelalgorithmusbibliotheken und/oder Signal/Bild/Video-Verarbeitungsbibliotheken umfassen, die parallele Rechenanwendungen, wie beispielsweise die Anwendung 2801, benutzen können. In mindestens einer Ausführungsform können CUDA-Bibliotheken 2803 mathematische Bibliotheken, wie beispielsweise eine cuBLAS-Bibliothek, die eine Implementierung von Basic Linear Algebra Unterprogramme („BLAS“) zum Durchführen von Operationen der linearen Algebra ist, eine cuFFT-Bibliothek zum Berechnen schneller Fouriertransformationen („FFTs“) und eine cuRAND-Bibliothek zum Erzeugen von Zufallszahlen unter anderem umfassen. In mindestens einer Ausführungsform können CUDA-Bibliotheken 2803 Bibliotheken mit tiefem Lernen, wie beispielsweise eine cuDNN-Bibliothek von Primitiven für tiefe neuronale Netzwerke und eine TensorRT-Plattform für Inferenz tiefen Lernens hoher Leistung unter anderem umfassen.
  • 29 veranschaulicht eine ROCm-Implementierung des Softwarestapels 2700 von 27 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein ROCm-Softwarestapel 2900, auf dem eine Anwendung 2901 gestartet werden kann, eine Sprachenlaufzeit 2903, eine Systemlaufzeit 2905, einen Thunk 2907, einen ROCm-Kerneltreiber 2908 und einen Vorrichtungskerneltreiber. In mindestens einer Ausführungsform wird der ROCm-Softwarestapel 2900 auf Hardware 2910 ausgeführt, die eine GPU umfassen kann, die ROCm unterstützt und von AMD Corporation, Santa Clara, CA, entwickelt wird.
  • In mindestens einer Ausführungsform kann die Anwendung 2901 ähnliche Funktionalitäten wie die oben in Verbindung mit 27 erläuterte Anwendung 2701 durchführen. Außerdem können in mindestens einer Ausführungsform die Sprachenlaufzeit 2903 und Systemlaufzeit 2905 ähnliche Funktionalitäten wie die oben in Verbindung mit 27 erläuterte Laufzeit 2705 durchführen. In mindestens einer Ausführungsform unterscheiden sich die Sprachenlaufzeit 2903 und Systemlaufzeit 2905 dadurch, dass die Systemlaufzeit 2905 eine sprachunabhängige Laufzeit ist, die eine ROCr-Systemlaufzeit-API 2904 implementiert und eine Heterogeneous System Architecture („HAS“) Laufzeit-API benutzt. In mindestens einer Ausführungsform ist die HAS-Laufzeit-API eine dünne Benutzer-Modus-API, die Schnittstellen freilegt, um auf eine AMD-GPU zuzugreifen und mit dieser wechselzuwirken, die unter anderem Funktionen zur Speicherverwaltung, Ausführungssteuerung über architektierte Abfertigung von Kernels, Fehlerbehandlung, System- und Agenteninformation und Laufzeitinitialisierung und -abschaltung umfasst. Im Gegensatz zu der Systemlaufzeit 2905 ist die Sprachenlaufzeit 2903 eine Implementierung einer sprachenspezifischen Laufzeit-API 2902, die auf der ROCr-Systemlaufzeit-API 2904 in mindestens einer Ausführungsform geschichtet ist. In mindestens einer Ausführungsform kann die Sprachenlaufzeit-API unter anderem umfassen, ist jedoch nicht darauf beschränkt, eine Heterogeneous Compute Interface for Portability („HIP“) Sprachenlaufzeit-API, eine Heterogeneous Compute Compiler („HCC“) Sprachenlaufzeit-API oder eine OpenCL-API. Insbesondere ist die HIP-Sprache eine Erweiterung der C++ Programmiersprache mit funktionsmäßig ähnliche Versionen von CUDA-Mechanismen, und umfasst in mindestens einer Ausführungsform Funktionen einer HIP-Sprachenlaufzeit-API, die ähnlich zu denen der CUDA-Laufzeit-API 2804 sind, die oben in Verbindung mit 28 erläutert werden, wie beispielsweise unter anderem Funktionen zur Speicherverwaltung, Ausführungssteuerung, Vorrichtungsverwaltung, Fehlerbehandlung und Synchronisierung.
  • In mindestens einer Ausführungsform ist ein Thunk (ROCt) 2907 eine Schnittstelle, die verwendet werden kann, um mit dem zugrundeliegenden ROCm-Treiber 2908 wechselzuwirken. In mindestens einer Ausführungsform ist der ROCm-Treiber 2908 ein ROCk-Treiber, der eine Kombination eines AMDGPU-Treibers und eines HAS-Kerneltreibers (amdkfd) ist. In mindestens einer Ausführungsform ist der AMDGPU-Treiber ein Vorrichtungskerneltreiber für von AMD entwickelte GPUs, die ähnliche Funktionalitäten wie der Vorrichtungskerneltreiber 2706 durchführt, der oben in Verbindung mit 27 erläutert ist. In mindestens einer Ausführungsform ist der HAS-Kerneltreiber ein Treiber, der unterschiedlichen Arten von Prozessoren erlaubt, Systemressourcen wirksamer über Hardwaremerkmale gemeinsam zu nutzen.
  • In mindestens einer Ausführungsform können verschiedene Bibliotheken (nicht gezeigt) in dem ROCm-Softwarestapel 2900 über der Sprachenlaufzeit 2903 umfasst sein und Funktionalitätsähnlichkeit zu CUDA-Bibliotheken 2803 bereitstellen, die oben in Verbindung mit 28 erläutert werden. In mindestens einer Ausführungsform können verschiedenen Bibliotheken, jedoch ohne darauf beschränkt zu sein, unter anderem eine mathematische Bibliothek, eine Bibliotheken für tiefes Lernen und/oder andere Bibliotheken umfassen, wie beispielsweise eine hipBLAS Bibliothek, die Funktionen ähnliche zu denen von CUDA cuBLAS implementiert, ein rocFFT Bibliothek zum Berechnen von FFTs, die ähnlich zu CUDA cuFFT ist.
  • 30 veranschaulicht eine OpenCL-Implementierung des Softwarestapels 2700 von 27 gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst ein OpenCL-Softwarestapel 3000, auf dem eine Anwendung 3001 gestartet werden kann, ein OpenCL-Framework 3005, eine OpenCL-Laufzeit 3006 und einen Treiber 3007. In mindestens einer Ausführungsform wird der OpenCL-Softwarestapel 3000 auf Hardware 2809 ausgeführt, die nicht anbieterspezifisch ist. Da OpenCL von Vorrichtungen unterstützt wird, die von unterschiedlichen Anbietern entwickelt werden, können in mindestens einer Ausführungsform spezifische OpenCL-Treiber erforderlich sein, die mit Hardware von derartigen Anbietern zusammenarbeiten.
  • In mindestens einer Ausführungsform können die Anwendung 3001, die OpenCL-Laufzeit 3006, der Vorrichtungskerneltreiber 3007 und die Hardware 3008 jeweils ähnliche Funktionalitäten wie die Anwendung 2701, die Laufzeit 2705, der Vorrichtungskerneltreiber 2706 und die Hardware 2707 durchführen, die oben in Verbindung mit 27 erläutert sind. In mindestens einer Ausführungsform umfasst die Anwendung 3001 ferner einen OpenCL-Kernel 3002 mit einem Code, der auf einer Vorrichtung auszuführen ist.
  • In mindestens einer Ausführungsform definiert OpenCL eine „Plattform“, die es einem Host ermöglicht, mit dem Host verbundene Vorrichtungen zu steuern. In mindestens einer Ausführungsform stellt ein OpenCL-Framework eine Plattformschicht-API und eine Laufzeit-API bereit, die als Plattform-API 3003 und Laufzeit-API 3005 gezeigt werden. In mindestens einer Ausführungsform verwendet die Laufzeit-API 3005 Kontexte, um die Ausführung von Kernels auf Vorrichtungen zu verwalten. In mindestens einer Ausführungsform kann jede gekennzeichnete Vorrichtung einem jeweiligen Kontext zugeordnet sein, welche die Laufzeit-API 3005 unter anderem verwenden kann, um Befehlswarteschlangen, Programmobjekte und Kernelobjekten zu verwalten und Speicherobjekte für diese Vorrichtung gemeinsam zu nutzen. In mindestens einer Ausführungsform legt die Plattform-API 3003 Funktionen frei, die erlauben, dass Vorrichtung-Kontexte verwendet werden können, um unter anderem Vorrichtungen auszuwählen und zu initialisieren, um Arbeit an Vorrichtungen über Befehlswarteschlangen zu liefern und Datenübertragung an und von Vorrichtungen zu ermöglichen. Außerdem stellt das OpenCL Framework verschiedene eingebaute Funktionen (nicht gezeigt) bereit, die unter anderem Mathematikfunktionen, relationale Funktionen und Bildverarbeitungsfunktionen in mindestens einer Ausführungsform umfassen.
  • In mindestens einer Ausführungsform ist ein Kompilierer 3004 ebenfalls in dem OpenCL-Framework 3005 enthalten. Der Quellcode kann offline vor dem Ausführen einer Anwendung oder online während der Ausführung einer Anwendung in mindestens einer Ausführungsform kompiliert werden. Im Gegensatz zu CUDA und ROCm können OpenCL-Anwendungen in mindestens einer Ausführungsform online durch den Kompilierer 3004 kompiliert werden, der enthalten ist, um für eine beliebige Anzahl von Kompilierern repräsentativ zu sein, die verwendet werden können, um Quellcode und/oder IR-Code, wie beispielsweise Standard Portable Intermediate Representation („SPIR-V“) Code, in Binärcode zu kompilieren. Alternativ können in mindestens einer Ausführungsform OpenCL-Anwendungen offline vor der Ausführung derartiger Anwendungen kompiliert werden.
  • 31 veranschaulicht Software, die durch eine Programmierplattform unterstützt wird, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist eine Programmierplattform 3104 konfiguriert, um verschiedene Programmiermodelle 3103, Middlewares und/oder Bibliotheken 3102 und Frameworks 3101 zu unterstützen, auf die sich eine Anwendung 3100 stützen kann. In mindestens einer Ausführungsform kann die Anwendung 3100 eine KI/ML-Anwendung sein, die beispielsweise unter Verwendung eines Framework eines tiefen Lernens implementiert werden kann, wie beispielsweise MXNet, PyTorch oder TensorFlow, die sich auf Bibliotheken stützen können, wie beispielsweise cuDNN, NVIDIA Collective Communications Library („NCCL“) und/oder NVIDA Developer Data Loading Library („DALI“) CUDA-Bibliotheken, um beschleunigtes Rechnen auf zugrundeliegender Hardware bereitzustellen.
  • In mindestens einer Ausführungsform kann die Programmierplattform 3104 einer von einer CUDA-, ROCm- oder OpenCL-Plattform sein, die oben jeweils in Verbindung mit 28, 29 und 30 beschrieben sind. In mindestens einer Ausführungsform unterstützt die Programmierplattform 3104 mehrere Programmiermodelle 3103, die Abstraktionen eines zugrundeliegenden Rechensystem sind, das Ausdrücke von Algorithmen und Datenstrukturen erlaubt. In mindestens einer Ausführungsform können die Programmiermodelle 3103 Merkmale von zugrundeliegender Hardware freilegen, um Leistung in mindestens einer Ausführungsform zu verbessern. In mindestens einer Ausführungsform können die Programmiermodelle 3103, ohne jedoch darauf beschränkt zu sein, CUDA, HIP, OpenCL, C++ Accelerated Massive Parallelism („C++AMP“), Open Multi-Processing („OpenMP“), Open Accelerators („OpenACC“) und/oder Vulcan Compute umfassen.
  • In mindestens einer Ausführungsform stellen Bibliotheken und/oder Middlewares 3102 Implementierungen von Abstraktionen von Programmiermodellen 3104 bereit. In mindestens einer Ausführungsform umfassen derartige Bibliotheken Daten und einen Programmiercode, die von Computerprogrammen verwendet und während der Softwareentwicklung wirksam eingesetzt werden können. In mindestens einer Ausführungsform umfassen derartige Middlewares Software, die Dienste an Anwendungen über diejenigen hinaus bereitstellen, die von der Programmierplattform 3104 verfügbar sind. In mindestens einer Ausführungsform können Bibliotheken und/oder Middlewares 3102 cuBLAS, cuFFT, cuRAND und andere CUDA-Bibliotheken oder rocBLAS, rocFFT, rocRAND und andere ROCm-Bibliotheken umfassen, jedoch ohne darauf beschränkt zu sein. Außerdem können in mindestens einer Ausführungsform Bibliotheken und/oder Middlewares 3102 NCCL und ROCm Communication Collectives Library („RCCL“) Bibliotheken, die Kommunikationsroutinen für GPUs, eine MIOpen-Bibliothek zur Beschleunigung von tiefem Lernen und/oder eine Eigen Bibliothek für lineare Algebra, Matrix- und Vektoroperationen, geometrische Transformationen, numerische Löser und verwandte Algorithmen umfassen.
  • In mindestens einer Ausführungsform hängen Anwendung-Frameworks 3101 von Bibliotheken und/oder Middlewares 3102 ab. In mindestens einer Ausführungsform ist jede der Anwendung-Frameworks 3101 ist Software-Framework, das verwendet wird, , um eine Standardstruktur von Anwendungssoftware zu implementieren. Zurückkehrend zu dem oben erläuternden KI/ML-Beispiel kann eine KI/ML-Anwendung in mindestens einer Ausführungsform unter Verwendung eines Framework, wie beispielsweise Caffe, Caffe2, TensorFlow, Keras, PyTorch oder MxNet Frameworks für tiefes Lernen, implementiert werden.
  • 32 veranschaulicht das Kompilieren von Code, das auf einer der Programmierplattformen von 27-30 auszuführen ist, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform empfängt ein Kompilierer 3201 Quellcode 3200, der sowohl Host-Code sowie auch Vorrichtungscode umfasst. In mindestens einer Ausführungsform, ist der Kompilierer 3201 konfiguriert, um den Quellcode 3200 in Host-ausführbaren Code 3202 zur Ausführung auf einem Host und Vorrichtung-ausführbaren Code 3203 zur Ausführung auf einer Vorrichtung zu konvertieren. In mindestens einer Ausführungsformkann kann der Quellcode 3200 entweder offline vor der Ausführung einer Anwendung oder online während Ausführung einer Anwendung kompiliert werden.
  • In mindestens einer Ausführungsform kann der Quellcode 3200 Code in jeder Programmiersprache umfassen, die durch den Kompilierer 3201 unterstützt wird, wie beispielsweise C++, C, Fortran usw. In mindestens einer Ausführungsform kann der Quellcode 3200 in einer einzigen Quelldatei enthalten sein, die eine Mischung aus Host-Code und Vorrichtung-Code aufweist, wobei Orte des Vorrichtungscodes darin angegeben werden. In mindestens einer Ausführungsform kann eine einzige Quelldatei eine .cu Datei sein, die CUDA-Code oder eine .hip.cpp Datei umfasst, die HIP-Code umfasst. Alternativ kann in mindestens einer Ausführungsform der Quellcode 3200 mehrere Quellcodedateien und keine einzige Quelldatei umfassen, in der Host-Code und Vorrichtungscode getrennt sind.
  • In mindestens einer Ausführungsform ist der Kompilierer 3201 konfiguriert, um den Quellcode 3200 in Host-ausführbaren Code 3202 zur Ausführung auf einem Host und Vorrichtung-ausführbaren Code 3203 zur Ausführung auf einer Vorrichtung zu kompilieren. In mindestens einer Ausführungsform führt der Kompilierer 3201 Operationen durch, die Parsen von Quellcode 3200 in einen abstrakten Systembaum (Abstract System Tree; AST), Durchführen von Optimierungen und Erzeugen von ausführbarem Code umfassen. In mindestens einer Ausführungsform, bei welcher der Quellcode 3200 eine einzige Quelldatei umfasst, kann der Kompilierer 3201 den Vorrichtungscode von Host-Code in eine derartige einzige Quelldatei trennen, Vorrichtungscode und Host-Code jeweils in Vorrichtung-ausführbaren Code 3203 und Host-ausführbaren Code 3202 kompilieren, und Vorrichtung-ausführbaren Code 3203 und Host-ausführbaren Code 3202 zusammen in einer einzigen Datei verbinden, wie ausführlicher nachstehend mit Bezug auf 33 erläutert.
  • In mindestens einer Ausführungsform können der Host-ausführbare Code 3202 und der Vorrichtung-ausführbare Code 3203 in jedem geeigneten Format, wie beispielsweise Binärcode und/oder IR-Code, sein. In mindestens einer Ausführungsform kann im Fall von CUDA der Host-ausführbare Code 3202 nativen Objektcode umfassen und der Vorrichtung-ausführbaren Code 3203 kann Code in PTX-Zwischendarstellung umfassen. Im Fall von ROCm kann sowohl der Host-ausführbare Code 3202 als auch der Vorrichtung-ausführbare Code 3203 einen Zielbinärcode in mindestens einer Ausführungsform umfassen.
  • 33 ist eine ausführlichere Veranschaulichung des Kompilierens des Codes, der auf einer der Programmierplattformen von 27-30 auszuführen ist, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform ist ein Kompilierer 3301 konfiguriert, um den Quellcode 3300 zu empfangen, den Quellcode 3300 zu kompilieren und eine ausführbare Datei 3308 auszugeben. In mindestens einer Ausführungsform ist der Quellcode 3300 eine einzige Quelldatei, wie beispielsweise eine .cu Datei, eine .hip.cpp Datei oder eine Datei in einem anderen Format, die sowohl Host- als auch Vorrichtung-Code umfasst. In mindestens einer Ausführungsform kann der Kompilierer 3301, ohne jedoch darauf beschränkt zu sein, ein NVIDIA CUDA-Kompilierer („NVCC“) zum Kompilieren eines CUDA-Codes in .cu Dateien oder ein HCC-Kompilierer zum Kompilieren eines HIP-Codes in .hip.cpp Dateien sein.
  • In mindestens einer Ausführungsform umfasst der Kompilierer 3301 ein Kompilierer-Frontend 3302, einen Host-Kompilierer 3305, einen Vorrichtung-Kompilierer 3306 und einen Linker 3309. In mindestens einer Ausführungsform ist das Kompilierer-Frontend 3302 konfiguriert, um den Vorrichtungscode 3304 von dem Host-Code 3303 in Quellcode 3300 zu trennen. In mindestens einer Ausführungsform wird der Vorrichtungscode 3304 durch den Vorrichtung-Kompilierer 3306 in Vorrichtung-ausführbaren Code 3308 kompiliert, der, wie beschrieben, Binärcode oder IR-Code umfassen kann. Getrennt davon wird der Host-Code 3303 mindestens einer Ausführungsform durch den Host-Kompilierer 3305 in Host-ausführbaren Code 3307 kompiliert. Für NVCC kann der Host-Kompilierer 3305 ein Allzweck C/C++ Kompilierer sein, ohne jedoch darauf beschränkt zu sein, der nativen Objektcode ausgibt, während der Vorrichtung-Kompilierer 3306 ein Low Level Virtual Machine („LLVM“) basierter Kompilierer sein kann, wobei er jedoch nicht darauf beschränkt ist, der eine LLVM-Kompilierer-Infrastruktur gabelt und PTX-Code oder Binärcode in mindestens einer Ausführungsform ausgibt. Für den HCC können sowohl der Host-Kompilierer 3305 als auch der Vorrichtung-Kompilierer 3306, ohne jedoch darauf beschränkt zu sein, LLVMbasierte Kompilierer sein, die einen Zielbinärcode in mindestens einer Ausführungsform ausgeben.
  • Anschließend an das Kompilieren des Quellcodes 3300 in Host-ausführbaren Code 3307 und Vorrichtung-ausführbaren Code 3308 verbindet der Linker 3309 in mindestens einer Ausführungsform den Host- und Vorrichtung-ausführbaren Code 3307 und 3308 zusammen in eine ausführbare Datei 3310. In mindestens einer Ausführungsform können der native Objektcode für einen Host und PTX oder Binärcode für eine Vorrichtung zusammen in einer Datei mit ausführbaren und verknüpfbaren Format (Executable and Linkable Format; „ELF“) verbunden werden, das ein Containerformat ist, das verwendet wird, um Objektcode zu speichern.
  • 34 veranschaulicht das Übersetzen von Quellcode vor dem Kompilieren von Quellcode gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird der Quellcode 3400 durch ein Übersetzungswerkzeug 3401 geleitet, das den Quellcode 3400 in übersetzten Quellcode 3402 übersetzt. In mindestens einer Ausführungsform wird ein Kompilierer 3403 verwendet, um den übersetzten Quellcode 3402 in Host-ausführbaren Code 3404 und Vorrichtung-ausführbaren Code 3405 in einem Prozess zu kompilieren, welcher der Kompilierung von Quellcode 3200 durch den Kompilierer 3201 in Host-ausführbaren Code 3202 und Vorrichtung-ausführbaren 3203 ähnlich ist, wie oben in Verbindung mit 32 erläutert.
  • In mindestens einer Ausführungsform wird eine Übersetzung, die von dem Übersetzungswerkzeug 3401 durchgeführt wird, verwendet, um den Quellcode 3400 zur Ausführung in eine unterschiedliche Umgebung als die zu portieren, bei der ursprünglich beabsichtigt war, ihn auszuführen. In mindestens einer Ausführungsform kann das Übersetzungswerkzeug 3401 einen HIP-Übersetzer umfassen, ohne jedoch darauf beschränkt zu sein, der verwendet wird, um den CUDA-Code zu „hipify“, der für eine CUDA-Plattform in HIP-Code bestimmt ist, der auf einer ROCm-Plattform kompiliert und ausgeführt werden kann. In mindestens einer Ausführungsform kann die Übersetzung des Quellcodes 3400 Parsen des Quellcodes 3400 und Konvertieren von Aufrufen an API(s), die durch ein Programmiermodel (z.B. CUDA) bereitgestellt werden, in entsprechende Aufrufen an API(s) umfassen, die durch ein anderes Programmiermodel (z.B. HIP) bereitgestellt werden, wie nachstehend in Verbindung mit 35A-36 ausführlicher erläutert. Zurückkehrend zu dem Beispiel des „hipifying“ des CUDA-Codes, können Aufrufen an die CUDA-Laufzeit-API, CUDA-Treiber-API und/oder CUDA-Bibliotheken in mindestens einer Ausführungsform in entsprechende HIP-API-Aufrufe konvertiert werden. In mindestens einer Ausführungsform können automatisierte Übersetzungen, die von dem Übersetzungswerkzeug 3401 durchgeführt werden, manchmal unvollständig sein und zusätzlichen manuellen Aufwand erfordern, um den Quellcode 3400 vollständig zu portieren.
  • Konfigurieren der GPUs für Allzweckberechnungen
  • Die folgenden FIGUREN legen, ohne darauf beschränkt zu sein, beispielhafte Architekturen zum Kompilieren und Ausführen des Berechnens von Quellcode dar, gemäß mindestens einer Ausführungsform.
  • 35A veranschaulicht ein System 3500, das konfiguriert ist, um den CUDA-Quellcode 3510 unter Verwendung unterschiedlichen Arten von Verarbeitungseinheiten zu kompilieren und auszuführen, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform umfasst das System 3500, ohne darauf beschränkt zu sein, den CUDA-Quellcode 3510, einen CUDA-Kompilierer 3550, einen Host-ausführbaren Code 3570(1), einen Host-ausführbaren Code 3570(2), einen CUDA-Vorrichtung-ausführbaren Code 3584, eine CPU 3590, eine CUDA-aktivierte GPU 3594, eine GPU 3592, ein CUDA-in-HIP-Übersetzungswerkzeug 3520, einen HIP-Quellcode 3530, einen HIP-Kompilierertreiber 3540, einen HCC 3560 und einen HCC-Vorrichtung-ausführbaren Code 3582.
  • In mindestens einer Ausführungsform ist der CUDA-Quellcode 3510 eine Sammlung von menschenlesbaren Code in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist der CUDA-Code ein menschenlesbarer Code in einer CUDA-Programmiersprache. In mindestens einer Ausführungsform ist eine CUDA-Programmiersprache eine Erweiterung der C++ Programmiersprache, die, ohne darauf beschränkt zu sein, Mechanismen umfasst, um Vorrichtungscode zu definieren und zwischen Vorrichtungscode und Host-Code zu unterscheiden. In mindestens einer Ausführungsform ist der Vorrichtungscode ein Quellcode, der, nach Kompilierung, auf einer Vorrichtung parallel ausführbar ist. In mindestens einer Ausführungsform kann eine Vorrichtung ein Prozessor sein, der für parallele Anweisungsverarbeitung optimiert ist, wie beispielsweise die CUDA-aktivierte GPU 3590, die GPU 35192 oder eine andere GPGPU usw. In mindestens einer Ausführungsform ist der Host-Code-Quellcode der, der nach Kompilierung auf einem Host ausführbar iss. In mindestens einer Ausführungsform ist ein Host ein Prozessor, wie beispielsweise die CPU 3590, die zur sequenziellen Anweisungsverarbeitung optimiert ist.
  • In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtungsfunktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform können globale Funktionen 3512, Vorrichtung-Funktionen 3514, Host-Funktionen 3516 und Host/Vorrichtung-Funktionen 3518 in CUDA-Quellcode 3510 gemischt werden. In mindestens einer Ausführungsform ist jede der globalen Funktionen 3512 auf einer Vorrichtung ausführbar und von einem Host aufrufbar. In mindestens einer Ausführungsform können daher eine oder mehrere globale Funktionen 3512 als Eintrittspunkte in eine Vorrichtung wirken. In mindestens einer Ausführungsform ist jede der globalen Funktionen 3512 ein Kernel. In mindestens einer Ausführungsform und in einer als dynamische Parallelität bekannte Technik definieren eine oder mehrere globale Funktionen 3512 einen Kernel, der auf einer Vorrichtung ausführbar ist und von einer derartigen Vorrichtung aufrufbar ist. In mindestens einer Ausführungsform wird ein Kernel N (wobei N eine beliebige positive Ganzzahl ist) Male parallel durch N unterschiedliche Threads auf einer Vorrichtung während der Ausführung ausgeführt.
  • In mindestens einer Ausführungsform wird jede der Vorrichtungsfunktionen 3514 auf einer Vorrichtung ausgeführt und ist nur von einer derartigen Vorrichtung aufrufbar. In mindestens einer Ausführungsform wird jede der Host-Funktionen 3516 auf einem Host ausgeführt und ist nur von einem derartigen Host aufrufbar. In mindestens einer Ausführungsform definiert jede der Host/Vorrichtung-Funktionen 3516 sowohl eine Host-Version einer Funktion, die auf einem Host ausführbar und nur von einem derartigen Host aufrufbar ist, als auch ein Vorrichtung-Version der Funktion, die auf einer Vorrichtung ausführbar und nur von einer derartigen Vorrichtung aufrufbar ist.
  • In mindestens einer Ausführungsform kann der CUDA-Quellcode 3510 ebenfalls, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die über eine CUDA-Laufzeit-API 3502 definiert sind. In mindestens einer Ausführungsform kann die CUDA-Laufzeit-API 3502, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Funktionen umfassen, die auf einem Host ausgeführt werden, um Vorrichtungsspeicher zuzuteilen und freizugeben, Daten zwischen Host-Speicher und Vorrichtungsspeicher zu übertragen, Systeme mit mehreren Vorrichtungen zu verwalten usw. In mindestens einer Ausführungsform kann der CUDA-Quellcode 3510 ebenfalls eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die in einer beliebigen Anzahl von anderen CUDA-APIs spezifiziert sind. In mindestens einer Ausführungsform kann eine CUDA-API eine beliebige API sein, die zur Verwendung durch den CUDA-Code ausgestaltet ist. In mindestens einer Ausführungsform umfassen CUDA-APIs, ohne darauf beschränkt zu sein, eine CUDA-Laufzeit-API 3502, eine CUDA-Treiber-API, APIs für eine beliebige Anzahl von CUDA-Bibliotheken usw. In mindestens einer Ausführungsform und relativ zu der CUDA-Laufzeit-API 3502 ist ein CUDA-Treiber-API eine API unterer Ebene, die jedoch eine feinkörnigere Steuerung einer Vorrichtung bereitstellt. In mindestens einer Ausführungsform umfassen Beispiele von CUDA-Bibliotheken, ohne darauf beschränkt zu sein, cuBLAS, cuFFT, cuRAND, cuDNN usw.
  • In mindestens einer Ausführungsform kompiliert der CUDA-Kompilierer 3550 den Eingabe-CUDA-Code (z.B. CUDA-Quellcode 3510), um den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 zu erzeugen. In mindestens einer Ausführungsform ist der CUDA-Kompilierer 3550 NVCC. In mindestens einer Ausführungsform ist der Host-ausführbare Code 3570(1) eine kompilierte Version des Host-Codes, der in dem Eingabe-Quellcode enthalten ist, der auf der CPU 3590 ausführbar ist. In mindestens einer Ausführungsform kann die CPU 3590 ein beliebiger Prozessor sein, der für eine sequenzielle Anweisungsverarbeitung optimiert ist.
  • In mindestens einer Ausführungsform ist der CUDA-Vorrichtung-ausführbarer Code 3584 eine kompilierte Version des im Eingabe-Quellcode enthaltenen Vorrichtungscode, der auf der CUDA-aktivierten GPU 3594 ausführbar ist. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbarer Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, einen IR-Code, wie beispielsweise den PTX-Code, der ferner zur Laufzeit in Binärcode für eine spezifische Zielvorrichtung (z.B. CUDA-aktivierte GPU 3594) durch einen Vorrichtungstreiber kompiliert ist. In mindestens einer Ausführungsform kann die CUDA-aktivierte GPU 3594 ein beliebiger Prozessor sein, der für parallele Anweisungsverarbeitung optimiert ist und der CUDA unterstützt. In mindestens einer Ausführungsform wird die CUDA-aktivierte GPU 3594 von NVIDIA Corporation, Santa Clara, CA, entwickelt.
  • In mindestens einer Ausführungsform ist das CUDA-in-HIP-Übersetzungswerkzeug 3520 konfiguriert, um den CUDA-Quellcode 3510 in einen funktionsmäßig ähnlichen HIP-Quellcode 3530 zu übersetzen. In mindestens einer Ausführungsform ist der HIP-Quellcode 3530 eine Sammlung von menschenlesbaren Code in einer HIP-Programmiersprache. In mindestens einer Ausführungsform ist der HIP-Code ein menschenlesbarer Code in einer HIP-Programmiersprache. In mindestens einer Ausführungsform ist eine HIP-Programmiersprache eine Erweiterung der C++ Programmiersprache, die, ohne darauf beschränkt zu sein, funktionsmäßig ähnliche Versionen von CUDA-Mechanismen umfasst, um Vorrichtungscode zu definieren und zwischen Vorrichtungscode und Host-Code zu unterscheiden. In mindestens einer Ausführungsform kann eine HIP-Programmiersprache eine Teilmenge der Funktionalität einer CUDA-Programmiersprache umfassen. In mindestens einer Ausführungsform umfasst eine HIP-Programmiersprache beispielsweise, ohne darauf beschränkt zu sein, einen Mechanismus(en), um globale Funktionen 3512 zu definieren, wobei einer derartigen HIP-Programmiersprache Unterstützung für dynamische Parallelität fehlen kann, und daher können in HIP-Code definierte globale Funktionen 3512 nur von einem Host aufrufbar sein.
  • In mindestens einer Ausführungsform umfasst der HIP-Quellcode 3530, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtung-Funktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform kann der HIP-Quellcode 3530 ebenfalls eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die in einer HIP-Laufzeit-API 3532 spezifiziert sind. In mindestens einer Ausführungsform umfasst die HIP-Laufzeit-API 3532, ohne darauf beschränkt zu sein, funktionsmäßig ähnliche Versionen einer Teilmenge von Funktionen, die in der CUDA-Laufzeit-API 3502 enthalten sind. In mindestens einer Ausführungsform kann der HIP-Quellcode 3530 ebenfalls eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen umfassen, die in einer beliebigen Anzahl von anderen HIP-APIs spezifiziert sind. In mindestens einer Ausführungsform kann eine HIP-API eine beliebige API sein, die zum Gebrauch durch HIP-Code und/oder ROCm ausgestaltet ist. In mindestens einer Ausführungsform umfassen HIP-APIs, ohne darauf beschränkt zu sein, eine HIP-Laufzeit-API 3532, einen HIP-Treiber-API, APIs für eine beliebige Anzahl von HIP-Bibliotheken, APIs für eine beliebige Anzahl von ROCm-Bibliotheken usw.
  • In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Code von einem CUDA-Syntax in einen HIP-Syntax und konvertiert eine beliebige Anzahl von anderen CUDA-Aufrufen in CUDA-Code in eine beliebige Anzahl von anderen funktionsmäßig ähnliche HIP-Aufrufen. In mindestens einer Ausführungsform ist ein CUDA-Aufruf ein Aufruf an eine Funktion, die in einer CUDA-API spezifiziert ist, und ein HIP-Aufruf ist ein Aufruf an eine in einer HIP-API spezifizierte Funktion. In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 eine beliebige Anzahl von Aufrufen an Funktionen, die in der CUDA-Laufzeit-API 3502 spezifiziert sind, in eine beliebige Anzahl von Aufrufen an Funktionen, die in der HIP-Laufzeit-API 3532 spezifiziert sind.
  • In mindestens einer Ausführungsform ist ein CUDA-in-HIP-Übersetzungswerkzeug 3520 ein Werkzeug, das als hipify-perl Werkzeug bekannt ist, das einen textbasierten Übersetzungsprozess ausführt. In mindestens einer Ausführungsform ist das CUDA-in-HIP-Übersetzungswerkzeug 3520 ein Werkzeug, das als hipify-clang bekannt ist, das relativ zu hipify-perl einen komplexeren und robusteren Übersetzungsprozess ausführt, der das Parsen des CUDA-Codes unter Verwendung von clang (einem Kompilierer-Frontend) und dann das Übersetzen resultierender Symbole beinhaltet. In mindestens einer Ausführungsform kann das ordnungsgemäße Konvertieren von CUDA-Code in HIP-Code Modifikationen (z.B. manuelle Editiervorgänge) zusätzlich zu denen erfordern, die von dem CUDA-in-HIP-Übersetzungswerkzeug 3520 durchgeführt werden.
  • In mindestens einer Ausführungsform ist der HIP-Kompilierertreiber 3540 ein Frontend, der eine Zielvorrichtung 3546 bestimmt und dann einen Kompilierer konfiguriert, der mit der Zielvorrichtung 3546 kompatibel ist, um HIP-Quellcode 3530 zu kompilieren. In mindestens einer Ausführungsform ist die Zielvorrichtung 3546 ein Prozessor, der für parallele Anweisungsverarbeitung optimiert ist. In mindestens einer Ausführungsform kann der HIP-Kompilierertreiber 3540 die Zielvorrichtung 3546 in jeder technisch machbaren Art und Weise bestimmen.
  • In mindestens einer Ausführungsform, wenn Zielvorrichtung 3546 mit CUDA (z.B. CUDA-aktivierte GPU 3594) kompatibel ist, dann erzeugt der HIP-Kompilierertreiber 3540 einen HIP/NVCC-Kompilierungsbefehl 3542. In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35B beschrieben, konfiguriert der HIP/NVCC-Kompilierungsbefehl 3542 den CUDA-Kompilierer 3550, um HIP-Quellcode 3530, ohne darauf beschränkt zu sein, unter Verwendung eines HIP-zu-CUDA-Übersetzung-Headers und einer CUDA-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf den HIP/NVCC-Kompilierungsbefehl 3542 erzeugt der CUDA-Kompilierer 3550 den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584.
  • In mindestens einer Ausführungsform, wenn die Zielvorrichtung 3546 nicht mit CUDA kompatibel ist, dann erzeugt der HIP-Kompilierertreiber 3540 einen HIP/HCC-Kompilierungsbefehl 3544. In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35C beschrieben, konfiguriert der HIP/HCC-Kompilierungsbefehl 3544 den HCC 3560, um HIP-Quellcode 3530, ohne darauf beschränkt zu sein, unter Verwendung eines HCC-Headers und einer HIP/HCC-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf den HIP/HCC-Kompilierungsbefehl 3544 erzeugt der HCC 3560 den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582. In mindestens einer Ausführungsform ist der HCC-Vorrichtung-ausführbare Code 3582 eine kompilierte Version des in dem HIP-Quellcode 3530 enthaltenen Vorrichtungscode, der auf der GPU 3592 ausführbar ist. In mindestens einer Ausführungsform kann die GPU 3592 ein beliebiger Prozessor sein, der für parallele Anweisungsverarbeitung optimiert ist, der mit CUDA nicht kompatibel und mit HCC kompatibel ist. In mindestens einer Ausführungsform wird die GPU 3592 von AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform ist die GPU 3592 eine Nicht-CUDA-aktivierte GPU 3592.
  • Lediglich für erläuternde Zwecke können drei unterschiedliche Abläufe, die in mindestens einer Ausführungsform implementiert werden können, um den CUDA-Quellcode 3510 zur Ausführung auf CPU 3590 zu kompilieren, und unterschiedliche Vorrichtungen werden in 35A anschaulich dargestellt. In mindestens einer Ausführungsform kompiliert ein direkter CUDA-Ablauf den CUDA-Quellcode 3510 zur Ausführung auf der CPU 3590 und der CUDA-aktivierten GPU 3594 ohne Übersetzen des CUDA-Quellcodes 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform übersetzt ein indirekter CUDA-Ablauf den CUDA-Quellcode 3510 in HIP-Quellcode 3530 und kompiliert dann den HIP-Quellcode 3530 zur Ausführung auf der CPU 3590 und der CUDA-aktivierten GPU 3594. In mindestens einer Ausführungsform übersetzt ein CUDA/HCC-Ablauf den CUDA-Quellcode 3510 in HIP-Quellcode 3530 und kompiliert dann den HIP-Quellcode 3530 zur Ausführung auf der CPU 3590 und der GPU 3592.
  • Ein direkter CUDA-Ablauf, der in mindestens einer Ausführungsform implementiert werden kann, wird über gestrichelte Linien und eine Reihe von annotierten Blasen A1-A3 anschaulich dargestellt. In mindestens einer Ausführungsform und wie mit der annotierten Blase A1 anschaulich dargestellt, empfängt der CUDA-Kompilierer 3550 den CUDA-Quellcode 3510 und einen CUDA-kompilierten Befehl 3548, der den CUDA-Kompilierer 3550 konfiguriert, um den CUDA-Quellcode 3510 zu kompilieren. In mindestens einer Ausführungsform wird der CUDA-Quellcode 3510, der in einem direkten CUDA-Ablauf verwendet wird, in einer CUDA-Programmiersprache geschrieben, die auf einer anderen Programmiersprache als C++ basiert (z.B. C, Fortran, Python, Java usw.). In mindestens einer Ausführungsform und als Reaktion auf den CUDA-kompilierten Befehl 3548 erzeugt der CUDA-Kompilierer 3550 den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 (mit der annotierten Blase A2 anschaulich dargestellt). In mindestens einer Ausführungsform und wie mit der annotierten Blase A3 anschaulich dargestellt, können der Host-ausführbare Code 3570(1) und der CUDA-Vorrichtung-ausführbaren Code 3584 jeweils auf der CPU 3590 und der CUDA-aktivierten GPU 3594 ausgeführt werden. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbaren Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbaren Code 3584, ohne darauf beschränkt zu sein, PTX-Code und wird ferner in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompiliert.
  • Ein indirekter CUDA-Ablauf, der in mindestens einer Ausführungsform implementiert werden kann, ist über gepunkteten Linien und ein Reihe von annotierten Blasen B1-B6 anschaulich dargestellt. In mindestens einer Ausführungsform und wie mit annotierten Blase B1 anschaulich dargestellt, empfängt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510. In mindestens einer Ausführungsform und wie mit annotierten Blase B2 anschaulich dargestellt, übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform und wie mit annotierten Blase B3 anschaulich dargestellt, empfängt der HIP-Kompilierertreiber 3540 den HIP-Quellcode 3530 und bestimmt, dass die Zielvorrichtung 3546 CUDA-aktiviert ist.
  • In mindestens einer Ausführungsform und wie mit der annotierten Blase B4 anschaulich dargestellt, erzeugt der HIP-Kompilierertreiber 3540 den HIP/NVCC-Kompilierungsbefehl 3542 und überträgt sowohl den HIP/NVCC-Kompilierungsbefehl 3542 als auch den HIP-Quellcode 3530 an den CUDA-Kompilierer 3550. In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35B beschrieben, konfiguriert der HIP/NVCC-Kompilierungsbefehl 3542 den CUDA-Kompilierer 3550, um HIP-Quellcode 3530 unter Verwendung, ohne darauf beschränkt zu sein, eines HIP-zu-CUDA-Übersetzung-Headers und einer CUDA-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf HIP/NVCC-Kompilierungsbefehl 3542 erzeugt der CUDA-Kompilierer 3550 den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 (mit annotierten Blase B5 anschaulich dargestellt). In mindestens einer Ausführungsform und wie mit der annotierten Blase B6 anschaulich dargestellt, können der Host-ausführbare Code 3570(1) und der CUDA-Vorrichtung-ausführbare Code 3584 jeweils auf der CPU 3590 und der CUDA-aktivierten GPU 3594 ausgeführt werden. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, PTX-Code und ist ferner in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompiliert.
  • Ein CUDA/HCC-Ablauf, der in mindestens einer Ausführungsform implementiert werden kann, wird über durchgezogene Linien und eine Reihe von annotierten Blasen C1-C6 anschaulich dargestellt. In mindestens einer Ausführungsform und wie mit der annotierten Blase C1 anschaulich dargestellt, empfängt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510.
  • In mindestens einer Ausführungsform und wie mit der annotierten Blase C2 anschaulich dargestellt, übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in den HIP-Quellcode 3530. In mindestens einer Ausführungsform und wie mit der annotierten Blase C3 anschaulich dargestellt, empfängt der HIP-Kompilierertreiber 3540 den HIP-Quellcode 3530 und bestimmt, dass die Zielvorrichtung 3546 nicht CUDA-aktiviert ist.
  • In mindestens einer Ausführungsform erzeugt der HIP-Kompilierertreiber 340 den HIP/HCC-Kompilierungsbefehl 3544 und überträgt sowohl den HIP/HCC-Kompilierungsbefehl 3544 als auch den HIP-Quellcode 3530 an den HCC 3560 (mit der annotierten Blase C4 anschaulich dargestellt). In mindestens einer Ausführungsform und wie ausführlicher in Verbindung mit 35C beschrieben, konfiguriert der HIP/HCC-Kompilierungsbefehl 3544 den HCC 3560, um den HIP-Quellcode 3530, ohne darauf beschränkt zu sein, unter Verwendung eines HCC-Headers und einer HIP/HCC-Laufzeitbibliothek zu kompilieren. In mindestens einer Ausführungsform und als Reaktion auf den HIP/HCC-Kompilierungsbefehl 3544 erzeugt der HCC 3560 den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582 (mit der annotierten Blase C5 anschaulich dargestellt). In mindestens einer Ausführungsform und wie mit der annotierten Blase C6 anschaulich dargestellt, kann der Host-ausführbare Code 3570(2) und der HCC-Vorrichtung-ausführbare Code 3582 auf jeweils der CPU 3590 und der GPU 3592 ausgeführt werden.
  • In mindestens einer Ausführungsform kann, nachdem der CUDA-Quellcode 3510 in den HIP-Quellcode 3530 übersetzt ist, der HIP-Kompilierertreiber 3540 anschließend verwendet werden, um einen ausführbaren Code für entweder die CUDA-aktivierte GPU 3594 oder die GPU 3592 ohne erneutes Ausführen des CUDA-in-HIP-Übersetzungswerkzeugs 3520 zu erzeugen. In mindestens einer Ausführungsform übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530, der dann im Speicher gespeichert wird. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 dann den HCC 3560, um den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582 basierend auf dem HIP-Quellcode 3530 zu erzeugen. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 anschließend den CUDA-Kompilierer 3550, um den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 basierend auf dem gespeicherten HIP-Quellcode 3530 zu erzeugen.
  • 35B veranschaulicht ein System 3504, das konfiguriert ist, um den CUDA-Quellcode 3510 von 35A unter Verwendung der CPU 3590 und der CUDA-aktivierten GPU 3594 gemäß mindestens einer Ausführungsform zu kompilieren und auszuführen. In mindestens einer Ausführungsform umfasst das System 3504, ohne darauf beschränkt zu sein, den CUDA-Quellcode 3510, das CUDA-in-HIP-Übersetzungswerkzeug 3520, den HIP-Quellcode 3530, den HIP-Kompilierertreiber 3540, den CUDA-Kompilierer 3550, den Host-ausführbaren Code 3570(1), den CUDA-Vorrichtung-ausführbaren Code 3584, die CPU 3590 und die CUDA-aktivierte GPU 3594.
  • In mindestens einer Ausführungsform und wie hier zuvor in Verbindung mit 35A beschrieben, umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtung-Funktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510 ebenfalls, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind.
  • In mindestens einer Ausführungsform übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Quellcode 3510 von einer CUDA-Syntax in eine HIP-Syntax und konvertiert eine beliebige Anzahl von anderen CUDA-Aufrufen in CUDA-Quellcode 3510 in eine beliebige Anzahl von anderen funktionsmäßig ähnlichen HIP-Aufrufen.
  • In mindestens einer Ausführungsform bestimmt der HIP-Kompilierertreiber 3540, dass die Zielvorrichtung 3546 CUDA-aktiviert ist und erzeugt einen HIP/NVCC-Kompilierungsbefehl 3542. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 dann den CUDA-Kompilierer 3550 über den HIP/NVCC-Kompilierungsbefehl 3542, um den HIP-Quellcode 3530 zu kompilieren. In mindestens einer Ausführungsform stellt der HIP-Kompilierertreiber 3540 einen Zugriff auf einen HIP-zu-CUDA-Übersetzung-Header 3552 als Teil des Konfigurierens des CUDA-Kompilierers 3550 bereit. In mindestens einer Ausführungsform übersetzt der HIP-zu-CUDA-Übersetzung-Header 3552 eine beliebige Anzahl von Mechanismen (z.B. Funktionen), die in einer beliebige Anzahl von HIP-APIs spezifiziert sind, in eine beliebige Anzahl von Mechanismen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind. In mindestens einer Ausführungsform verwendet der CUDA-Kompilierer 3550 den HIP-zu-CUDA-Übersetzung-Header 3552 in Verbindung mit einer CUDA-Laufzeitbibliothek 3554, die der CUDA-Laufzeit-API 3502 entspricht, um den Host-ausführbaren Code 3570(1) und den CUDA-Vorrichtung-ausführbaren Code 3584 zu erzeugen. In mindestens einer Ausführungsform kann dann der Host-ausführbare Code 3570(1) und der CUDA-Vorrichtung-ausführbare Code 3584 auf jeweils der CPU 3590 und der CUDA-aktivierten GPU 3594 ausgeführt werden. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbare Code 3584, ohne darauf beschränkt zu sein, Binärcode. In mindestens einer Ausführungsform umfasst der CUDA-Vorrichtung-ausführbaren Code 3584, ohne darauf beschränkt zu sein, PTX-Code und ist ferner in Binärcode für eine spezifische Zielvorrichtung zur Laufzeit kompiliert.
  • 35C veranschaulicht ein System 3506, das konfiguriert ist, um den CUDA-Quellcode 3510 von 35A unter Verwendung der CPU 3590 und der Nicht-CUDA-aktivierten GPU 3592 gemäß mindestens einer Ausführungsform zu kompilieren und auszuführen. In mindestens einer Ausführungsform umfasst das System 3506, ohne darauf beschränkt zu sein, den CUDA-Quellcode 3510, das CUDA-in-HIP-Übersetzungswerkzeug 3520, den HIP-Quellcode 3530, den HIP-Kompilierertreiber 3540, den HCC 3560, den Host-ausführbaren Code 3570(2), den HCC-Vorrichtung-ausführbaren Code 3582, die CPU 3590 und die GPU 3592.
  • In mindestens einer Ausführungsform und wie hier zuvor in Verbindung mit 35A beschrieben, umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von globalen Funktionen 3512, eine beliebige Anzahl (einschließlich null) von Vorrichtung-Funktionen 3514, eine beliebige Anzahl (einschließlich null) von Host-Funktionen 3516 und eine beliebige Anzahl (einschließlich null) von Host/Vorrichtung-Funktionen 3518. In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510 ebenfalls, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Aufrufen an eine beliebige Anzahl von Funktionen, die in einer beliebigen Anzahl von CUDA-APIs spezifiziert sind.
  • In mindestens einer Ausführungsform übersetzt das CUDA-in-HIP-Übersetzungswerkzeug 3520 den CUDA-Quellcode 3510 in HIP-Quellcode 3530. In mindestens einer Ausführungsform konvertiert das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Quellcode 3510 von einem CUDA-Syntax in einen HIP-Syntax und konvertiert eine beliebige Anzahl von andere CUDA-Aufrufen in Quellcode 3510 in eine beliebige Anzahl von anderen funktionsmäßig ähnlichen HIP-Aufrufen.
  • In mindestens einer Ausführungsform bestimmt der HIP-Kompilierertreiber 3540 anschließend, dass die Zielvorrichtung 3546 nicht CUDA-aktiviert ist und erzeugt einen HIP/HCC-Kompilierungsbefehl 3544. In mindestens einer Ausführungsform konfiguriert der HIP-Kompilierertreiber 3540 dann den HCC 3560, um den HIP/HCC-Kompilierungsbefehl 3544 auszuführen, um den HIP-Quellcode 3530 zu kompilieren. In mindestens einer Ausführungsform konfiguriert der HIP/HCC-Kompilierungsbefehl 3544 den HCC 3560, um, ohne darauf beschränkt zu sein, eine HIP/HCC-Laufzeitbibliothek 3558 und einen HCC-Header 3556 zu verwenden, um den Host-ausführbaren Code 3570(2) und den HCC-Vorrichtung-ausführbaren Code 3582 zu erzeugen. In mindestens einer Ausführungsform entspricht die HIP/HCC-Laufzeitbibliothek 3558 der HIP-Laufzeit-API 3532. In mindestens einer Ausführungsform umfasst der HCC-Header 3556, ohne darauf beschränkt zu sein, eine beliebige Anzahl und Art von Interoperabilitätmechanismen für HIP und HCC. In mindestens einer Ausführungsform können der Host-ausführbare Code 3570(2) und der HCC-Vorrichtung-ausführbare Code 3582 jeweils auf der CPU 3590 und der GPU 3592 ausgeführt werden.
  • 36 veranschaulicht einen beispielhaften Kernel, der durch das CUDA-in-HIP-Übersetzungswerkzeug 3520 von 35C übersetzt wird, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform partitioniert der CUDA-Quellcode 3510 ein Gesamtproblem, dass ein gegebener Kernel ausgestaltet ist, zu lösen, in relativ grobe Teilprobleme, die unabhängig unter Verwendung von Thread-Blöcken gelöst werden können. In mindestens einer Ausführungsform umfasst jeder Thread-Block, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Threads. In mindestens einer Ausführungsform wird jedes Teilproblem in relativ feine Stücke partitioniert, die kooperativ durch Threads innerhalb eines Threadblocks parallel gelöst werden können. In mindestens einer Ausführungsform können Threads innerhalb eines Thread-Blocks durch gemeinsame Nutzung von Daten durch einen gemeinsam genutzten Speicher und durch Synchronisieren der Ausführung zusammenarbeiten, um Speicherzugriffe zu koordinieren.
  • In mindestens einer Ausführungsform organisiert der CUDA-Quellcode 3510 Thread-Blöcke, die einem gegebenen Kernel zugeordnet sind, in ein eindimensionales, ein zweidimensionales oder ein dreidimensionales Gitter von Thread-Blöcken. In mindestens einer Ausführungsform umfasst jeder Thread-Block, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Threads, und ein Gitter umfasst, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Thread-Blöcken.
  • In mindestens einer Ausführungsform ist ein Kernel eine Funktion in Vorrichtungscode, der unter Verwendung eines „_global_“ Deklaration-Spezifizierer definiert ist. In mindestens einer Ausführungsform werden die Dimension eines Gitters, das einen Kernel für einen gegebenen Kernelaufruf ausführt, und zugeordnete Streams unter Verwendung eines CUDA-Kernel-Startsyntax 3610 spezifiziert. In mindestens einer Ausführungsform wird der CUDA-Kernel-Startsyntax 3610 als „KernelName<<<GridSize, BlockSize, SharedMemorySize, Stream>>>(KernelArguments)“; spezifiziert. In mindestens einer Ausführungsform ist ein Ausführungskonfigurationssyntax ein „«<...»>“ Konstrukt, der zwischen einem Kernelnamen („KernelName“) und parenthetisierte Liste von Kernelargumenten („KernelArguments“) eingesetzt ist. In mindestens einer Ausführungsform umfasst der CUDA-Kernel-Startsyntax 3610, ohne darauf beschränkt zu sein, einen CUDA-Startfunktionssyntax anstatt eines Ausführung-Konfigurationssyntax.
  • In mindestens einer Ausführungsform ist „GridSize“ von einer dim3 Art und spezifiziert die Dimension und Größe eines Gitters. In mindestens einer Ausführungsform ist Art dim3 eine CUDA-definierte Struktur, die, ohne darauf beschränkt zu sein, vorzeichenlose Ganzzahlen x, y und z umfasst. In mindestens einer Ausführungsform ist, wenn z nicht spezifiziert ist, dann z standardmäßig eins. In mindestens einer Ausführungsform ist, wenn y nicht spezifiziert ist, dann y standardmäßig ins. In mindestens einer Ausführungsform ist die Anzahl von Thread-Blöcken in einem Gitter gleich dem Produkt aus GridSize.x, GridSize.y und GridSize.z. In mindestens einer Ausführungsform ist „BlockSize“ ist von der Art dim3 und spezifiziert die Dimension und Größe jedes Threadblocks. In mindestens einer Ausführungsform ist die Anzahl von Threads pro Thread-Block gleich dem Produkt aus BlockSize.x, BlockSize.y und BlockSize.z. In mindestens einer Ausführungsform wird jedem Thread, der einen Kernel ausführt, eine eindeutige Thread-ID gegeben, die innerhalb des Kernels durch eine eingebaute Variable (z.B. „threadIdx“) zugänglich ist.
  • In mindestens einer Ausführungsform und mit Bezug auf eine CUDA-Kernel-Startsyntax 3610 ist „SharedMemorySize“ ein optionales Argument, das eine Anzahl von Bytes in einem gemeinsam genutzten Speicher spezifiziert, die dynamisch pro Thread-Block für einen gegebenen Kernelaufruf zusätzlich zu dem statisch zugeteilten Speicher zugeteilt ist. In mindestens einer Ausführungsform und mit Bezug auf die CUDA-Kernel-Startsyntax 3610 ist SharedMemorySize standardmäßig null. In mindestens einer Ausführungsform und mit Bezug auf die CUDA-Kernel-Startsyntax 3610 ist „Stream“ ein optionales Argument, das einen zugeordneten Stream spezifiziert und standardmäßig null ist, um einen Standardstream zu spezifizieren. In mindestens einer Ausführungsform ist ein Stream eine Sequenz von Befehlen (möglicherweise von unterschiedlichen Host-Threads ausgegeben), die in der Reihenfolge ausgeführt werden. In mindestens einer Ausführungsform können unterschiedliche Streams Befehle außerhalb der Reihenfolge mit Bezug zueinander oder gleichzeitig ausführen.
  • In mindestens einer Ausführungsform umfasst der CUDA-Quellcode 3510, ohne darauf beschränkt zu sein, eine Kerneldefinition für einen beispielhaften Kernel „MatAdd“ und eine Hauptfunktion. In mindestens einer Ausführungsform ist die Hauptfunktion Host-Code, der auf einem Host ausgeführt wird, und, ohne darauf beschränkt zu sein, einen Kernelaufruf umfasst, der veranlasst, dass der Kernel MatAdd auf einer Vorrichtung ausgeführt wird. In mindestens einer Ausführungsform und wie gezeigt fügt der Kernel MatAdd zwei Matrizen A und B der Größe NxN hinzu, wobei N eine positive Ganzzahl ist, und speichert das Ergebnis in einer Matrix C. In mindestens einer Ausführungsform definiert die Hauptfunktion eine Variable threadsPerBlock als 16 mal 16 und eine numBlocks Variable als N/16 mal N/16. In mindestens einer Ausführungsform spezifiziert dann die Hauptfunktion den Kernelaufruf „MatAdd«<numBlocks, threadsPerBlock»>(A, B, C);“. In mindestens einer Ausführungsform und gemäß CUDA-Kernel-Startsyntax 3610 wird der Kernel MatAdd unter Verwendung eines Gitters von Thread-Blöcken mit einer Dimension N/16 mal N/16 ausgeführt, wobei jeder Thread-Block eine Dimension von 16 mal 16 aufweist. In mindestens einer Ausführungsform umfasst jeder Thread-Block 256 Threads, ein Gitter wird mit genug Blöcken erzeugt, um einen Thread pro Matrixelement aufzuweisen, und jeder Thread in einem derartigen Gitter führt Kernel MatAdd aus, um eine paarweise Addition durchzuführen.
  • In mindestens einer Ausführungsform übersetzt, während des Übersetzens des CUDA-Quellcodes 3510 in HIP-Quellcode 3530, das CUDA-in-HIP-Übersetzungswerkzeug 3520 jeden Kernelaufruf in CUDA-Quellcode 3510 von der CUDA-Kernel-Startsyntax 3610 in eine HIP-Kernel-Startsyntax 3620 und konvertiert eine beliebige Anzahl von anderen CUDA-Aufrufen in Quellcode 3510 in eine beliebige Anzahl von anderen funktionsmäßig ähnlichen HIP-Aufrufen. In mindestens einer Ausführungsform wird der HIP-Kernel-Startsyntax 3620 spezifiziert als „hipLaunchKernelGGL (KernelName, GridSize, BlockSize, SharedMemorySize, Stream, KernelArguments);“. In mindestens einer Ausführungsform weist jeder von KernelName, GridSize, BlockSize, SharedMemorySize, Stream und KernelArguments die gleiche Bedeutung in der HIP-Kernel-Startsyntax 3620 wie in der CUDA-Kernel-Startsyntax 3610 auf (hier zuvor beschrieben). In mindestens einer Ausführungsform sind die Argumente SharedMemorySize und Stream in der HIP-Kernel-Startsyntax 3620 erforderlich und sind in der CUDA-Kernel-Startsyntax 3610 optional.
  • In mindestens einer Ausführungsform ist ein Abschnitt des in 36 anschaulich dargestellten HIP-Quellcodes 3530 mit einem Abschnitt des in 36 anschaulich dargestellten HIP-Quellcodes 3510 mit Ausnahme eines Kernelaufrufs identisch, der veranlasst, dass der Kernel MatAdd auf einer Vorrichtung ausgeführt wird. In mindestens einer Ausführungsform ist der Kernel MatAdd in HIP-Quellcode 3530 mit dem gleichen „_global_“ Deklaration-Spezifizierer definiert, mit dem Kernel MatAdd in CUDA-Quellcode 3510 definiert ist. In mindestens einer Ausführungsform ist ein Kernelaufruf in HIP-Quellcode 3530 gleich „hipLaunchKernelGGL(MatAdd, numBlocks, threadsPerBlock, 0, 0, A, B, C)“; während ein entsprechender Kernelaufruf in CUDA-Quellcode 3510 gleich „MatAdd«<numBlocks, threadsPerBlock»>(A, B, C)“; ist.
  • 37 veranschaulicht die Nicht-CUDA-aktivierte GPU 3592 von 35C ausführlicher gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform wird die GPU 3592 von AMD Corporation, Santa Clara, CA, entwickelt. In mindestens einer Ausführungsform kann die GPU 3592 konfiguriert sein, um Rechenoperationen in einer hochparallelen Art und Weise durchzuführen. In mindestens einer Ausführungsform ist die GPU 3592 konfiguriert, um Graphik-Pipeline-Operationen auszuführen, wie beispielsweise Zeichenbefehle, Pixeloperationen, geometrische Berechnungen und andere Operationen, die dem Rendern eines Bild in einer Anzeige zugeordnet sind. In mindestens einer Ausführungsform ist die GPU 3592 konfiguriert, um Operationen ohne Bezug auf Graphik auszuführen. In mindestens einer Ausführungsform ist die GPU 3592 konfiguriert, um sowohl Operationen mit Bezug auf Graphik als auch Operationen ohne Bezug auf Graphik auszuführen. In mindestens einer Ausführungsform kann die GPU 3592 konfiguriert sein, um den im HIP-Quellcode 3530 enthaltenen Vorrichtungscode auszuführen.
  • In mindestens einer Ausführungsform umfasst die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Anzahl von programmierbaren Verarbeitungseinheiten 3720, einen Befehlsprozessor 3710, einen L2-Cache 3722, Speichercontroller 3770, DMA-Maschinen 3780(1), Systemspeichercontroller 3782, DMA-Maschinen 3780(2) und GPU-Controller 3784. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3720, ohne darauf beschränkt zu sein, einen Arbeitslastmanager 3730 und eine beliebige Anzahl von Recheneinheiten 3740. In mindestens einer Ausführungsform liest der Befehlsprozessor 3710 Befehle aus einer oder mehreren Befehlswarteschlangen (nicht gezeigt) und verteilt Befehle an den Arbeitslastmanager 3730. In mindestens einer Ausführungsform verteilt, für jede programmierbare Verarbeitungseinheit 3720, der zugeordnete Arbeitslastmanager 3730 Arbeit an Recheneinheiten 3740, die in der programmierbaren Verarbeitungseinheit 3720 enthalten sind. In mindestens einer Ausführungsform kann jede Recheneinheit 3740 eine beliebige Anzahl von Thread-Blöcken ausführen, wobei jeder Thread-Block jedoch auf einer einzigen Recheneinheit 3740 ausgeführt wird. In mindestens einer Ausführungsform ist eine Arbeitsgruppe ein Threadblock.
  • In mindestens einer Ausführungsform umfasst jede Recheneinheit 3740, ohne darauf beschränkt zu sein, eine beliebige Anzahl von SIMD-Einheiten 3750 und einen gemeinsam genutzten Speicher 3760. In mindestens einer Ausführungsform implementiert jede SIMD-Einheit 3750 eine SIMD-Architektur und ist konfiguriert, um Operationen parallel durchzuführen. In mindestens einer Ausführungsform umfasst jede SIMD-Einheit 3750, ohne darauf beschränkt zu sein, eine Vektor-ALU 3752 und eine Vektorregisterdatei 3754. In mindestens einer Ausführungsform führt jede SIMD-Einheit 3750 einen unterschiedlichen Warp aus. In mindestens einer Ausführungsform ist ein Warp eine Gruppe von Threads (z.B. 16 Threads), wobei jeder Thread in dem Warp zu einem einzigen Thread-Block gehört und konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf einem einzigen Satz von Anweisungen zu verarbeiten. In mindestens einer Ausführungsform kann Prädikation verwendet werden, um einen oder mehrere Threads in einem Warp zu deaktivieren. In mindestens einer Ausführungsform ist eine Spur ein Thread. In mindestens einer Ausführungsform ist ein Arbeitselement ein Thread. In mindestens einer Ausführungsform ist eine Wellenfront ein Warp. In mindestens einer Ausführungsform können unterschiedlichen Wellenfronten in einem Thread-Block zusammen synchronisieren und über gemeinsam genutzten Speicher 3760 kommunizieren.
  • In mindestens einer Ausführungsform werden programmierbare Verarbeitungseinheiten 3720 als „Shader-Maschinen“ bezeichnet. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3720, ohne darauf beschränkt zu sein, eine beliebige Menge von dedizierter Graphikhardware zusätzlich zu den Recheneinheiten 3740. In mindestens einer Ausführungsform umfasst jede programmierbare Verarbeitungseinheit 3720, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von Geometrieprozessoren, eine beliebige Anzahl (einschließlich null) von Rasterern, eine beliebige Anzahl (einschließlich null) von Render-Backends, einen Arbeitslastmanager 3730 und eine beliebige Anzahl von Recheneinheiten 3740.
  • In mindestens einer Ausführungsform benutzen die Recheneinheiten 3740 den L2-Cache 3722 gemeinsam. In mindestens einer Ausführungsform ist der L2-Cache 3722 partitioniert. In mindestens einer Ausführungsform ist ein GPU-Speicher 3790 von allen Recheneinheiten 3740 in der GPU 3592 zugänglich. In mindestens einer Ausführungsform erleichtern der Speichercontroller 3770 und der Systemspeichercontroller 3782 Datenübertragungen zwischen der GPU 3592 und einem Host, und DMA-Maschinen 3780(1) ermöglichen asynchrone Speicherübertragungen zwischen der GPU 3592 und einem derartigen Host. In mindestens einer Ausführungsform erleichtern der Speichercontroller 3770 und der GPU-Controller 3784 Datenübertragungen zwischen der GPU 3592 und anderen GPUs 3592 und DMA-Maschinen 3780(2) ermöglichen asynchrone Speicherübertragungen zwischen der GPU 3592 und anderen GPUs 3592.
  • In mindestens einer Ausführungsform umfasst die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Systemzwischenverbindung, die Daten- und Steuerübertragungen über eine beliebige Anzahl und Art von direkt oder indirekt verbundenen Komponenten erleichtert, die intern oder extern zu der GPU 3592 sein können. In mindestens einer Ausführungsform umfasst die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Anzahl und Art von E/A-Schnittstellen (z.B. PCIe), die mit einer beliebigen Anzahl und Art von peripheren Vorrichtungen gekoppelt sind. In mindestens einer Ausführungsform kann die GPU 3592, ohne darauf beschränkt zu sein, eine beliebige Anzahl (einschließlich null) von Anzeigemaschinen und eine beliebige Anzahl (einschließlich null) von Multimediamaschinen umfassen. In mindestens einer Ausführungsform implementiert die GPU 3592 ein Speichersubsystem, das, ohne darauf beschränkt zu sein, eine beliebige Menge und Art von Speichercontrollern (z.B. Speichercontroller 3770 und Systemspeichercontroller 3782) und Speichervorrichtungen (z.B. gemeinsam genutzte Speicher 3760) umfasst, die einer Komponente fest zugeordnet sein können oder unter mehreren Komponenten gemeinsam genutzt werden. In mindestens einer Ausführungsform implementiert die GPU 3592 ein Cache-Teilsystem, das, ohne darauf beschränkt zu sein, eine oder mehrere Cache-Speicher (z.B. den L2-Cache 3722) umfasst, die jeweils private sein zu oder zwischen einer beliebigen Anzahl von Komponenten gemeinsam genutzt werden (z.B. SIMD-Einheiten 3750, Recheneinheiten 3740 und programmierbare Verarbeitungseinheiten 3720).
  • 38 veranschaulicht, wie Threads eines beispielhaften CUDA-Gitter 3820 in unterschiedlichen Recheneinheiten 3740 von 37 abgebildet werden, gemäß mindestens einer Ausführungsform. In mindestens einer Ausführungsform und lediglich aus erläuternden Gründen weist das Gitter 3820 eine GridSize von BX mal BY mal 1 und eine BlockSize von TX mal TY mal 1 auf. In mindestens einer Ausführungsform umfasst das Gitter 3820 daher, ohne darauf beschränkt zu sein, (BX * BY) Thread-Blöcke 3830 und jeder Thread-Block 3830 umfasst, ohne darauf beschränkt zu sein, (TX * TY) Threads 3840. Die Threads 3840 werden in 38 als schnörkelige Pfeile anschaulich dargestellt.
  • In mindestens einer Ausführungsform wird das Gitter 3820 in die programmierbare Verarbeitungseinheit 3720(1) abgebildet, die, ohne darauf beschränkt zu sein, Recheneinheiten 3740(1)-3740(C) umfasst. In mindestens einer Ausführungsform und wie gezeigt, werden (BJ * BY) Thread-Blöcke 3830 in die Recheneinheit 3740(1) abgebildet und die verbleibenden Thread-Blöcke 3830 werden in die Recheneinheit 3740(2) abgebildet. In mindestens einer Ausführungsform kann jeder Thread-Block 3830, ohne darauf beschränkt zu sein, eine beliebige Anzahl von Warps umfassen und jeder Warp wird in eine unterschiedliche SIMD-Einheit 3750 von 37 abgebildet.
  • In mindestens einer Ausführungsform können Warps in einem gegebenen Thread-Block 3830 zusammen synchronisieren und durch den gemeinsam genutzten Speicher 3760 kommunizieren, der in der zugeordneten Recheneinheit 3740 enthalten ist. Beispielsweise und in mindestens einer Ausführungsform können Warps in dem Thread-Block 3830(BJ,1) zusammen synchronisieren und durch den gemeinsam genutzten Speicher 3760(1) kommunizieren. Beispielsweise und in mindestens einer Ausführungsform können Warps in Thread-Block 3830(BJ+1,1) zusammen synchronisieren und durch gemeinsam genutzten Speicher 3760(2) kommunizieren.
  • Andere Variationen liegen innerhalb des Wesens der vorliegenden Offenbarung. Obwohl die offenbarten Techniken für verschiedene Modifikationen und alternative Konstruktionen empfänglich sind, werden bestimmte erläuterte Ausführungsformen davon in den Zeichnungen gezeigt und wurden vorstehend ausführlich beschrieben. Es sei jedoch zu verstehen, dass keine Absicht besteht, die Offenbarung auf die offenbarte spezielle Form oder Formen zu begrenzen, sondern die Absicht besteht im Gegenteil darin, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in innerhalb des Wesens und des Umfangs der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
  • Die Verwendung der Begriffe „einer/eine/eines“ und „der/die/das“ und ähnliche Referenzen im Kontext des Beschreibens der offenbarten Ausführungsformen (insbesondere im Kontext der folgenden Ansprüche) sind auszulegen, als sowohl den Singular als auch den Plural umfassend, solange nichts Anderweitiges hier angegeben oder durch den Kontext deutlich widersprochen wird. Die Begriffe „umfassend“, „aufweisend“, „einschließlich“ und „enthaltend“ sind als offene Begriffe zu betrachtet (das heißt bedeutend „umfassend, jedoch nicht beschränkt auf“), solange nicht anderweitig angemerkt. Der Begriff „verbunden,“ wenn nicht modifiziert und sich auf physische Verbindungen beziehend, ist als teilweise oder vollständig innerhalb enthaltend, befestigt an oder zusammen verbunden auszulegen, sogar wenn es etwas Intervenierendes gibt. Die Nennung von Wertebereichen hier ist lediglich bestimmt, um als ein Kurzformverfahren des einzelnen Bezugnehmens auf jeden separaten Wert zu dienen, der in den Bereich fällt, es sei denn, dass hier etwas anderes angegeben ist, und jeder separate Wert wird in die Spezifikation aufgenommen, als ob er hier einzeln wiedergegeben wäre. Die Verwendung des Begriffs „Satz“ (z.B., „ein Satz von Objekten“) oder „Teilsatz“, es sei denn, es ist etwas anderes angemerkt oder dies widerspricht dem Kontext, ist als eine nicht leere Zusammenstellung auszulegen, die ein oder mehrere Elemente umfasst. Ferner bezeichnet, es sei denn, dass etwas anderes angemerkt ist oder dies dem Kontext widerspricht, der Begriff „Teilsatz“ eines entsprechenden Satzes nicht notwendigerweise einen richtigen Teilsatz des entsprechenden Satzes, sondern der Teilsatz und ein entsprechender Satz können gleich sein.
  • Verbindende Sprache, wie beispielsweise Ausdrücke der Form „mindestens eines von A, B, und C“, oder „mindestens eines von A, B und C“, es sei denn, das es speziell anders angemerkt ist oder anderweitig eindeutig durch den Kontext widersprochen wird, ist andernfalls in dem Kontext zu verstehen, wie sie allgemein verwendet wird, um darzustellen, dass ein Objekt, ein Begriff usw. entweder A oder B oder C oder einen beliebigen nicht leeren Teilsatz des Satzes aus A und B und C sein kann. Beispielsweise beziehen sich im veranschaulichten Beispiel eines Satzes, der drei Elemente aufweist, die verbindenden Ausdrücke „mindestens eines von A, B, und C“ und „mindestens eines von A, B und C“ auf einen der folgenden Sätze: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. Somit ist eine derartige verbindende Sprache allgemein nicht bestimmt, zu implizieren, dass bestimmte Ausführungsformen verlangen, dass mindestens eines von A, mindestens eines von B, und mindestens eines von C jeweils vorhanden sind. Außerdem gibt, es sei denn, dass etwas anderes angemerkt ist oder durch den Kontext widersprochen wird, der Begriff „Mehrzahl“ einen Zustand in der Mehrzahl an (z.B., „eine Mehrzahl von Objekten“ gibt mehrere Objekten an). Eine Anzahl von Elementen in einer Mehrzahl mindestens zwei, kann jedoch mehr sein, wenn so entweder explizit oder durch en Kontext angegeben. Ferner bedeutet, es sei denn, dass etwas anderes angemerkt ist oder dies anderweitig aus dem Kontext offensichtlich ist, der Ausdruck „basierend auf“ „basierend mindestens teilweise auf“ und nicht „basierend allein auf.“
  • Operationen von hier beschriebenen Prozessen können in jeder geeigneten Reihenfolge durchgeführt werden, sofern hier nicht anderweitig angegeben oder der Kontext dem anderweitig eindeutig widerspricht. In mindestens einer Ausführungsform wird ein Prozess, wie beispielsweise jene Prozesse (oder Variationen und/oder Kombinationen davon), die hier beschrieben sind, unter der Steuerung von einem oder mehreren Computersystemen durchgeführt, die mit ausführbaren Anweisungen konfiguriert sind, und wird als Code (z.B., ausführbare Anweisungen, ein oder mehrere Computerprogramme oder ein oder mehrere Anwendungen) implementiert, der zusammen auf einem oder mehreren Prozessoren durch Hardware oder Kombinationen davon ausgeführt wird. In mindestens einer Ausführungsform wird ein Code auf einem computerlesbaren Speichermedium beispielsweise in Form eines Computerprogramms ausgeführt, das mehrere Anweisungen umfasst, die durch einen oder mehrere Prozessoren ausführbar sind. In mindestens einer Ausführungsform ist ein computerlesbares Speichermedium ein nicht flüchtiges computerlesbares Speichermedium, das flüchtige Signale ausschließt (z.B., eine propagierende transiente elektrische oder elektromagnetische Übertragung), jedoch nicht flüchtige Datenspeicherschaltungen (z.B., Puffer, Cache und Warteschlangen) innerhalb Transceivern von flüchtigen Signalen umfasst. In mindestens einer Ausführungsform ist der Code (z.B., ein ausführbarer Code oder Quellencode) auf einem Satz von einem oder mehreren nicht flüchtigen computerlesbaren Speichermedien gespeichert, die darauf gespeicherte ausführbare Anweisungen aufweisen (oder anderem Speicher, um ausführbare Anweisungen zu speichern) die, wenn durch einen oder mehreren Prozessoren eines Computersystems ausgeführt (d.h., als ein Ergebnis einer Ausführung) das Computersystem veranlassen, hier beschriebene Vorgänge durchzuführen. Ein Satz von nicht flüchtigen computerlesbaren Speicherungsmedien umfasst in mindestens einer Ausführungsform mehrere nicht flüchtige computerlesbare Speicherungsmedien und eines oder mehrere von einzelnen nicht flüchtigen Speicherungsmedien der mehreren nicht flüchtigen computerlesbaren Speichermedien Fehlen sämtlicher Code, während mehrere nicht flüchtige computerlesbare Speichermedien zusammen den gesamten Code speichern. In mindestens einer Ausführungsform werden ausführbare Anweisungen ausgeführt, so dass unterschiedliche Anweisungen durch unterschiedliche Prozessoren ausgeführt werden - beispielsweise speichert ein nicht flüchtiges computerlesbares Speichermedium Anweisungen und eine zentrale Haupt-Verarbeitungseinheit („CPU“) führt einige Anweisungen aus, während eine Graphikverarbeitungseinheit („GPU“) andere Anweisungen ausführt. In mindestens einer Ausführungsform weisen unterschiedliche Komponenten eines Computersystems getrennte Prozessoren auf und unterschiedliche Prozessoren führen unterschiedliche Teilsätze von Anweisungen aus.
  • Dementsprechend sind in mindestens einer Ausführungsform Computersysteme konfiguriert, um ein oder mehrere Dienste zu implementieren, die einzeln oder gemeinsam Vorgänge von hier beschriebenen Prozessen durchführen, und derartige Computersysteme sind mit anwendbarer Hardware und/oder Software konfiguriert, welche die Durchführung von Vorgängen ermöglichen.
  • Ferner ist ein Computersystem, das mindestens eine Ausführungsform der vorliegenden Offenbarung implementiert, eine einzelne Vorrichtung, und ist in einer anderen Ausführungsform ein verteiltes Computersystem, das mehrere Vorrichtungen umfasst, die unterschiedlich arbeiten, sodass das verteilte Computersystem die hier beschriebenen Vorgänge durchführt, und sodass eine einzelne Vorrichtung nicht alle Vorgänge durchführt.
  • Die Verwendung von einzelnen oder allen Beispielen oder einer hier beispielhaften bereitgestellten Formulierung (z.B., „wie beispielsweise“) ist bestimmt, lediglich Ausführungsformen der Offenbarung besser zu beleuchten und stellt keine Einschränkung des Umfangs der Offenbarung dar, es sei denn, dass etwas anderes beansprucht ist. Keine Sprache in der Spezifikation sollte so ausgelegt werden, dass sie ein beliebiges nichtbeanspruchtes Element als wesentlich angibt, um die Offenbarung zu praktizieren.
  • Sämtliche Bezugnahmen, einschließlich Veröffentlichungen, Patenanmeldungen und Patente, die hier zitiert sind, werden hiermit durch Bezugnahme in dem gleichen Ausmaß aufgenommen, als ob jede Bezugnahme einzeln und speziell angegeben würde, um durch Bezugnahme aufgenommen zu werden, und in ihrer Gesamtheit hier dargelegt wären.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ zusammen mit ihren Ableitungen verwendet werden. Es sei zu verstehen, dass diese Begriffe nicht als Synonyme füreinander bestimmt sind. Stattdessen kann in bestimmten Beispielen „verbunden“ oder „gekoppelt“ verwendet werden, um anzugeben, dass zwei oder mehr Elemente in direktem oder indirektem physischen oder elektrischen Kontakt miteinander sind. „Gekoppelt“ kann ebenfalls bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, jedoch dennoch weiterhin kooperieren oder miteinander wechselwirken.
  • Sofern nicht speziell anders angegeben, wird anerkannt, dass die in dieser Spezifikation enthaltenen Begriffe wie „Verarbeiten“, „Rechnen“, „Berechnen“, „Bestimmen“ oder dergleichen sich auf eine Aktion und/oder Verfahren eines Computers oder eines Rechensystems beziehen, wie einem oder mehreren Computern oder einer ähnlichen elektronischen Vorrichtung, die Daten manipulieren oder umwandeln, die als physikalische, wie beispielsweise elektronische, Größen in den Registern des Rechensystems und/oder Speichern in andere Daten, die auf ähnliche Weise als physikalische Größen innerhalb der Speicher des Rechensystems, Registern oder anderer derartiger Informationsspeicherungs-, Übertragungs- oder Anzeigevorrichtungen dargestellt werden.
  • Auf eine ähnlichen Art und Weise kann sich der Begriff „Prozessor“ auf jede Vorrichtung oder Abschnitt einer Vorrichtung beziehen, die elektronische Daten aus Registern und/oder Speicher verarbeitet und diese elektronischen Daten in andere elektronische Daten transformiert, die in Registern und/oder Speicher gespeichert werden können. Als nicht einschränkendes Beispiele kann „Prozessor“ eine CPU oder eine GPU sein. Eine „Rechenplattform“ kann einen oder mehrere Prozessoren umfassen. Wie hier verwendet, können „Software“-Prozesse beispielsweise Software- und/oder Hardwareentitäten umfassen, die Arbeit im Laufe der Zeit durchführen, wie beispielsweise Aufgaben, Threads und intelligente Agenten.
  • Jeder Prozess kann sich ebenfalls auf mehrere Prozesse zum Ausführen von Anweisungen der Reihe nach oder parallel, kontinuierlich oder intermittierend beziehen. Die Begriffe „System“ und „Verfahren“ werden hier austauschbar verwendet, insofern als System ein oder mehrere Verfahren verkörpern und Verfahren als ein System betrachtet werden können.
  • In dem vorliegenden Dokument können Verweise auf das Erhalten, Erfassen, Empfangen oder Eingeben von analogen oder digitalen Daten in ein Teilsystem, Computersystem oder computerimplementierte Maschine erfolgen. Der Prozess des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen und digitalen Daten kann in einer Vielfalt von Möglichkeiten erreicht werden, wie beispielsweise durch Empfangen von Daten als ein Parameter eines Funktionsaufrufs oder eines Aufrufs an eine Anwendungsprogrammierschnittstelle. In einigen Implementierungen kann der Prozess des Erhaltens, Erfassens, Empfangen oder Eingebens von analogen oder digitalen Daten durch Transferieren von Daten über eine serielle oder parallele Schnittstelle erreicht werden. In einer anderen Implementierung können Prozesse des Erhaltens, Erfassens, Empfangens oder Eingebens von analogen oder digitalen Daten durch Transferieren von Daten über ein Computernetzwerk von bereitstellender Entität zu erfassender Entität erreicht werden. Verweise können ebenfalls auf das Bereitstellen, Ausgeben, Übertragen, Senden oder Repräsentieren analoger oder digitaler Daten erfolgen. In verschiedene Beispielen kann der Prozess des Bereitstellens, Ausgebens, Übertragens, Sendens oder Repräsentierens analoger oder digitaler Daten durch Transferieren von Daten als ein Eingangs- oder Ausgangsparameter eines Funktionsaufruf, eines Parameters einer Anwendungsprogrammierschnittstelle oder eines Mechanismus zur Interprozesskommunikation erreicht werden.
  • Obwohl Beschreibungen hier beispielhafte Implementierungen von beschriebenen Techniken darlegen, können andere Architekturen verwendet werden, um die beschriebene Funktionalität zu implementieren, und sind bestimmt, innerhalb des Umfangs der Offenbarung zu liegen. Des Weiteren könnten, obwohl spezifische Verteilungen von Verantwortlichkeiten obenstehend zum Zweck der Erläuterung definiert sind, verschiedene Funktionen und Verantwortlichkeiten in unterschiedlichen Weisen abhängig von den Umständen verteilt und aufgeteilt werden.
  • Des Weiteren sei zu verstehen, obwohl der Gegenstand in einer für strukturelle Merkmale und/oder methodische Handlungen spezifischen Sprache beschrieben wurde, dass der in der Offenbarung definierte Gegenstand nicht notwendigerweise auf beschriebene spezifische Merkmale oder Handlungen beschränkt ist. Vielmehr werden spezifische Merkmale und Handlungen als beispielhafte Formen des Implementierens der Ansprüche offenbart.

Claims (31)

  1. System, umfassend: einen oder mehrere Prozessoren; und einen Kühlkörper, der durch eine flexible Wärmeleitung mit dem einen oder mehreren Prozessoren verbunden ist, wobei eine Position des Kühlkörpers einstellbar ist.
  2. System gemäß Anspruch 1, wobei der einer oder mehrere Prozessoren eine oder mehrere Graphikverarbeitungseinheiten umfassen.
  3. System gemäß Anspruch 1 oder 2, wobei die flexible Wärmeleitung ein Schleifensiphon umfasst.
  4. System gemäß einem der vorangehenden Ansprüche, wobei die Position des Kühlkörpers in mehreren Positionen einstellbar ist, um die Wärmeableitung durch den Kühlkörper zu verbessern.
  5. System gemäß einem der vorangehenden Ansprüche, wobei die Position des Kühlkörpers einstellbar ist, mindestens eines von einer Nutzung, Geschwindigkeit oder Temperatur von Luftstrom zu einem zweiten Kühlkörper zu verbessern.
  6. System gemäß einem der vorangehenden Ansprüche, wobei die Position des Kühlkörpers einstellbar ist, um dem Standort des Kühlkörpers auf einem Baugruppenträger Rechnung zu tragen.
  7. System gemäß einem der vorangehenden Ansprüche, ferner umfassend eine Anbringungsvorrichtung, die eine oder mehrere Befestigungspunkte umfasst, wobei der eine oder mehrere Befestigungspunkte erlauben, dass die Position des Kühlkörpers eingestellt werden kann.
  8. System gemäß einem der vorangehenden Ansprüche, wobei die Position des Kühlkörpers mindestens eine von winkelmäßig, horizontal oder vertikal einstellbar mit Bezug auf eine Ebene ist, die durch eine Oberfläche definiert ist, auf welcher der eine oder mehrere Prozessoren angebracht sind.
  9. System, umfassend: einen Kühlkörper; und eine flexible Wärmeleitung, um mit einem oder mehreren Prozessoren verbunden zu sein, wobei eine Position des Kühlkörpers, während er mit dem einen oder mehreren Prozessoren verbunden ist, einstellbar ist.
  10. System gemäß Anspruch 9, wobei die flexible Wärmeleitung ein Schleifensiphon umfasst.
  11. System gemäß Anspruch 10, wobei sich der Kühlkörper mit dem einen oder mehreren Prozessoren durch eine Reservoirbasis verbindet.
  12. System gemäß einem der Ansprüche 9 bis 11, wobei der Kühlkörper in mehreren Positionen einstellbar ist.
  13. System gemäß einem der Ansprüche 9 bis 12, wobei die Position des Kühlkörpers einstellbar ist, um den Luftstrom zu einem zweiten Kühlkörper zu maximieren.
  14. System gemäß einem der Ansprüche 9 bis 13, wobei die Position des Kühlkörpers einstellbar ist, um die Temperatur des Luftstroms zu einem zweiten Kühlkörper zu senken.
  15. System gemäß einem der Ansprüche 9 bis 14, wobei die Position des Kühlkörpers einstellbar ist, um dem Standort des Kühlkörpers auf einem Baugruppenträger Rechnung zu tragen.
  16. System gemäß einem der Ansprüche 9 bis 15, ferner umfassend eine Anbringungsvorrichtung, die eine oder mehrere Befestigungspunkte umfasst, wobei der eine oder mehrere Befestigungspunkte erlauben, dass die Position des Kühlkörpers eingestellt werden kann.
  17. Verfahren, umfassend: Bereitstellen eines Kühlkörper, der durch eine flexible Wärmeleitung mit einem oder mehreren Prozessoren verbunden werden kann, wobei eine Position des Kühlkörpers einstellbar ist, während er mit dem einer oder mehreren Prozessoren verbunden ist.
  18. Verfahren gemäß Anspruch 17, wobei die flexible Wärmeleitung ein Schleifensiphon umfasst.
  19. Verfahren gemäß Anspruch 18, ferner umfassend Verbinden der flexiblen Wärmeleitung mit dem einem oder mehreren Prozessoren durch eine Reservoirbasis.
  20. Verfahren gemäß einem der Ansprüche 17 bis 19, ferner umfassend Einstellen der Position des Kühlkörpers, um den Luftstrom zu dem Kühlkörper zu maximieren.
  21. Verfahren gemäß einem der Ansprüche 17 bis 20, ferner umfassend Einstellen der Position des Kühlkörpers, um den Luftstrom zu einem zweiten Kühlkörper zu maximieren.
  22. Verfahren gemäß einem der Ansprüche 17 bis 21, ferner umfassend ein Einstellen der Position des Kühlkörpers, um Temperatur des Luftstroms zu einem zweiten Kühlkörper zu senken.
  23. Verfahren gemäß einem der Ansprüche 17 bis 22, ferner umfassend Einstellen der Position des Kühlkörpers, um dem Standort des Kühlkörpers auf einem Baugruppenträger Rechnung zu tragen.
  24. Graphikkarte, umfassend: eine oder mehrere Graphikverarbeitungseinheiten; und einen Kühlkörper, der durch eine flexible Wärmeleitung mit der einen oder mehreren Graphikverarbeitungseinheiten verbunden ist, wobei eine Position des Kühlkörpers einstellbar ist.
  25. Graphikkarte gemäß Anspruch 24, ferner umfassend eine Stütze, um den Kühlkörper an der Graphikkarte zu befestigen, wobei die Stütze mehrere Anbringungspunkte zum Sichern des Kühlkörpers in einer von mehreren Positionen umfasst.
  26. Graphikkarte gemäß Anspruch 24 oder 25, wobei die Position des Kühlkörpers mindestens eine von einer gehobenen oder gesenkten sein kann.
  27. Graphikkarte gemäß einem der Ansprüche 24 bis 26, wobei die Einstellung der Position ein Kippen des Kühlkörpers umfasst.
  28. Graphikkarte gemäß einem der Ansprüche 24 bis 27, wobei die flexible Wärmeleitung ein Schleifensiphon umfasst.
  29. Graphikkarte gemäß einem der Ansprüche 24 bis 28, wobei die flexible Wärmeleitung eine Basis umfasst, um den Kühlkörper an der einen oder mehreren Graphikverarbeitungseinheiten zu befestigen.
  30. Graphikkarte gemäß einem der Ansprüche 24 bis 29, wobei die Einstellung der Position den Luftstrom zu dem Kühlkörper verbessert.
  31. Graphikkarte gemäß einem der Ansprüche 24 bis 30, wobei die Einstellung der Position den Luftstrom zu einem zweiten Kühlkörper verbessert.
DE102021105251.3A 2020-03-09 2021-03-04 Konfigurierbarer kühlkörper Pending DE102021105251A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/813,590 US11703921B2 (en) 2020-03-09 2020-03-09 Configurable heatsink
US16/813,590 2020-03-09

Publications (1)

Publication Number Publication Date
DE102021105251A1 true DE102021105251A1 (de) 2021-09-09

Family

ID=75339988

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021105251.3A Pending DE102021105251A1 (de) 2020-03-09 2021-03-04 Konfigurierbarer kühlkörper

Country Status (4)

Country Link
US (2) US11703921B2 (de)
CN (1) CN113377177A (de)
DE (1) DE102021105251A1 (de)
GB (2) GB2610062A (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11703921B2 (en) * 2020-03-09 2023-07-18 Nvidia Corporation Configurable heatsink
US11513571B2 (en) * 2021-04-07 2022-11-29 Dell Products L.P. Reversible airflow shroud

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE2801660C2 (de) * 1978-01-16 1986-01-30 kabelmetal electro GmbH, 3000 Hannover Vorrichtung zum Abführen der Verlustwärme von elektronischen Bauelementen
US6359781B1 (en) * 2000-04-21 2002-03-19 Dell Products L.P. Apparatus for cooling heat generating devices
US6447322B1 (en) * 2000-08-22 2002-09-10 Intle Corporation Test socket for an electronic assembly which reduces damage to the electronic assembly
US6942025B2 (en) * 2000-09-20 2005-09-13 Degree Controls, Inc. Uniform heat dissipating and cooling heat sink
KR20020095412A (ko) 2001-06-14 2002-12-26 주식회사 태림테크 구부러지는 히트파이프
TW510532U (en) 2001-07-25 2002-11-11 Wen-Chen Wei Flexible heat tube structure
KR100457220B1 (ko) * 2002-02-27 2004-11-16 잘만테크 주식회사 칩셋 냉각용 히트싱크장치
US20040052052A1 (en) 2002-09-18 2004-03-18 Rivera Rudy A. Circuit cooling apparatus
TW592347U (en) * 2003-04-07 2004-06-11 Leadtek Research Inc Cooling device
US7019974B2 (en) * 2004-07-16 2006-03-28 Hon Hai Precision Industry Co., Ltd. Heat dissipation device
US7433191B2 (en) * 2005-09-30 2008-10-07 Apple Inc. Thermal contact arrangement
CN101155501B (zh) * 2006-09-27 2011-11-09 鸿富锦精密工业(深圳)有限公司 散热器
US7609522B2 (en) * 2006-12-01 2009-10-27 Fu Zhun Precision Industry (Shen Zhen) Co., Ltd. Heat sink assembly
CN101242732B (zh) * 2007-02-08 2011-01-05 鸿富锦精密工业(深圳)有限公司 散热装置组合
US7474527B2 (en) * 2007-03-05 2009-01-06 Dfi, Inc. Desktop personal computer and thermal module thereof
US20090050308A1 (en) * 2007-08-20 2009-02-26 Kuo Yung-Pin Base Structure for a Heat Sink
TWI405074B (zh) * 2009-01-08 2013-08-11 Asustek Comp Inc 散熱模組以及具有此散熱模組之電子裝置
CN101861075A (zh) * 2009-04-08 2010-10-13 富准精密工业(深圳)有限公司 散热装置
US20110149518A1 (en) 2009-12-18 2011-06-23 Alcatel-Lucent Usa Inc. Heat-transfer arrangement for enclosed circuit boards
US20110220328A1 (en) 2010-03-09 2011-09-15 Kunshan Jue-Chung Electronics Co., Ltd. Flexible heat pipe and manufacturing method thereof
TWM463487U (zh) * 2013-04-26 2013-10-11 Giga Byte Tech Co Ltd 熱管式散熱模組
WO2015012797A1 (en) * 2013-07-22 2015-01-29 Hewlett-Packard Development Company, L.P. Heat sink
US9414481B1 (en) * 2015-04-02 2016-08-09 Cooler Master Technology Inc. Heat sink fastener
US20180031329A1 (en) * 2016-07-26 2018-02-01 Chaun-Choung Technology Corp. Heat dissipating device
US10212852B1 (en) * 2017-02-28 2019-02-19 Juniper Networks, Inc Apparatus, system, and method for improved thermal contact between heatsinks and field-replaceable electronic modules
US10842054B2 (en) * 2018-03-20 2020-11-17 Quanta Computer Inc. Extended heat sink design in server
CN110413079B (zh) * 2018-04-28 2022-09-09 伊姆西Ip控股有限责任公司 用于扩展卡的热沉、包括热沉的扩展卡和相关制造方法
US10779439B2 (en) * 2018-05-24 2020-09-15 Quanta Computer Inc. Remote heat exchanger
US10595439B2 (en) * 2018-06-25 2020-03-17 Intel Corporation Movable heatsink utilizing flexible heat pipes
US10631436B1 (en) * 2018-11-14 2020-04-21 International Business Machines Corporation Heat sink assembly
US11703921B2 (en) * 2020-03-09 2023-07-18 Nvidia Corporation Configurable heatsink

Also Published As

Publication number Publication date
US11703921B2 (en) 2023-07-18
US20230297147A1 (en) 2023-09-21
CN113377177A (zh) 2021-09-10
US20210278885A1 (en) 2021-09-09
GB2596179A (en) 2021-12-22
GB2596179B (en) 2022-09-07
GB202103222D0 (en) 2021-04-21
GB202210720D0 (en) 2022-09-07
GB2610062A (en) 2023-02-22

Similar Documents

Publication Publication Date Title
DE102021105617A1 (de) Techniken zum transferieren von daten zwischen hardwarevorrichtungen
DE102021102589A1 (de) Berechnungsgraph-optimierung
DE102021106796A1 (de) Techniken zur speicherfehlerisolierung
DE102021104970A1 (de) Kooperative parallele speicherzuteilung
DE102021103492A1 (de) Anwendungsprogrammierschnittstelle zum beschleunigen von matrixoperationen
DE102021104561A1 (de) Asynchrone datenbewegungspipeline
DE102021106797A1 (de) Techniken zur orchestrierung von phasen der thread-synchronisation
DE112021005433T5 (de) Verfahren zur leistungsbalancierung mehrerer chips
DE112022003222T5 (de) Multi-architektur-ausführungsgraphen
DE102021105251A1 (de) Konfigurierbarer kühlkörper
DE112022002140T5 (de) Licht-Resampling mit Strahlenverfolgung und Sichtbarkeit im Bildschirmraum
DE102022132008A1 (de) Asynchrone speicherdeallokation
DE102022132013A1 (de) Anwendungsprogrammierschnittstellen für interoperabilität
DE102023101893A1 (de) Graphenbasierter speicher
DE102022131708A1 (de) Anwendungsprogrammierschnittstelle zum begrenzen von speicher
DE102022124362A1 (de) Benutzerkonfigurierbare speicherzuweisung
DE102022131530A1 (de) Verfahren zum modifizieren von graphencode
DE112022002953T5 (de) Parallele verarbeitung von thread-gruppen
DE112022001917T5 (de) Synchronisieren einer graphausführung
DE112022000425T5 (de) Gleichzeitiges einführen von code
DE112021003985T5 (de) Verfahren zum erzeugen interpolierter videobilder
DE112021007132T5 (de) Berechnung der bewegung von pixeln zwischen bildern
DE102023115662A1 (de) Änderung der genauigkeit von operanden
DE102022132176A1 (de) Anwendungsprogrammierschnittstellen für interoperabilität
DE102022132481A1 (de) Anwendungsprogrammierschnittstellen für interoperabilität

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R083 Amendment of/additions to inventor(s)