DE102022105958A1 - Techniken zum ausgleichen von arbeitslasten beim parallelisieren von multiplizier-akkumulier-berechnungen - Google Patents

Techniken zum ausgleichen von arbeitslasten beim parallelisieren von multiplizier-akkumulier-berechnungen Download PDF

Info

Publication number
DE102022105958A1
DE102022105958A1 DE102022105958.8A DE102022105958A DE102022105958A1 DE 102022105958 A1 DE102022105958 A1 DE 102022105958A1 DE 102022105958 A DE102022105958 A DE 102022105958A DE 102022105958 A1 DE102022105958 A1 DE 102022105958A1
Authority
DE
Germany
Prior art keywords
mac
iterations
output
tile
parallel processing
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
DE102022105958.8A
Other languages
English (en)
Inventor
Duane George Merrill
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 DE102022105958A1 publication Critical patent/DE102022105958A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

In verschiedenen Ausführungsformen führt eine Dispatch-Anwendung Multiplizier-Akkumulier-(„MAC“)-Berechnungen über Parallelverarbeitungselemente durch. Im Betrieb bestimmt die Dispatch-Anwendung eine erste Menge von Iterationen, die einer gegebenen MAC-Berechnung zugeordnet sind. Die Dispatch-Anwendung bestimmt eine maximale Anzahl von Aufgaben, die gleichlaufend über einen Satz von Parallelverarbeitungselementen ausgeführt werden können. Anschließend veranlasst die Dispatch-Anwendung, dass die maximale Anzahl von Aufgaben gleichlaufend über den Satz von Parallelverarbeitungselementen ausgeführt wird, um die MAC-Berechnung durchzuführen. Während der Ausführung führt jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durch. In Bezug auf herkömmliche kachelbasierte Vorgehensweisen, um MAC-Berechnungen über Parallelverarbeitungselemente durchzuführen, kann die Dispatch-Anwendung Iterationen über die unterschiedlichen Parallelverarbeitungselemente gleichmäßiger verteilen. Demgemäß kann die Dispatch-Anwendung die Menge von untätiger Parallelverarbeitungselementzeit beim Durchführen von MAC-Berechnungen verringern.

Description

  • HINTERGRUND
  • Gebiet der verschiedenen Ausführungsformen Die verschiedenen Ausführungsformen betreffen im Allgemeinen Parallelverarbeitungssysteme und genauer gesagt Techniken für Techniken zum Ausgleichen von Arbeitslasten beim Parallelisieren von Multiplizier-Akkumulier-Berechnungen.
  • Beschreibung der verwandten Technik
  • Allgemeine Matrixmultiplikationen („GEMMs“) werden in einer weiten Vielfalt von wissenschaftlichen, technischen und Datenanwendungen verwendet. Beispielsweise sind GEMMs fundamentale Bausteine von vielen beliebigen Algorithmen maschinellen Lernens, Computergraphikalgorithmen und Computeraudioalgorithmen, um nur einige wenige zu nennen. Eine GEMM ist typischerweise als Funktion C = αAB + βC definiert, wobei A eine m*k Eingabematrix ist, B eine k*n Eingabematrix ist, α und β skalare Werteingaben sind und C eine m*n Ausgabematrix ist, und wobei m, n und k beliebige positive ganze Zahlen sein können. Demgemäß kann eine GEMM durch Ausführen von m*n*k Multiplizier-Akkumulier(„MAC“)-Operationen berechnet werden. Beispielsweise kann eine GEMM, wobei m gleich 2048, k gleich 4096 und n gleich 8192 ist, durch Ausführen von etwa 68 Milliarden MAC-Operationen berechnet werden.
  • Weil die gewaltige Anzahl von Berechnungen, die häufig für GEMMs, insbesondere jene, die größere Matrizen beinhalten, ausgeführt werden müssen, werden GEMMs häufig unter Verwendung von Sätzen von Anweisungen oder „Programmen“ berechnet, die auf Mehrkernprozessoren ausgeführt werden. Diese Typen von Prozessoren kann sehr hohe Rechendurchsätze durch Ausführen großer Anzahlen von Threads parallel über viele beliebige unterschiedliche Verarbeitungskerne erreichen. Eine herkömmliche Vorgehensweise, um eine GEMM auf einem Mehrkernprozessor zu berechnen, beinhaltet das Zerlegen der Ausgabematrix der GEMM in Ausgabekacheln basierend auf einer durch das anwendbare GEMM-Programm definierten Kachelgröße. Jede Ausgabekachel ist einer unterschiedlichen Gruppe von Threads oder einer „Thread-Gruppe“ zugewiesen, die aus einem oder mehreren Threads zusammengesetzt ist, und jede derartige Thread-Gruppe ist konfiguriert, um das anwendbare GEMM-Programm unter Verwendung der Abschnitte der Eingabematrizen auszuführen, die benötigt werden, um die der Ausgabekachel zugewiesene Thread-Gruppe zu berechnen. Die unterschiedlichen Thread-Gruppen werden geplant, um auf den unterschiedlichen Verarbeitungskernen innerhalb des Mehrkernprozessor ausgeführt zu werden, welche die maximale Anzahl von Thread-Gruppen spezifiziert, die gleichzeitig über den unterschiedlichen Verarbeitungskernen ausgeführt werden können. In dem Fall, in dem die Anzahl von Ausgabekacheln die maximale Wellengröße überschreitet, wird geplant, Thread-Gruppen über mehrere sequenzielle Wellen auszuführen. Wenn eine Ausgabematrix beispielsweise acht Ausgabekacheln umfassen würde und die maximale Wellengröße vier sein würde, dann würden vier Thread-Gruppen geplant, in einer ersten Welle ausgeführt zu werden, und vier Thread-Gruppen würden geplant, in einer zweiten Welle ausgeführt zu werden. Sobald die letzte Thread-Gruppe in der letzten Welle das Ausführen des anwendbaren GEMM-Programms beendet, wird die GEMM als vollständig angesehen.
  • Ein Nachteil der obigen Vorgehensweise ist, dass ein Mehrkernprozessor beim Berechnen einer GEMM nicht ausgelastet sein kann, wenn die Anzahl von Ausgabekacheln kein ganzzahliges Vielfaches der maximalen Wellengröße ist. Wenn die Ausgabematrix beispielsweise neun Ausgabekacheln umfassen würde und die maximale Wellengröße auf vier eingestellt wäre, dann würden vier Thread-Gruppen geplant werden, um in einer ersten Welle ausgeführt zu werden, vier Thread-Gruppen würden geplant werden, um in einer zweiten Welle ausgeführt zu werden, und eine Thread-Gruppe würde geplant werden, um in einer dritten Welle ausgeführt zu werden. Weil die dritte Welle enden würde, lediglich teilweise gefüllt zu sein, würden drei der vier Verarbeiterkerne untätig bleiben, während die eine Thread-Gruppe die das anwendbare GEMM-Programm ausführt, während die dritte Welle die letzte Ausgabekachel berechnet. In diesem Beispiel würde die Nutzungsrate des Mehrkernprozessors, während des Ausführens der GEMM gleich 75% sein (9 Kacheln / (4 Verarbeiterkerne *. 3 Wellen)). Eine Unterbeanspruchung eines Mehrkernprozessors verschwendet Verarbeitungsressourcen und kann den Rechendurchsatz des Mehrkernprozessors verschlechtern und Latenzzeiten verursachen.
  • Um den negativen Einfluss auf die Verteilung zu verringern, die sich aus teilweise gefüllten Wellen ergeben, wurden Versuche durchgeführt, um unterschiedliche GEMM-Programme für unterschiedliche Kachelgrößen zu erzeugen und existierende Programmauswahlheuristiken zu verbessern, um eine einzige Kachelgröße für jede GEMM auszuwählen. Ein Nachteil dieser Vorgehensweise ist, dass für jede Kachelgröße die GEMM-Programme für eine gegebenen Kernarchitektur einige zehn oder sogar hunderte unterschiedliche Programmen umfassen können, die jeweils einer unterschiedlichen Kombination von GEMM-Charakteristiken entsprechen, so dass, ohne darauf beschränkt zu sein, der Typ und die Auslegung jeder relevanten Matrizen entsprechen. Beispielsweise könnte für 50 unterschiedliche Kachelgrößen die Anzahl von GEMM-Programme auf 5.000 unterschiedliche Programme anwachsen. Die aggregierte Menge von Ressourcen, die erforderlich ist, um sämtliche der unterschiedliche GEMM-Programme zu erzeugen, zu erstellen und zu übertragen, nimmt auf ähnliche Weise wie die Anzahl von Kachelgrößen zu. Ferner kann die Berücksichtigung der negativen Einflüsse auf die Verteilung des ungleichmäßigen Verteilens von GEMM-Berechnungen über die unterschiedlichen Verarbeiterkerne eines Mehrkernprozessors beim Bewerten von Kompromissen zwischen Kachelgröße und Gesamtverarbeitungsleistung ziemlich kompliziert sein. Folglich kann die Verwendung verbesserter Programmauswahlheuristiken ohne Weiteres zu einer suboptimalen Kachelgröße und zu einer entsprechenden suboptimalen GEMM-Programmauswahl führen.
  • Allgemeiner können Nachteile ähnlichen denen, die oben beschrieben sind, mit kachelbasierten Vorgehensweisen zum Ausführen anderer Typen von GEMM-ähnlichen Berechnungen oder „MAC-Berechnungen“ über mehrere unterschiedliche Verarbeitungselemente gleichzeitig entstehen. Wenn beispielsweise die Größe von Ausgabekacheln, die in einem Ausgabetensor eines Tensorprodukts umfasst sind, kein ganzzahliges Vielfaches der maximalen Anzahl von Aufgaben ist, die über parallele Computerknoten ausgeführt werden können, die in einem verteilten Computersystem umfasst sind, dann kann das verteilte Computersystem beim Berechnen des Tensorprodukts nicht ausgelastet sein.
  • Wie das Vorhergehende veranschaulicht, sind das, was in der Technik benötigt wird, wirksamere Techniken zum Durchführen von MAC-Berechnungen, wie beispielsweise GEMMs, auf Rechensystemen, die mehrere Parallelverarbeitungselemente umfassen.
  • ZUSAMMENFASSUNG
  • Eine Ausführungsform der vorliegenden Erfindung legt ein computerimplementiertes Verfahren zum Durchführen von Multiplizier-Akkumulier(„MAC“)-Berechnungen dar. Das Verfahren umfasst das Bestimmen einer ersten Menge von Iterationen, die einer ersten MAC-Berechnung zugeordnet ist, das Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über einen Satz von Parallelverarbeitungselementen ausgeführt werden können; und das Veranlassen, dass die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen ausgeführt wird, um die erste MAC-Berechnung durchzuführen, wobei während der Ausführung jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
  • Mindestens ein technischer Vorteil der offenbarten Techniken in Bezug auf den Stand der Technik ist, dass mit den offenbarten Techniken die Nutzungsraten eines Rechensystems einschließlich mehrere Parallelverarbeitungselemente beim Durchführen der MAC-Berechnungen vergrößert werden können. In dieser Hinsicht ist mit den offenbarten Techniken die Variation zwischen der Anzahl von Iterationen, die durch jede Parallelverarbeitungselement beim Durchführen einer MAC-Berechnung ausgeführt wird, auf etwa eins begrenzt, und die Zeit, die erforderlich ist, um eine gegebenen Iteration durchzuführen, kann wesentlich kleiner als die Zeit sein, die erforderlich ist, um eine gegebenen Ausgabekachel unter Verwendung von Vorgehensweisen des Standes der Technik zu berechnen. Demgemäß können die offenbarten Techniken die Menge von untätiger Parallelverarbeitungselementzeit beim Durchführen von MAC-Berechnungen verringern und den Rechendurchsatz ebenso vergrößern. Außerdem kann im Kontext von Mehrkernprozessoren für jede Kombination von MAC-Berechnungs-Charakteristiken ein einziges MAC-Berechnungsprogramm implementiert werden, um Iterationen über die unterschiedlichen Verarbeitungskernen innerhalb eines Mehrkernprozessors ungeachtet der Kachelgröße gleichmäßiger zu verteilen. Somit kann die Gesamtzahl von MAC-Berechnungsprogrammen und die aggregierte Menge von Ressourcen, die erforderlich ist, um diese Programme zu erzeugen, zu speichern und zu übertragen, in Bezug auf Vorgehensweisen des Standes der Technik verringert werden. Ferner können, weil jedes MAC-Berechnungsprogramm eine Kachelgröße implementieren kann, die für einen gegebenen Mehrkernprozessor optimiert ist, ohne dabei den negativen Einfluss auf die Verteilung von MAC-Berechnungen über die Verarbeitungskerne zu berücksichtigen, Verschlechterungen im Rechendurchsatz und Latenzzeiten, die sich aus suboptimaler Kachelgrößenauswahl ergeben, verringert werden. Diese technischen Vorteile stellen eine oder mehrere technologischen Verbesserungen gegenüber Vorgehensweisen des Standes der Technik bereit.
  • Figurenliste
  • Damit die Art und Weise, in der die oben genannten Merkmale der verschiedenen Ausführungsformen im Detail verstanden werden können, kann eine genauere Beschreibung der erfinderischen Konzepte, die oben kurz zusammengefasst wurden, unter Bezugnahme auf verschiedene Ausführungsbeispiele erfolgen, von denen einige in den beigefügten Zeichnungen veranschaulicht sind. Es ist jedoch zu beachten, dass die beigefügten Zeichnungen nur typische Ausführungsbeispiele der erfinderischen Konzepte veranschaulichen und daher in keiner Weise als Einschränkung des Schutzumfangs anzusehen sind und dass es da andere ebenso wirksame Ausführungsbeispiele gibt.
    • 1 ist ein Blockdiagramm, das ein System veranschaulicht, das konfiguriert ist, um einen oder mehrere Aspekte der verschiedenen Ausführungsformen zu implementieren;
    • 2 ist ein Blockdiagramm einer Parallelverarbeitungseinheit, die in dem Parallelverarbeitungs-Teilsystem von 1 umfasst ist, gemäß verschiedener Ausführungsformen;
    • 3 ist ein Blockdiagramm eines allgemeinen Verarbeitungsclusters, der in der Parallelverarbeitungseinheit von 2 umfasst ist, gemäß verschiedener Ausführungsformen;
    • 4 ist eine ausführlichere Veranschaulichung der Dispatch-Anwendung von 1 gemäß verschiedener Ausführungsformen;
    • 5 ist eine beispielhafte Veranschaulichung der parallelen GEMM-Berechnung von 4 gemäß verschiedener Ausführungsformen;
    • 6 ist eine beispielhafte Veranschaulichung der GEMM-Kernel-Pseudocode für den GEMM-Kernel von 4 gemäß verschiedener Ausführungsformen;
    • 7 ist ein Ablaufdiagramm von Verfahrensschritten zum Berechnen einer GEMM auf einem Mehrkernprozessor gemäß verschiedener Ausführungsformen; und
    • 8 ist ein Ablaufdiagramm von Verfahrensschritten zum Durchführen einer MAC-Berechnung auf einem Rechensystem, das mehrere Parallelverarbeitungselemente umfasst, gemäß verschiedener anderer Elemente.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründlicheres Verständnis der verschiedenen Ausführungsformen bereitzustellen. Einem Fachmann in der Technik ist es jedoch ersichtlich, dass die erfindungsgemäßen Konzepte auch ohne eines oder mehrere dieser spezifischen Details praktiziert werden können.
  • Wie hier zuvor beschrieben, beinhaltet eine herkömmliche Vorgehensweise zum Berechnen einer GEMM auf einem Mehrkernprozessor das Zerlegen der Ausgabematrix der GEMM in Ausgabekacheln basierend auf einer durch ein anwendbares GEMM-Programm definierten Kachelgröße. Jede Ausgabekachel ist einer unterschiedlichen Thread-Gruppe zugeordnet, die aus einer oder mehreren Threads zusammengesetzt ist, und jede Thread-Gruppe ist konfiguriert, um das anwendbare GEMM-Programm unter Verwendung der Abschnitte der Eingabematrizen auszuführen, die benötigt werden, um die der Thread-Gruppe zugeordnete Ausgabekachel zu berechnen. Ein Nachteil der obigen Vorgehensweise ist, dass, wenn die Anzahl von Ausgabekacheln kein ganzzahliges Vielfaches der maximalen Wellengröße ist, dann eine der Wellen der Thread-Gruppen, welche die GEMM ausführt, lediglich teilweise gefüllt ist. Teilweise gefüllte Wellen entsprechen einer Unterbeanspruchung des Mehrkernprozessors.
  • Um die negativen Auswirkungen zu verringern, die sich aus teilweise gefüllten Wellen ergeben, wurden Versuche durchgeführt, um unterschiedliche GEMM-Programme für unterschiedliche Kachelgrößen zu erzeugen und existierende Programmauswahlheuristiken zu verbessern, um eine einzige Kachelgröße für jede GEMM auszuwählen. Ein Nachteil dieser Vorgehensweise ist, dass die aggregierte Menge von Ressourcen, die erforderlich ist, um GEMM-Programme für unterschiedliche Kombinationen von GEMM-Charakteristiken zu erzeugen, zu speichern und zu übertragen, um einen Faktor der Kachelgröße vergrößert werden kann. Ferner zeigten empirische Ergebnisse, dass verbesserte Programmauswahlheuristiken ohne Weiteres eine suboptimale Kachelgröße und ein entsprechendes suboptimales GEMM-Programm auswählen kann.
  • Angemessene Teilen von MAC-Iterationen über die Prozessorkerne
  • Um sich diesen Problemen zu widmen, wird in einigen Ausführungsformen eine Iterations-basierte parallele Zerlegungsstrategie in einem Mehrkernprozessor implementiert, eine Gesamtzahl von MAC-Iterationen, die erforderlich ist, um eine gegebenen GEMM durchzuführen, angemessen über die Prozessorkerne zu teilen. Eine GEMM wird hier ebenfalls als eine „GEMM-Berechnung“ und eine „GEMM-Operation“ bezeichnet. Lediglich für erläuternde Zwecke bezieht sich „angemessen“, wie hier verwendet, auf so nahe gleichmäßig wie möglich. Des Weiteren ist, wie hier verwendet, „angemessen“ das gleiche wie „im Wesentlichen ähnlich“. In einigen Ausführungsformen variiert die Gesamtzahl von MAC-Iterationen, die durch jeden der Verarbeiterkerne ausgeführt wird, um höchstens eins. Genauer gesagt führt in einigen Ausführungsformen jeder der Verarbeiterkerne entweder x oder (x+1) MAC-Iterationen aus, wobei x eine beliebige positive ganze Zahl sein kann.
  • Wie hier bezeichnet, ist eine „MAC-Iteration“ eine feste Menge des Fortschritts von Parallelverarbeitungselementen (wie in logischen MAC-Operationen gemessen) im Akkumulationsmaß (z.B., der k-Achse), die nicht weiter über Parallelverarbeitungselemente unterteilt ist. Eine MAC-Iteration wird hier ebenfalls als „eine Iteration“ bezeichnet, die einer gegebenen MAC-Berechnung (z.B., einer GEMM) zugeordnet ist. In einigen Ausführungsformen sind die Parallelverarbeitungselemente die Verarbeiterkerne, die in einem Mehrkernprozessor umfasst sind. Und für eine gegebene MAC-Berechnung ist jede MAC-Iteration ein im Wesentlichen ähnlicher Betrag an Fortschritt eines gegebenen Parallelverarbeitungselements, das in einem gegebenen Akkumulationsmaß weitergeht.
  • In einigen Ausführungsformen ist eine MAC-Iteration eine einzelne logische MAC-Operation, die über eine „einzelne MAC“ Prozessoranweisung berechnet wird. In einigen anderen Ausführungsformen ist eine MAC-Iteration eine feste Anzahl von logischen MAC-Operationen, die über eine einzelne „Bulk-MAC“ Prozessoranweisung berechnet wird. In noch anderen Ausführungsformen ist eine MAC-Iteration eine feste Anzahl von logischen MAC-Operationen, die über ein statisches Entrollen von einzelnen MAC-Prozessoranweisungen, Bulk-MAC-Prozessoroperationen oder einer beliebigen Kombination davon berechnet wird.
  • Vorteilhafterweise kann die Gesamtzahl von MAC-Operationen, die in jeder MAC-Iteration umfasst ist, ausgewählt werden, um beträchtlich niedriger als die Gesamtzahl von MAC-Operationen zu sein, die erforderlich ist, um jede Ausgabekachel zu berechnen. Für eine gegebene GEMM kann jede systemweite Unterbeanspruchung, die der Quantisierung von MAC-Iterationen über Verarbeiterkerne zuzurechnen ist, daher relativ zu einer beliebigen systemweiten Unterbeanspruchung erheblich verringert werden, die der Quantisierung von Ausgabekacheln über die Prozessorkerne zuzurechnen ist. In einigen Ausführungsformen ist eine beliebige systemweite Nutzung ein vernachlässigbarer Prozentsatz der gesamten Ausführungszeit für die GEMM.
  • Lediglich für erläuternde Zwecke werden einige Ausführungsformen, bei denen die Iterations-basierte parallele Zerlegungsstrategie implementiert ist, um GEMMs in einem beispielhaften Mehrkernprozessor zu berechnen, in Verbindung mit 1-6 beschrieben. In dem beispielhaften Mehrkernprozessor versendet eine virtualisierte parallele Laufzeit Thread-Gruppen über physische Prozessorkerne. In einer komplementären Art und Weise wird ein Ablauf zum Durchführen einer GEMM auf einem Mehrkernprozessor über eine virtualisierten parallele Laufzeit in Verbindung mit 7 beschrieben.
  • Allgemeiner kann die in Verbindung mit 1-7 beschriebene Iterations-basierte parallele Zerlegungsstrategie in einem beliebigen Typ von Rechensystem implementiert sein, das umfasst, ohne darauf beschränkt zu sein, mehrere Parallelverarbeitungselementen, um eine beliebige Anzahl und/oder Typen von MAC-Berechnungen durchzuführen. Wie hier bezeichnet, ist ein „paralleles Verarbeitungselement“ eines Rechensystem eine physische Einheit zur simultanen Ausführung in dem Berechnungssystem. Beispielsweise ist das in den 1-7 der Ausführungsformen beschriebene Rechensystem ein Mehrkernprozessor und die Parallelverarbeitungselementen sind Prozessorkerne.
  • Wie hier bezeichnet, umfasst eine MAC-Berechnung, ohne darauf beschränkt zu sein, mehrere MAC-Operationen. Einige Beispiele von MAC-Berechnungen umfassen, ohne darauf beschränkt zu sein, Matrixproduktoperationen, Faltungsoperationen, Tensorproduktoperationen und Tensorkontractionsoperationen. Demgemäß kann die Ausgabe einer gegebenen MAC-Berechnung eine Matrix, ein Tensor usw. sein. die MAC-Operationen, die in einer gegebenen MAC-Berechnung umfasst sind, können einem beliebigen algebraischen Semiring zugeordnet sein. Einige Beispiele von algebraischen Semirings umfassen, ohne darauf beschränkt zu sein, einen Plus-Multiplizier-Semiring, einen Min-Plus-Semiring, einen Max-Multiplizier-Semiring, einen Min-Max-Semiring oder einen Oder-Und-Semiring. Insbesondere ist eine GEMM eine MAC-Berechnung, die, ohne darauf beschränkt zu sein, mehrere MAC-Operationen umfasst, die einem Plus-Multiplizier-Semiring zugeordnet sind.
  • Nach der ausführlichen Beschreibung von 7, wird die Iterations-basierte parallele Zerlegungsstrategie im Kontext des Durchführens eines beliebigen Typs von MAC-Berechnung über beliebige mehrere Parallelverarbeitungselemente beschrieben, die in einem beliebigen Typ von Rechensystem umfasst sind. In einer komplementären Art und Weise wird ein Ablauf zum Durchführen einer MAC-Berechnung auf einem Rechensystem, das mehrere Parallelverarbeitungselemente umfasst, in Verbindung mit 8 beschrieben.
  • Systemüberblick
  • 1 ist ein Blockdiagramm, das ein System 100 veranschaulicht, das konfiguriert ist, um einen oder mehr Aspekte der verschiedenen Ausführungsformen zu implementieren. Wie gezeigt, das System 100 umfasst, ohne darauf beschränkt zu sein, eine Zentralverarbeitungseinheit („CPU“) 102 und einen Systemspeicher 104, der mit einem Parallelverarbeitungs-Teilsystem 112 über eine Speicherbrücke 105 und einem Kommunikationspfad 113 gekoppelt ist. Die Speicherbrücke 105 ist ferner mit einer Eingabe/Ausgabe („E/A“) Brücke 107 über einen Kommunikationspfad 106 gekoppelt, und die E/A-Brücke 107 ist ihrerseits mit einem Schalter 116 gekoppelt.
  • Im Betrieb ist die E/A-Brücke 107 konfiguriert, um Benutzereingabeinformationen von Eingabevorrichtungen 108, wie beispielsweise einer Tastatur oder einer Maus, zu empfangen und die Eingabeinformationen an die CPU 102 zur Verarbeitung über den Kommunikationspfad 106 und die Speicherbrücke 105 weiterzuleiten. Der Schalter 116 ist konfiguriert, um Verbindungen zwischen der E/A-Brücke 107 und anderen Komponenten des Systems 100, wie beispielsweise einem Netzwerkadapter 118 und Erweiterungskarten 120 und 121, bereitzustellen.
  • Wie ebenfalls gezeigt, ist die E/A-Brücke 107 mit einer Systemfestplatte 114 gekoppelt, die konfiguriert sein kann, um Inhalte, Anwendungen und Daten für eine Verwendung durch die CPU 102 und dem Parallelverarbeitungssubsystem 112 zu speichern. Als eine allgemeine Angelegenheit stellt die Systemfestplatte 114 eine nichtflüchtige Speicherung für Anwendungen und Daten bereit und kann feste oder austauschbare Festplattenlaufwerke, Flash-Speichervorrichtungen und CD-ROM (Compact Disc Read-Lediglich-Memory), DVD-ROM (Digital Versatile Disc-ROM), Blu-ray, HD-DVD (High Definition DVD) oder andere magnetische, optische oder Festkörperspeichervorrichtungen umfassen. In verschiedenen Ausführungsformen können auch andere Komponenten, wie beispielsweise universelle serielle Bus- oder andere Portanschlüsse, Compact-Disc-Laufwerke, Digital Versatile Disc-Laufwerke, Filmaufnahmegeräte und dergleichen mit der E/A-Brücke 107 verbunden werden.
  • In verschiedenen Ausführungsformen kann die Speicherbrücke 105 ein Northbridge-Chip und die E/A-Brücke 107 ein Southbridge-Chip sein. Außerdem können die Kommunikationspfade 106 und 113, sowie auch andere Kommunikationspfade innerhalb des Systems 100, unter Verwendung beliebiger technisch geeigneter Protokolle implementiert werden, einschließlich, ohne darauf beschränkt zu sein, Peripheral Component Interconnect Express, Accelerated Graphics Port, HyperTransport oder eines beliebigen anderen, in der Technik bekannten Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll.
  • In einigen Ausführungsformen umfasst das Parallelverarbeitungs-Teilsystem 112, ohne darauf beschränkt zu sein, einen oder mehrere Mehrkernprozessoren. Die Mehrkernprozessoren werden hier ebenfalls einzeln als eine Parallelverarbeitungseinheit („PPU“) und zusammen als PPUs bezeichnet. In der gleichen oder anderen Ausführungsformen umfasst jede PPU, ohne darauf beschränkt zu sein, mehrere Prozessorkerne. Die Verarbeiterkerne werden hier ebenfalls einzeln als ein Streaming-Multiprozessor („SM“) und zusammen als SMs bezeichnet. In einigen Ausführungsformen können die PPUs identisch oder unterschiedlich sein und jede PPU kann einen fest zugeordneten parallelen Verarbeitungsspeicher oder keinen fest zugeordneten parallelen Verarbeitungsspeicher aufweisen. Eine beliebige Anzahl von PPUs kann Daten an eine beliebige Anzahl von Anzeigevorrichtungen 110 ausgeben.
  • In einigen Ausführungsformen umfasst das Parallelverarbeitungs-Teilsystem 112 Schaltungen, die zur universellen Verarbeitung optimiert sind. Wie nachstehend in Verbindung mit 2 ausführlicher beschrieben, können derartige Schaltungen über eine oder mehr PPUs umfasst sein, die konfiguriert sein können, um universelle Verarbeitungsoperationen durchzuführen. In den gleichen oder anderen Ausführungsformen umfasst das Parallelverarbeitungs-Teilsystem 112 ferner Schaltungen, die zur Graphikverarbeitung optimiert sind. Derartige Schaltungen können über eine oder mehrere PPUs umfasst sein, die konfiguriert sein können, um Graphikverarbeitungs-Operationen durchzuführen. In einigen Ausführungsformen können null oder mehr der PPUs konfiguriert sein, um universelle Verarbeitungs-Operationen jedoch keine Graphikverarbeitungsoperationen durchzuführen, können null oder mehr der PPUs konfiguriert sein, um Graphikverarbeitungs-Operationen jedoch keine universelle Verarbeitungs-Operationen durchzuführen, und null oder mehr der PPUs können konfiguriert sein, um universelle Verarbeitungs-Operationen und/oder Graphikverarbeitungs-Operationen durchzuführen.
  • In einigen Ausführungsformen kann das Parallelverarbeitungs-Teilsystem 112 mit einem oder mehreren anderen der anderen Elemente von 1 integriert sein, um ein einziges System zu bilden. Beispielsweise kann das Parallelverarbeitungs-Teilsystem 112 mit der CPU 102 und anderen Verbindungsschaltungen auf einem einzigen Chip integriert sein, um ein System auf einem Chip („SoC“) zu bilden. In den gleichen oder anderen Ausführungsformen kann eine beliebige Anzahl von CPUs 102 und eine beliebige Anzahl von Parallelverarbeitungs-Teilsystemen 112 über einer beliebigen Anzahl von gemeinsam genutzten geographischen Orten und/oder einer beliebigen Anzahl von unterschiedlichen geographischen Orten verteilt und/oder in einer oder mehrere Cloud-Berechnungsumgebungen (d.h., gekapselte gemeinsam genutzte Ressourcen, Software, Daten usw.) in einer beliebigen Kombination implementiert sein.
  • Der Systemspeicher 104 kann, ohne darauf beschränkt zu sein, eine beliebigen Anzahl und/oder Typen von Vorrichtungstreibern (nicht gezeigt), eine beliebige Anzahl und/oder Typen von Laufzeiten (nicht gezeigt), eine beliebige Anzahl und/oder Typen von Softwareanwendungen oder eine beliebige Kombination davon umfassen. In einigen Ausführungsformen ist mindestens ein Vorrichtungstreiber konfiguriert, um die Verarbeitungs-Operationen der einen oder mehreren PPUs innerhalb des Parallelverarbeitungs-Teilsystems 112 zu verwalten. In der gleichen oder anderen Ausführungsformen implementieren eine beliebige Anzahl von Vorrichtungstreibern Anwendungsprogrammierschnittstellen(„API“)-Funktionalität, die Softwareanwendungen ermöglicht, Anweisungen zur Ausführung auf einer oder mehreren PPUs über API-Aufrufe zu spezifizieren. In einigen Ausführungsformen stellen eine beliebige Anzahl von Vorrichtungstreibern Kompilierungsfunktionalität zum Erzeugen von Maschinencode bereit, der speziell für das Parallelverarbeitungs-Teilsystem 112 optimiert ist. In der gleichen oder anderen Ausführungsformen ermöglicht eine virtualisierte parallele Laufzeitsoftwareanwendungen Thread-Gruppen über einen oder mehrere SMs abzuschicken.
  • Jede der Softwareanwendungen kann sich in einer beliebigen Anzahl von Speichern befinden und auf einer beliebigen Anzahl von Prozessoren in einer beliebigen Kombination ausgeführt werden. Wie hier bezeichnet, kann ein „Prozessor“ ein beliebiges System, Einrichtung oder Vorrichtung einer Anweisungsausführung sein, die imstande ist, Anweisungen auszuführen. Einige Beispiele von Prozessoren umfassen, ohne darauf beschränkt zu sein, die CPU 102, das Parallelverarbeitungs-Teilsystem 112 und die PPUs.
  • Wie gezeigt, umfasst in einigen Ausführungsformen der Systemspeicher 104, ohne darauf beschränkt zu sein, eine heterogene Softwareanwendung 170, eine Dispatch-Anwendung 180, eine Kernel-Bibliothek 190 und einen GEMM-Kernel 192. Die heterogene Softwareanwendung 170 ist eine Softwareanwendung, die eine beliebige Anzahl und/oder Typen von Anweisungen auf der CPU 102 und eine beliebige Anzahl und/oder Typen von Anweisungen auf dem Parallelverarbeitungs-Teilsystem 112 ausführt. Die heterogene Softwareanwendung 170 kann eine beliebige Anzahl und/oder Typen von Anweisungen auf dem Parallelverarbeitungs-Teilsystem 112 in einer beliebigen technisch machbaren Art und Weise ausführen.
  • Beispielsweise ruft in einigen Ausführungsformen die heterogene Softwareanwendung 170 eine beliebige Anzahl und/oder Typen von Funktionen auf, die in der Dispatch-Anwendung 180 umfasst sind, um eine GEMM (nicht gezeigt) auf dem Parallelverarbeitungs-Teilsystem 112 zu berechnen. Die Begriffe „Funktion“ und „Programm“ werden beide hier verwendet, um sich auf einen beliebigen Satz einer oder mehreren Anweisungen zu beziehen, die von einer beliebigen Anzahl und/oder Typen von Prozessoren ausgeführt werden können. Des Weiteren wird der Begriff „Kernel“ verwendet, um sich auf einen Satz von Anweisungen (z.B., ein Programm, eine Funktion usw.) zu beziehen, die auf einem oder mehreren Rechensystemen ausgeführt werden, die jeweils, ohne darauf beschränkt zu sein, mehrere Parallelverarbeitungselemente umfassen.
  • Wie ausführlicher nachstehend in Verbindung mit 4 beschrieben, kann in einigen Ausführungsformen die Dispatch-Anwendung 180 GEMMs und/oder einer beliebigen Anzahl (einschließlich null) von anderen MAC-Berechnungen auf die Parallelverarbeitungs-Teilsystem 112 als Reaktion auf Funktionsaufrufen von Softwareanwendungen (z.B., die heterogene Softwareanwendung 170) unter Verwendung der Kernel-Bibliothek 190 ausführen. Die Kernel-Bibliothek 190 umfasst, ohne darauf beschränkt zu sein, eine beliebige Anzahl und/oder Typen von Kerneln, wobei jeder Kernel ein Satz von Anweisungen ist, der auf dem Parallelverarbeitungs-Teilsystem 112 ausgeführt werden kann.
  • In einigen Ausführungsformen umfasst die Kernel-Bibliothek 190, ohne darauf beschränkt zu sein, einen GEMM-Kernel 192, der verwendet werden kann, um GEMMs auf den SMs effizient zu berechnen. In einigen anderen Ausführungsformen kann die Kernel-Bibliothek 190, ohne darauf beschränkt zu sein, eine beliebigen Anzahl von GEMM-Kernel 192 umfassen, wobei jeder GEMM-Kernel 192 für eine unterschiedliche Kombination von GEMM-Charakteristiken spezialisiert ist. Einige Beispiele von GEMM-Charakteristiken umfassen, ohne darauf beschränkt zu sein, die Typen jeder der Eingabematrizen und der Ausgabematrix. Beispielsweise umfasst in einigen Ausführungsformen die Kernel-Bibliothek 190, ohne darauf beschränkt zu sein, eine beliebige Anzahl und/oder Typen von GEMM-Kernel 192, die zusammen Berechnungen mit gemischter Genauigkeit unterstützen und spezialisierte Datenbewegungen und MAC-Abstraktionen zur Handhabung von ganzzahligen 8-Bit-Typen, Gleitkommatypen mit halber Genauigkeit, Gleitkommatypen mit einfacher Genauigkeit und Gleitkommatypen mit doppelter Genauigkeit bereitstellen.
  • Die Dispatch-Anwendung 180 und/oder der GEMM-Kernel 192 können eine beliebigen Anzahl und/oder Typen von Techniken implementieren, um GEMMs auf den SMs effizient zu berechnen. In einigen Ausführungsformen umfassen die Dispatch-Anwendung 180 und der GEMM-Kernel 192, ohne darauf beschränkt zu sein, eine Funktionalität, welche die Iterations-basierte parallele Zerlegungsstrategie, die zuvor hier beschrieben wurde, in den PPUs implementiert. Genauer gesagt können die Dispatch-Anwendung 180 und den GEMM-Kernel 192 verwendet werden, um eine Gesamtzahl von MAC-Iterationen aufzuteilen, die erforderlich sind, um eine gegebenen GEMM angemessen über die SMs in einer gegebenen PPU durchzuführen.
  • In den gleichen und/oder anderen Ausführungsformen implementieren die Dispatch-Anwendung 180 und/oder der GEMM-Kernel 192, ohne darauf beschränkt zu sein, eine beliebige Anzahl und/oder Typen von Blockierstrategien und/oder eine beliebigen Anzahl und/oder Typen von Kachelstrategien, die ausgestaltet sind, um Daten gemeinsamer Nutzung und die Wiederverwendung von Daten zu vergrößern. Beispielsweise führt in einigen Ausführungsformen die Dispatch-Anwendung 180 und/oder der GEMM-Kernel 192 eine beliebige Anzahl von Blockieroperationen und/oder eine beliebige Anzahl von Kachelungsoperationen durch, um Speicherlokalität anzupassen.
  • Es sei bemerkt, dass die hier beschriebenen Techniken veranschaulichend und nicht einschränkend sind und verändert werden können, ohne von dem breiteren Wesen und Umfang der Erfindung abzuweichen. Viele Modifikationen und Variationen an der Funktionalität, die durch die heterogene Softwareanwendung 170, die Dispatch-Anwendung 180, die Kernel-Bibliothek 190, den GEMM-Kernel 192, Treiber und Laufzeiten (z.B., die virtualisierten parallele Laufzeit) bereitgestellt werden, werden Fachleuten offensichtlich sein, ohne vom Umfang und Wesen der beschriebenen Ausführungsformen abzuweichen.
  • Beispielsweise umfasst in einigen Ausführungsformen die Kernel-Bibliothek 190, ohne darauf beschränkt zu sein, eine beliebigen Anzahl und/oder Typen von MAC-Berechnungskerneln (z.B., einen oder mehrere GEMM-Kernel 192, einen oder mehrere Tensorkontraktionskernel usw.). Jeder MAC-Berechnungskernel kann verwendet werden, um zugeordneten MAC-Berechnungen auf den SMs effizient durchzuführen. In den gleichen oder anderen Ausführungsformen können die Dispatch-Anwendung 180 und/oder die MAC-Berechnungskernel eine beliebige Anzahl und/oder Typen von Techniken implementieren, um MAC-Berechnungen auf den SMs effizient durchzuführen.
  • Es versteht sich, dass das hier gezeigte System veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Die Verbindungstopologie, einschließlich der Anzahl und Anordnung von Brücken, der Anzahl der CPUs 102 und der Anzahl der Parallelverarbeitungs-Teilsystemen 112, können wunschgemäß modifiziert werden. Beispielsweise kann in einigen Ausführungsformen der Systemspeicher 104 direkt mit der CPU 102 und nicht durch die Speicherbrücke 105 verbunden sein, und anderen Vorrichtungen können mit dem Systemspeicher 104 über die Speicherbrücke 105 und die CPU 102 kommunizieren. In anderen alternativen Topologien kann das Parallelverarbeitungs-Teilsystem 112 mit der E/A-Brücke 107 oder direkt mit der CPU 102 und nicht mit der Speicherbrücke 105 verbunden sein. In noch anderen Ausführungsformen können die E/A-Brücke 107 und die Speicherbrücke 105 in einem einzigen Chip integriert sein, anstatt als eine oder mehrere diskrete Vorrichtungen zu existieren. Schließlich können in bestimmten Ausführungsformen eine oder mehrere der in 1 gezeigten Komponenten 1 nicht vorhanden sein. Beispielsweise könnte der Schalter 116 beseitigt werden und der Netzwerkadapter 118 und die Erweiterungskarten 120, 121 würden direkt mit der E/A-Brücke 107 verbunden sein.
  • 2 ist ein Blockdiagramm einer PPU 202, die in dem Parallelverarbeitungs-Teilsystem 112 von 1 umfasst ist, gemäß verschiedener Ausführungsformen. Obwohl 2 eine PPU 202 anschaulich darstellt, wie oben angegeben, kann das Parallelverarbeitungs-Teilsystem 112 null oder mehr andere PPUs umfassen, die mit den PPUs 202 identisch sind, und null oder mehr andere PPUs umfassen, die von der PPU 202 unterschiedlich sind. Wie gezeigt, ist die PPU 202 mit einem lokalen Parallelverarbeitungs(„PP“)-Speicher 204 gekoppelt. Die PPU 202 und der PP-Speicher 204 können unter Verwendung einer oder mehrerer integrierter Schaltungsvorrichtungen, wie beispielsweise programmierbaren Prozessoren, anwendungsspezifischen integrierten Schaltungen oder Speichervorrichtungen oder in einer beliebigen anderen technisch machbaren Art und Weise implementiert sein.
  • Wie gezeigt, umfasst die PPU 202 zur universellen Verarbeitung optimierte Schaltungen und die PPU 202 kann konfiguriert sein, um universelle Verarbeitungs-Operationen durchzuführen. Obwohl in 2 nicht gezeigt, umfasst die PPU 202 in einigen Ausführungsformen ferner Schaltungen, die zur Graphikverarbeitung, einschließlich beispielsweise Videoausgabeschaltungen, optimiert sind. In derartigen Ausführungsformen kann die PPU 202 konfiguriert sein, um universelle Verarbeitungs-Operationen und/oder Graphikverarbeitungs-Operationen durchzuführen.
  • Erneut bezugnehmend auf 1 sowie auch 2 ist in einigen Ausführungsformen die CPU 102 der Masterprozessor des Systems 100, der Operationen von anderen Systemkomponenten steuert und koordiniert. Insbesondere gibt die CPU 102 Befehle aus, die den Betrieb der PPU 202 steuern. In einigen Ausführungsformen schreibt die CPU 102 einen Stream von Befehlen für die PPU 202 in eine Datenstruktur (weder in 1 noch 2 explizit gezeigt), die in dem Systemspeicher 104, dem PP-Speicher 204 oder einem anderen Speicherungsort lokalisiert sein kann, der sowohl für die CPU 102 als auch die PPU 202 zugänglich ist. Ein Zeiger auf die Datenstruktur wird in einen Pushbuffer geschrieben, um die Verarbeitung des Streams von Befehlen in der Datenstruktur zu initiieren. Die PPU 202 liest Befehls-Streams aus dem Pushbuffer und führt dann Befehle asynchron in Bezug auf den Betrieb der CPU 102 aus. In Ausführungsformen, bei denen mehrere Pushbuffer erzeugt werden, können Ausführungsprioritäten für jeden Pushbuffer durch eine Anwendungsprogramm über einen Vorrichtungstreiber (nicht gezeigt) spezifiziert werden, um die Planung der unterschiedlichen Pushbuffer zu steuern.
  • Unter erneuter Bezugnahme nun auf 2 sowie auch 1 umfasst die PPU 202 in einigen Ausführungsformen eine E/A-Einheit 205, die mit dem Rest des Systems 100 über den Kommunikationspfad 113 kommuniziert, der mit der Speicherbrücke 105 verbunden ist. In einigen anderen Ausführungsformen kommuniziert die E/A-Einheit 205 mit dem Rest des Systems 100 über den Kommunikationspfad 113, der direkt mit der CPU 102 verbunden ist. In der gleichen oder anderen Ausführungsformen kann die Verbindung der PPU 202 mit dem Rest des Systems 100 verändert werden. In einigen Ausführungsformen ist das Parallelverarbeitungs-Teilsystem 112, das mindestens eine PPU 202 umfasst, als eine Erweiterungskarte implementiert, die in einen Erweiterungssteckplatz des Systems 100 eingesetzt werden kann. In einigen anderen Ausführungsformen kann die PPU 202 auf einem einzigen Chip mit einer Busbrücke, wie beispielsweise der Speicherbrücke 105 oder der E/A-Brücke 107, integriert sein. In einigen anderen Ausführungsformen können einige oder alle der Elemente der PPU 202 zusammen mit der CPU 102 in einer einzigen integrierten Schaltung oder einem System-auf-einem-Chip integriert sind.
  • Die E/A-Einheit 205 erzeugt Pakete (oder andere Signale) zur Übertragung auf dem Kommunikationspfad 113 und empfängt ebenfalls alle eingehenden Pakete (oder andere Signale) von dem Kommunikationspfad 113, wobei die eingehenden Pakete an entsprechende Komponenten der PPU 202 gerichtet sind. Beispielsweise können Befehle, die sich auf Verarbeitungsaufgaben beziehen, an eine Host-Schnittstelle 206 gerichtet werden, während Befehle, die mit Speicheroperationen verwandt sind (z.B., Lesen aus oder Schreiben in den PP-Speicher 204) an eine Crossbar-Einheit 210 gerichtet werden können. Die Host-Schnittstelle 206 liest jeden Pushbuffer und überträgt den im Pushbuffer gespeicherten Befehls-Stream an ein Frontend 212.
  • Im Betrieb überträgt das Frontend 212 von der Host-Schnittstelle 206 empfangene Verarbeitungsaufgaben an eine Arbeitsverteilungseinheit (nicht gezeigt) innerhalb einer Aufgaben/Arbeitseinheit 207. Die Arbeitsverteilungseinheit empfängt Zeiger auf Verarbeitungsaufgaben, die als Aufgabemetadaten („TMD“) codiert und im Speicher gespeichert sind. Die Zeiger auf TMDs sind in einem Befehls-Stream umfasst, der als ein Pushbuffer gespeichert und durch das Frontend 212 von der Host-Schnittstelle 206 empfangen wird. Verarbeitungsaufgaben, die als TMDs codiert werden können, umfassen Indices, die den zu verarbeiteten Daten zugeordnet sind, sowie auch Zustandsparameter und Befehle, die definieren, wie die Daten zu verarbeiten sind.
  • Beispielsweise könnten die Zustandsparameter und Befehle die Programme definieren, die an den Daten auszuführen sind.
  • Die PPU 202 implementiert vorteilhafterweise eine hochparallele Verarbeitungsarchitektur basierend auf einer Verarbeitungs-Clusteranordnung 230, die einen Satz von C GPCs 208 umfasst, wobei C ≥ 1. Jeder der GPCs 208 ist imstande, eine große Anzahl (z.B., hunderte oder tausende) von Threads gleichlaufend auszuführen, wobei jeder Thread eine Instanz eines Programms ist (z.B., eines Kernels). In verschiedenen Anwendungen können unterschiedliche GPCs 208 zur Verarbeitung unterschiedlicher Typen von Programmen oder zum Durchführen unterschiedlicher Typen von Berechnungen zugeteilt sein. Die Zuteilung der GPCs 208 kann abhängig von der Arbeitslast variieren, die für jeden Typ von Programm oder Berechnung entsteht. Die GPCs 208 empfangen Verarbeitungsaufgaben, die von der Arbeitsverteilungseinheit innerhalb der Aufgabe/Arbeitseinheit 207 auszuführen sind.
  • Die Aufgabe/Arbeitseinheit 207 empfängt Verarbeitungsaufgaben von dem Frontend 212 und gewährleistet, dass allgemeine Verarbeitungs-Cluster („GPCs“) 208 in einem gültigen Zustand konfiguriert sind, bevor die spezifizierte Verarbeitungsaufgabe durch jede der TMDs initiiert wird. Eine Priorität kann für jede TMD spezifiziert sein, die zur Planung der Ausführung der Verarbeitungsaufgabe verwendet wird. Verarbeitungsaufgaben können ebenfalls von der Verarbeitungs-Clusteranordnung 230 empfangen werden. Optional kann die TMD einen Parameter umfassen, der steuert, ob die TMD an den Kopf oder den Schwanz einer Liste von Verarbeitungsaufgaben (oder an eine Liste von Zeigern auf die Verarbeitungsaufgaben) hinzugefügt wird, um dadurch eine andere Ebene der Steuerung über Ausführungspriorität bereitzustellen.
  • Die Speicherschnittstelle 214 umfasst einen Satz von D Partitionseinheiten 215, wobei D ≥ 1. Jede der Partitionseinheiten 215 ist mit einem oder mehreren Direktzugriffsspeichern („DRAMs“) 220 gekoppelt, die sich innerhalb des PP Speichers 204 befinden. In einigen Ausführungsformen ist die Anzahl der Partitionseinheiten 215 gleich der Anzahl der DRAMs 220 und jede der Partitionseinheiten 215 ist mit einem unterschiedlichen der DRAMs 220 gekoppelt. In einigen anderen Ausführungsformen kann die Anzahl der Partitionseinheiten 215 anders als die Anzahl der DRAMs 220 sein. Fachleute werden verstehen, dass die DRAM 220 mit einer beliebigen anderen technisch geeignete Speicherungsvorrichtung ersetzt werden kann. Im Betrieb können verschiedenen Ziele über die DRAMs 220 gespeichert werden, die den Partitionseinheiten 215 erlauben, Abschnitte von jedem Ziel parallel zu schreiben, um die verfügbare Bandbreite der PP-Speicher 204 effizient zu verwenden.
  • Ein gegebener GPC 208 kann Daten verarbeiten, die in einen beliebigen der DRAMs 220 innerhalb des PP-Speichers 204 zu schreiben sind. Die Crossbar-Einheit 210 ist konfiguriert, um die Ausgabe von jedem GPC 208 zu der Eingabe einer beliebigen Partitionseinheit 215 oder zu einem beliebigen anderen GPC 208 zur weiteren Verarbeitung zu leiten. Die GPCs 208 kommunizieren mit der Speicherschnittstelle 214 über die Crossbar-Einheit 210, um aus einer beliebigen Anzahl der DRAMs 220 lesen oder in diese zu schreiben. In einigen Ausführungsformen weist die Crossbar-Einheit 210 eine Verbindung zu der E/A-Einheit 205 zusätzlich zu einer Verbindung zu dem PP-Speicher 204 über die Speicherschnittstelle 214 auf, um dadurch den SMs innerhalb den unterschiedlichen GPCs 208 zu ermöglichen, mit dem Systemspeicher 104 oder anderen Speicher nicht lokal mit der PPU 202 zu kommunizieren. In der Ausführungsform von 2 ist die Crossbar-Einheit 210 direkt mit der E/A-Einheit 205 verbunden. In verschiedenen Ausführungsformen kann die Crossbar-Einheit 210 virtuelle Kanäle verwenden, um Verkehrs-Streams zwischen den GPCs 208 und den Partitionseinheiten 215 zu trennen.
  • Die GPCs 208 können wiederum programmiert werden, um Verarbeitungsaufgaben auszuführen, die eine weite Vielfalt von Anwendungen und/oder Algorithmen betreffen. In einigen Ausführungsformen ist die PPU 202 konfiguriert, um Daten von dem Systemspeicher 104 und/oder dem PP-Speicher 204 zu einem oder mehreren On-Chip-Speichereinheiten zu transferieren, um die Daten zu verarbeiten und Ergebnisdaten in den Systemspeicher 104 und/oder den PP-Speicher 204 zurück zu schreiben. Auf die Ergebnisdaten kann dann durch andere Systemkomponenten, einschließlich der CPU 102, einer anderen PPU 202 innerhalb des Parallelverarbeitungs-Teilsystems 112 oder eines anderen Parallelverarbeitungs-Teilsystems 112 innerhalb des Systems 100 zugegriffen werden.
  • Wie oben bemerkt, kann eine beliebige Anzahl der PPUs 202 in dem Parallelverarbeitungs-Teilsystem 112 umfasst sein. Beispielsweise können mehrere PPUs 202 auf einer einzigen Erweiterungskarte bereitgestellt oder mehrere Erweiterungskarten können mit dem Kommunikationspfad 113 verbunden oder eine oder mehrere der PPUs 202 können in einem Brücken-Chip integriert sein. Die PPUs 202 in einem Multi-PPU-System können miteinander identisch oder voneinander unterschiedlich sein. Beispielsweise könnten unterschiedliche PPUs 202 unterschiedliche Anzahlen von Verarbeiterkerne und/oder unterschiedliche Mengen der PP-Speicher 204 aufweisen. In Implementierungen, bei denen mehrere PPUs 202 vorhanden sind, können diese PPUs 202 parallel betrieben werden, um Daten mit einem höheren Durchsatz zu verarbeiten, als es mit einer einzigen PPU 202 möglich ist. Systeme, die eine oder mehrere PPUs 202 umfassen, können in einer Vielfalt von Konfigurationen implementiert und Faktoren bilden, einschließlich, ohne darauf beschränkt zu sein, Desktops, Laptops, handgehaltene Personalcomputer oder andere handgehaltene Vorrichtungen, Server, Arbeitsstationen, Spielkonsolen, eingebettete Systeme und dergleichen.
  • 3 ist ein Blockdiagramm eines GPC 208, der in der PPU 202 von 2 umfasst ist, gemäß verschiedener Ausführungsformen. Im Betrieb kann der GPC 208 konfiguriert sein, um eine großen Anzahl von Threads parallel auszuführen. In einigen Ausführungsformen ist jeder Thread, der auf dem GPC 208 ausgeführt wird, eine Instanz eines bestimmten Programms, das an einem bestimmte Satz von Eingabedaten ausgeführt wird. In einigen Ausführungsformen werden SIMD(einzige Anweisung, mehrere Daten) Ausgabetechniken verwendet, um eine parallele Ausführung einer großen Anzahl von Threads zu unterstützen, ohne mehrere unabhängige Anweisungseinheiten bereitzustellen. In einigen anderen Ausführungsformen werden SIMT(Einzelne Anweisung, Mehrere Threads)-Techniken verwendet, um die parallele Ausführung einer großen Anzahl von im Allgemeinen synchronisierten Threads unter Verwendung einer gemeinsamen Anweisungseinheit zu unterstützen, die konfiguriert ist, um Anweisungen an einen Satz von Verarbeitungs-Engines innerhalb des GPC 208 auszugeben. Im Gegensatz zu einem SIMD-Ausführungsregime, wobei alle Verarbeitungs-Engines typischerweise identische Anweisungen ausführen, erlaubt die SIMT-Ausführung unterschiedlichen Threads, divergenten Ausführungspfaden durch ein gegebenes Programm leichter zu folgen. Fachleute werden verstehen, dass ein SIMD-Verarbeitungsregime eine funktionale Teilmenge eines SIMT-Verarbeitungsregimes darstellt.
  • Der Betrieb des GPC 208 wird über einen Pipeline-Manager 305 gesteuert, der Verarbeitungsaufgaben, die von der Arbeitsverteilungseinheit (nicht gezeigt) empfangen werden, innerhalb der Aufgabe/Arbeitseinheit 207 an einen oder mehrere SMs 310 verteilt. Der Pipeline-Manager 305 kann ebenfalls konfiguriert sein, um einen Arbeitsverteilungs-Crossbar 330 durch Spezifizieren von Zielen für verarbeitete Daten zu steuern, die von den SMs 310 ausgegeben werden.
  • In einigen Ausführungsformen umfasst der GPC 208, ohne darauf beschränkt zu sein, eine Anzahl M von SMs 310, wobei M ≥ 1. In der gleichen oder anderen Ausführungsformen umfasst jeder der SMs 310, ohne darauf beschränkt zu sein, einen Satz von Funktionseinheiten (nicht gezeigt), wie beispielsweise Ausführungseinheiten und Lade-Speicher-Einheiten. Verarbeitungs-Operationen, die einer beliebigen der Funktionseinheiten spezifisch sind, können in einer Pipeline angeordnet werden, was ermöglicht, dass eine neue Anweisung zur Ausführung ausgegeben wird, bevor eine vorherige Anweisung vollständig ausgeführt wurde. Eine beliebige Kombination von Funktionseinheiten innerhalb eines gegebenen SM 310 kann bereitgestellt werden. In verschiedenen Ausführungsformen können die Funktionseinheiten konfiguriert sein, um eine Vielfalt von unterschiedlichen Operationen einschließlich Ganzzahl- und Gleitkommaarithmetik (z.B., Addition und Multiplikation), Vergleichsoperationen, boolesche Operationen (z.B. und, OR, XOR), Bitverschiebung und Berechnung von verschiedenen algebraischen Funktionen (z.B., planare Interpolation und trigonometrische, exponentielle und logarithmische Funktionen usw.) zu unterstützen. Vorteilhafterweise kann die gleiche Funktionseinheit konfiguriert sein, um unterschiedliche Operationen durchzuführen.
  • In einigen Ausführungsformen ist jeder der SMs 310 konfiguriert, um gleichlaufend eine oder mehrere kooperative Thread-Anordnungen („CTAs“) 390 zu verarbeiten. Jede CTA 390 wird hier ebenfalls als eine „Thread-Gruppe“ und einen „Thread-Block“ bezeichnet. Jede CTA 390 kann ein einziger Thread, eine eindimensionale Anordnung von Threads oder ein mehrdimensionaler Block von Threads sein, der konfiguriert ist, um das gleiche Programm an unterschiedlichen Eingabedaten gleichlaufend auszuführen. Jede CTA 390, die konfiguriert ist, um einen gegebenen Kernel auf unterschiedliche Eingabedaten gleichlaufend auszuführen, wird hier ebenfalls als „eine Thread-Gruppen-Instanz“ des Kernels bezeichnet. In einigen Ausführungsformen kann jeder der SMs 310 gleichlaufend eine maximale Anzahl von CTAs 390 (z.B., ein, zwei usw.) verarbeiten, die unabhängig von der Größe der CTAs 390 ist.
  • In einigen Ausführungsformen ist jedem Thread in jeder CTA 390 eine eindeutige Thread-Kennung („ID“) zugewiesen, die für den Thread während der Ausführung des Threads zugänglich ist. Die Thread-ID, die als ein eindimensionaler oder mehrdimensionaler numerischer Wert definiert sein kann, steuert verschiedene Aspekte des Verarbeitungsverhaltens des Threads. Beispielsweise kann eine Thread-ID verwendet werden, um zu bestimmen, welcher Abschnitt eines Eingabedatensatzes ein Thread ist, um zu verarbeiten und/oder zu bestimmen, welcher Abschnitt eines Ausgabedatensatzes ein Thread ist, um zu erzeugen oder zu schreiben. In einigen Ausführungsformen können die Threads in jeder CTA 390 zusammen synchronisieren, arbeiten, kommunizieren oder eine beliebige Kombination davon in einer beliebigen technisch machbaren Art und Weise sein (z.B., über einen gemeinsam genutzten Speicher).
  • In einigen Ausführungsformen sind Thread-Blöcke, die konfiguriert sind, um den gleichen Kernel auszuführen, in einem eindimensionalen oder mehrdimensionalen Gitter organisiert. In der gleichen oder anderen Ausführungsformen wird jeder CTA 390 eine eindeutigen CTA-ID zugewiesen, die für jeden Thread in der CTA 390 während der Ausführung des Threads zugänglich ist. Die Konfigurationen (z.B., Größe, Dimensionen usw.) von Gittern und CTAs 390 können in einer beliebigen technisch machbaren Art und Weise bestimmt werden. Beispielsweise wird in einigen Ausführungsformen die Konfiguration jedes Gitters und die Konfiguration der CTAs 390 in dem Gitter durch den Programmierer bestimmt, und die Menge von Hardwareressourcen, wie beispielsweise Speicher oder Register, die dem Gitter und den CTAs 390 verfügbar sind.
  • Unter Rückbezug auf 2 sowie auch 3 wird in einigen Ausführungsformen jede CTA 390 in einem gegebenen Gitter auf einem der in PPU 202 umfassten SMs 310 durch eine virtualisierte parallele Laufzeit geplant. Anschließend führen die Threads in jeder CTA 390 das gleiche Programm an unterschiedliche Eingabedaten gleichlaufend aus, wobei jeder Thread in der CTA 390 auf einer unterschiedlichen Ausführungseinheit innerhalb des SM 310 ausgeführt wird, auf dem die CTA 390 geplant ist.
  • In einigen Ausführungsformen kann jede CTA 390 weniger Threads als die Anzahl von Ausführungseinheiten innerhalb des SM 310 umfassen, auf dem die CTA 390 geplant ist, wobei in diesem Fall einige der Ausführungseinheiten während Zyklen untätig sein können, wenn diese CTA 390 verarbeitet wird. In der gleichen oder anderen Ausführungsformen kann jede CTA 390 mehr Threads als die Anzahl von Ausführungseinheiten innerhalb des SM 310 umfassen, auf dem die CTA 390 geplant ist, wobei in diesem Fall die Verarbeitung über aufeinanderfolgenden Taktzyklen stattfinden kann. In einigen Ausführungsformen folgt, da jede der SMs 310 bis zu G CTAs gleichlaufend unterstützen kann, dass bis zu G*M CTAs in dem GPC 208 zu einer beliebigen gegebenen Zeit ausgeführt werden können.
  • In einigen Ausführungsformen enthält jeder der SMs 310 einen Level-1-(„L1“)-Cache (in 3 nicht gezeigt) oder verwendet Platz in einem entsprechenden L1-Cache außerhalb des SM 310, um, unter anderem, Lade- und Speicheroperationen zu unterstützen. Jeder der SMs 310 weist ebenfalls Zugriff auf Level zwei („L2“) Caches (nicht gezeigt) auf, die zwischen allen der GPCs 208 in der PPU 202 gemeinsam genutzt werden. In einigen Ausführungsformen können die L2-Caches verwendet werden, um Daten zwischen Threads zu transferieren. Schließlich können die SMs 310 ebenfalls einen Zugriff auf einen Off-Chip „globalen“ Speicher aufweisen, der den PP-Speicher 204 und/oder den Systemspeicher 104 umfassen kann. Es sei zu verstehen, dass ein beliebiger Speicher extern zu der PPU 202 als globaler Speicher verwendet werden kann. Außerdem kann, wie in 3 gezeigt, einen Level-Eins-Punkt-Fünf(„L1.5“)-Cache 335 innerhalb der GPC 208 umfasst und konfiguriert sein, um Daten zu empfangen und zu halten, die von Speicher über die Speicherschnittstelle 214 durch den SM 310 angefragt wurden, und die angefragten Daten dem SM 310 bereitzustellen. Derartige Daten können umfassen, ohne darauf beschränkt zu sein, Anweisungen, gleichmäßige Daten und konstante Daten. In Ausführungsformen mit mehreren SMs 310 innerhalb der GPC 208 können sich die SMs 310 auf vorteilhafte Weise gemeinsame Anweisungen und in dem L1.5-Cache 335 zwischengespeicherte Daten teilen.
  • Jeder GPC 208 kann eine zugeordnete Speichermanagementeinheit („MMU“) 320 aufweisen, die konfiguriert ist, um virtuelle Adressen in physische Adressen abzubilden. In verschiedenen Ausführungsformen kann sich die MMU 320 entweder innerhalb des GPC 208 oder innerhalb der Speicherschnittstelle 214 befinden. Die MMU 320 umfasst einen Satz von Seitentabelleneinträgen, die verwendet werden, um eine virtuelle Adresse in eine physische Adresse einer Kachel oder Speicherseite und optional einen Cache-Zeilen-Index abzubilden. Die MMU 320 kann Adressübersetzungs-Lookaside-Puffer oder Caches umfassen, die sich innerhalb der SMs 310, innerhalb einem oder mehreren L1-Caches oder innerhalb des GPC 208 befinden können.
  • In einigen Ausführungsformen überträgt jeder SMs 310 eine verarbeitete Aufgabe an den Arbeitsverteilungs-Crossbar 330, um die verarbeitete Aufgabe einem anderen GPC 208 zur weiteren Verarbeitung bereitzustellen oder die verarbeitete Aufgabe in einem L2-Cache (nicht gezeigt), dem PP-Speicher 204 oder dem Systemspeicher 104 über die Crossbar-Einheit 210 zu speichern.
  • Es versteht sich, dass die hier beschriebene Kernarchitektur veranschaulichend ist und dass Variationen und Modifikationen möglich sind. Unter anderem können eine beliebige Anzahl und/oder Typen von Verarbeitungseinheiten, wie beispielsweise die SMs 310, innerhalb des GPC 208 umfasst sein. Ferner kann, wie oben in Verbindung mit 2 beschrieben, die PPU 202 eine beliebige Anzahl der GPCs 208 umfassen, die konfiguriert sind, um funktional ähnlich zueinander zu sein, so dass das Ausführungsverhalten nicht davon abhängt, welcher der GPCs 208 eine bestimmte Verarbeitungsaufgabe empfängt. Ferner arbeitet in einigen Ausführungsformen jeder der GPCs 208 unabhängig von den anderen GPCs 208 in der PPU 202, um Aufgaben für ein oder mehrere Anwendungsprogramme auszuführen. Angesichts des Vorhergehenden werden Fachleute verstehen, dass die in 1-3 beschriebene Architektur in keiner Weise den Umfang der vorliegenden Offenbarung begrenzt.
  • Wie kursiv für eine beispielhafte CTA 390 gezeigt, führt in einigen Ausführungsformen jeder Thread in jeder von mehreren CTAs 390 gleichlaufend den GEMM-Kernel 192 aus. Die CTAs 390 können als Thread-Gruppen-Instanzen des GEMM-Kernels 192 konfiguriert und auf den SMs 310 in einer beliebigen technisch machbaren Art und Weise geplant sein. Unter Rückbezug auf 1 sowie auch 3 startet in einigen Ausführungsformen die Dispatch-Anwendung 180 den GEMM-Kernel 192 für ein Gitter (nicht gezeigt) von CTAs 390 mit einer Gittergröße, die gleich der maximalen Wellengröße für die PPU 202 ist. Als Antwort plant eine virtualisierte parallele Laufzeit die entsprechenden Thread-Gruppen-Instanzen des GEMM-Kernels 192 gleichmäßig über die SMs 310, die in der PPU 202 umfasst sind. In einer einzigen Welle führt jede CTA 390 in dem Gitter unterschiedliche MAC-Iterationen basierend auf unterschiedlichen Eingabedaten aus, um zusammen eine parallele GEMM-Berechnung durchzuführen. Eine beispielhafte parallele GEMM-Berechnung wird nachstehend in Verbindung mit 5 ausführlicher beschrieben.
  • Lediglich für erläuternde Zwecke werden mehrere Instanzen ähnlicher Objekte hier mit Bezugszeichen, die das Objekt identifizieren, und ein oder mehrere alphanumerische Zeichen in Klammern, welche die Instanz nach Bedarf identifizieren, bezeichnet.
  • Konfigurieren einer PPU, um eine parallele GEMM-Berechnung durchzuführen
  • 4 ist eine ausführlichere Veranschaulichung der Dispatch-Anwendung 180 von 1 gemäß verschiedener Ausführungsformen. Lediglich für erläuternde Zwecke konfiguriert in der in Verbindung mit 4 anschaulich dargestellten und beschriebenen Ausführungsform die Dispatch-Anwendung 180 die PPU 202, um eine parallele GEMM-Berechnung 490 als Reaktion auf einen GEMM-Funktionsaufruf 410 durchzuführen. In einigen anderen Ausführungsformen kann die Dispatch-Anwendung 180 eine beliebige Anzahl von PPUs 202 konfigurieren, um eine beliebigen Anzahl und/oder Typen von parallelen MAC-Berechnungen als Reaktion auf eine beliebige Anzahl und/oder Typen von Funktionsaufrufen durchzuführen, die von einer beliebigen Anzahl und/oder Typen von Programmen empfangen werden.
  • Der GEMM-Funktionsaufruf 410 kann eine GEMM und eine beliebigen Anzahl und/oder Typ von zugeordneten GEMM-Charakteristiken in einer beliebigen technisch machbaren Art und Weise spezifizieren. In einigen Ausführungsformen definiert der GEMM-Funktionsaufruf 410 die GEMM basierend auf der Funktion C = αAB + βC, wobei A eine Eingabematrix 430(0) mit Dimensionen m*k, B eine Eingabematrix 430(1) mit Dimensionen k*n, C eine Ausgabematrix 440 mit Dimensionen m*n, α und β skalare Eingaben sind und m, n und k beliebige ganze Zahlen sein können. Einige Beispiele von GEMM-Charakteristiken umfassen, ohne darauf beschränkt zu sein, den Typ und die Auslegung der Eingabematrix 430(0), der Eingabematrix 430(1) und der Ausgabematrix 440.
  • Basierend auf den GEMM-Funktionsaufruf 410 bestimmt die Dispatch-Anwendung 180 den GEMM-Kernel 192, der zum Berechnen der GEMM zu verwenden ist. In einigen Ausführungsformen teilt der durch die Dispatch-Anwendung 180 ausgewählte GEMM-Kernel 192 eine spezifizierte Anzahl von MAC-Iterationen angemessen über eine spezifizierte Warp von SMs 310, um die über den GEMM-Funktionsaufruf 410 spezifizierte GEMM durchzuführen. Die Dispatch-Anwendung 180 kann den GEMM-Kernel 192 in einer beliebigen technisch machbaren Art und Weise bestimmen. Beispielsweise wählt in einigen Ausführungsformen die Dispatch-Anwendung 180 den GEMM-Kernel 192 aus einer beliebigen Anzahl von GEMM-Kernel 192 in der Kernel-Bibliothek 190 basierend auf einer beliebigen Anzahl der GEMM-Charakteristiken und/oder einer beliebigen Anzahl von Charakteristiken der PPU 202 aus.
  • Wie in einigen Ausführungsformen gezeigt, umfasst die Dispatch-Anwendung 180, ohne darauf beschränkt zu sein, Kacheldaten 422, GEMM-Daten 424, eine Zerlegungsauswahl-Engine 460 und eine Gitterstart-Engine 480. Die Dispatch-Anwendung 180 erzeugt die Kacheldaten 422 basierend auf dem GEMM-Funktionsaufruf 410 und einer Kachelgröße 412. Um die Kacheldaten 422 zu erzeugen, partitioniert die Dispatch-Anwendung 180 die Ausgabematrix 440 in Ausgabekacheln 442 basierend auf der Kachelgröße 412. In einigen Ausführungsformen ist die Kachelgröße 412 für eine oder mehrere Charakteristiken der PPU 202 optimiert. Beispielsweise wird in einigen Ausführungsformen die Kachelgröße 412 ausgewählt, um in einen On-Chip-Speicher (z.B., 128x128) zu passen.
  • Lediglich für erläuternde Zwecke wird die Funktionalität der Dispatch-Anwendung 180 in 4 im Kontext einer beispielhaften Ausführungsform anschaulich dargestellt, bei der die Dispatch-Anwendung 180 die Ausgabematrix 440 in Ausgabekacheln 442(0)-442(8) partitioniert. In einigen anderen Ausführungsformen kann die Dispatch-Anwendung 180 die Ausgabematrix 440 in einer beliebigen Anzahl von Ausgabekacheln 442 partitionieren und die hier beschriebenen Techniken werden dementsprechend modifiziert. Wie gezeigt, umfassen die Kacheldaten 422, ohne darauf beschränkt zu sein, die Eingabematrix 430(0), die Eingabematrix 430(1) und die Ausgabematrix 440, die in die Ausgabekacheln 442(0)-442(8) partitioniert sind.
  • Die Dispatch-Anwendung 180 erzeugt die GEMM-Daten 424 basierend auf dem GEMM-Funktionsaufruf 410 und optional den Kacheldaten 422. Die GEMM-Daten 424 können umfassen, ohne darauf beschränkt zu sein, eine beliebige Menge und/oder Typ von Daten, die eine beliebigen Anzahl von Aspekten der GEMM beschreiben, die über den GEMM-Funktionsaufruf 410 spezifiziert werden, die für den GEMM-Kernel 192 in einer beliebigen technisch machbaren Art und Weise relevant sind. Beispielsweise können in einigen Ausführungsformen die GEMM-Daten 424, ohne darauf beschränkt zu sein, eine beliebigen Menge und/oder Typ von physischen Auslegungsdaten (z.B., Speicherzeiger) und eine beliebige Menge und/oder Typen von Metadaten (z.B., Matrixdimensionen, Strides, Auffüllungen usw.) umfassen, welche die über die GEMM-Funktionsaufruf 410 spezifizierte GEMM beschreiben.
  • In einigen Ausführungsformen stellt die Zerlegungsauswahl-Engine 460 einen Ausgabekachelzählwert 452 gleich der Gesamtzahl von Ausgabekacheln 442 ein, die in der Ausgabematrix 440 umfasst sind. Wie kursiv veranschaulicht, ist für die in 4 veranschaulicht dargestellte beispielhafte Ausführungsform der Ausgabekachelzählwert 452 gleich neun. Basierend auf einer Definition von MAC-Iteration, bestimmt die Zerlegungsauswahl-Engine 460 eine MAC-Iterationen pro Kachel 454. Wie hier zuvor beschrieben, ist eine MAC-Iteration ein festen Betrag des Fortschritts eines Parallelverarbeitungselements (wie in logische MAC-Operationen gemessen) in dem Akkumulationsmaß (z.B., der k-Achse), die nicht weiter über Parallelverarbeitungselemente unterteilt ist. Im Kontext von 4 ist eine MAC-Iteration ist ein fester Betrag an SM-Fortschritt in die Akkumulationsmaß, die nicht weiter über die SMs 310 unterteilt ist. In einigen Ausführungsformen wird die MAC-Iteration dadurch definiert, wie der GEMM-Kernel 192 jede GEMM berechnet. Wie kursiv anschaulich dargestellt, sind für die in 4 veranschaulicht dargestellte beispielhafte Ausführungsform die MAC-Iterationen pro Kachel 454 gleich vier.
  • Die Zerlegungsauswahl-Engine 460 stellt einen MAC-Iterationszählwert 456 gleich dem Produkt des Ausgabekachelzählwerts 452 und der MAC-Iterationen pro Kachel 454 ein. Wie kursiv anschaulich dargestellt, ist in einigen Ausführungsformen der MAC-Iterationszählwert 456 von der Größenordnung von (n*m*k). In der in 4 veranschaulichten beispielhaften Ausführungsform ist der MAC-Iterationszählwert 456 gleich dem Produkt aus neun und vier und ist daher gleich sechsunddreißig (kursiv dargestellt).
  • Wie gezeigt, wählt in einigen Ausführungsformen die Zerlegungsauswahl-Engine 460 einen Zerlegungstyp 478 von verfügbaren Zerlegungstypen 470 aus. Der Zerlegungstyp 478 spezifiziert eine parallele Zerlegungsstrategie und die verfügbaren Zerlegungstypen 470 umfassen, ohne darauf beschränkt zu sein, eine beliebigen Anzahl und/oder Typen von parallelen Zerlegungstrategien, die durch den GEMM-Kernel 192 unterstützt werden. Mindestens einer der verfügbaren Zerlegungstypen 470 ist die Iterations-basierte parallele Zerlegungsstrategie des angemessenen Teilens der MAC-Iterationen, die in einer MAC-Berechnung umfasst sind, über Parallelverarbeitungselemente. Auf die Iterations-basierte parallele Zerlegungsstrategie wird hier ebenfalls als „Stream-k“ Bezug genommen und mit „STK“ bezeichnet. Im Kontext der PPU 202 bezieht sich STK daher auf die Strategie, den MAC-Iterationszählwert 456 von MAC-Iterationen angemessen über die SMs 310 zu teilen.
  • Die Zerlegungsauswahl-Engine 460 kann den Zerlegungstyp 478 in einer beliebigen technisch machbaren Art und Weise basierend auf einer beliebigen Menge und/oder Typ von relevanten Daten auswählen. In einigen Ausführungsformen wendet die Zerlegungsauswahl-Engine 460 eine beliebige Anzahl und/oder Typen von Algorithmen (z.B., Regeln, Heuristiken usw.) an, um den Zerlegungstyp 478 basierend auf den Kacheldaten 422, einer beliebigen Menge und/oder Typen von Daten, die der PPU 202 zugeordnet ist, oder einer beliebigen Kombination davon auszuwählen. Wie mit einem gestrichelten Pfeil anschaulich dargestellt, kann in einigen Ausführungsformen die Zerlegungsauswahl-Engine 460 eine maximale Wellengröße 436 beim Bestimmen der Zerlegungstyp 478 berücksichtigen.
  • Die maximale Wellengröße 436 spezifiziert eine maximale Anzahl von CTAs 390, die gleichlaufend auf den in der PPU 202 umfassten SMs 310 ausgeführt werden können. In einigen Ausführungsformen kann höchstens eine CTA 390 gleichlaufend auf jeder SM 310 ausgeführt werden und die maximale Wellengröße 436 ist daher gleich der Gesamtzahl von SMs 310, die in der PPU 202 umfasst sind. In einigen anderen Ausführungsformen können höchstens zwei CTAs 390 gleichlaufend auf jedem SM 310 ausgeführt werden und die maximale Wellengröße 436 ist daher gleich dem Zweifachen der Gesamtzahl von SMs 310, die umfassend in die PPU 202. Lediglich für erläuternde Zwecke kann in der in 4 und 5 beispielhaft dargestellten Ausführungsform höchstens eine CTA 390 gleichlaufend auf jedem SM 310 ausgeführt werden, die Gesamtzahl von SMs 310, die in der PPU 202 umfasst sind, ist gleich vier, und die maximale Wellengröße 436 ist gleich vier (in kursiv anschaulich dargestellt).
  • Wie kursiv veranschaulicht, umfassen in einigen Ausführungsformen die verfügbaren Zerlegungstypen 470, ohne darauf beschränkt zu sein, STK, Daten parallel („DP“), splitk („SPK“), STK carve-out und STK/DP. In einer STK-Zerlegungsstrategie wird jede GEMM in einer einzige vollen Welle von gleichlaufend ausführenden CTAs 390 berechnet. Wenn der Zerlegungstyp 478 gleich STK ist, dann startet die Gitterstart-Engine 480 den GEMM-Kernel 192 mit einer Gittergröße 482, die gleich der maximalen Wellengröße 436 ist. Wie in kursiv gezeigt, wählt die in 4 anschaulich dargestellten Ausführungsform die Zerlegungsauswahl-Engine 460 den Zerlegungstyp 478 von STK. Die Gitterstart-Engine 480 wird nachstehend im Kontext des Zerlegungstyps 478 von STK ausführlicherer beschrieben.
  • Wie Fachleute erkennen werden, sind DP und SPK herkömmliche kachelbasierte parallele Zerlegungsstrategien. In einer DP-Strategie wird jede Ausgabekachel 442 durch eine einzelne der CTAs 390 berechnet. In einigen Ausführungsformen startet dann, wenn der Zerlegungstyp 478 gleich DP ist, die Gitterstart-Engine 480 den GEMM-Kernel 192 mit der Gittergröße 482, die gleich dem Ausgabekachelzählwert 452 ist. In einer SPK-Strategie wird jede Ausgabekachel 442 durch ein gerades Vielfaches der CTAs 390 berechnet. In einigen Ausführungsformen startet dann, wenn der Zerlegungstyp 478 gleich SPK ist, die Gitterstart-Engine 480 den GEMM-Kernel 192 mit der Gittergröße 482, die gleich dem Produkt des Ausgabekachelzählwerts 452 und einem Teilungsfaktor ist.
  • In einigen Ausführungsformen kann dann, wenn der Ausgabekachelzählwert 452 erheblich größer als die maximale Wellengröße 436 ist, die GEMM-Ausführungszeit (in 4 nicht gezeigt) signifikant sein. Das Auswählen des Zerlegungstyps 478 von STK kann daher die PPU 202 wirksam „camp“ machen. Um andere Prozessoraufgaben hoher Priorität zu erlauben, gleichlaufend mit der GEMM ausgeführt zu werden, wählt in einigen Ausführungsformen die Zerlegungsauswahl-Engine 460 den Zerlegungstyp 478 von STK carve-out oder STK/DP aus.
  • In einigen Ausführungsformen startet dann, wenn der Zerlegungstyp 478 gleich STK carve-out ist, die Gitterstart-Engine 480 den GEMM-Kernel 192 mit einer Gittergröße 482, die kleiner als die maximale Wellengröße 436 ist. Demgemäß werden die MAC-Iterationen angemessen über eine Teilmenge der SMs 310 geteilt, während andere SMs 310 für andere Prozessoraufgaben hoher Priorität verfügbar sind. In den gleichen oder anderen Ausführungsformen startet dann, wenn der Zerlegungstyp 478 gleich STK/DP ist, die Gitterstart-Engine 480 den GEMM-Kernel 192, so dass die GEMM über eine STK-Welle und eine oder mehrere DP-Wellen berechnet wird. Genauer gesagt startet die Gitterstart-Engine 480 den GEMM-Kernel 192, so dass die Gesamtzahl von DP Wellen gleich vier ist( (Ausgabe Kachelzählwert 452) / Kacheln pro Welle) - 0.5).
  • Wie gezeigt, umfasst die Gitterstart-Engine 480, ohne darauf beschränkt zu sein, die Gittergröße 482, Argumentwerte 484 und einen Kernelaufruf 488. Lediglich für erläuternde Zwecke wird die Funktionalität der Gitterstart-Engine 480 hier im Kontext des Zerlegungstyps 478 von STK beschrieben. Weil der Zerlegungstyp 478 gleich STK, stellt die Gitterstart-Engine 480 die Gittergröße 482 gleich der maximalen Wellengröße 436 ein. Wie kursiv anschaulich dargestellt, stellt in der in 4 beispielhaft veranschaulicht dargestellte Ausführungsform die Gitterstart-Engine 480 die Gittergröße 482 gleich vier ein.
  • Die Argumentwerte 484 sind Werte für Argumente des GEMM-Kernels 192. In einigen Ausführungsformen umfassen die Argumentwerte 484, ohne darauf beschränkt zu sein, den MAC-Iterationszählwert 456 und eine beliebige Menge der GEMM-Daten 424. In der gleichen oder anderen Ausführungsformen können die Argumente der GEMM-Kernel 192 variieren und die Argumentwerte 484 variieren demgemäß. Beispielsweise umfassen in einigen Ausführungsformen die Argumente des GEMM-Kernels 192 eine MAC-Iterationen pro CTA (nicht gezeigt) anstatt des MAC-Iterationszählwerts 456. In der gleichen oder anderen Ausführungsformen berechnet die Gitterstart-Engine 480 die MAC-Iterationen pro CTA basierend auf dem MAC-Iterationszählwert 456 und der Gittergröße 482. In einigen Ausführungsformen kann eine beliebige Menge an Funktionalität, die dem Bestimmen des Satzes von MAC-Iterationen zugeordnet ist, die jede CTA 390 ausführt, und dem Satz von MAC-Iterationen, die jeder Ausgabekachel 442 zugeordnet sind, zwischen der Dispatch-Anwendung 180 und dem GEMM-Kernel 192 in einer beliebigen technisch machbaren Art und Weise geteilt werden.
  • Wie gezeigt, startet in einigen Ausführungsformen die Gitterstart-Engine 480 den GEMM-Kernel 192 über den Kernelaufruf 488. Der Kernelaufruf 488 umfasst, ohne darauf beschränkt zu sein, den Namen des GEMM-Kernels 192, eine Ausführungskonfiguration (nicht gezeigt) und die Argumentwerte 484 für die Argumente des GEMM-Kernels 192. In einigen Ausführungsformen spezifiziert die Ausführungskonfiguration, ohne darauf beschränkt zu sein, die Gittergröße 482, eine CTA-Größe (nicht gezeigt) und optional eine beliebigen Menge an vorübergehender Speicherung.
  • In einigen Ausführungsformen kann die Gittergröße 482 und/oder die CTA-Größe eindimensional oder mehrdimensional sein. In der gleichen oder anderen Ausführungsformen spezifiziert die vorübergehende Speicherung eine beliebige pro CTA-Menge und/oder einen Speichertyp, der zwischen den in jeder CTA 390 umfassten Threads umfassend gemeinsam genutzt werden kann. In einigen Ausführungsformen wird die vorübergehende Speicherung verwendet, um eine beliebige Menge und/oder Typen von Kachelkoordinationsoperationen zu erleichtern, die Ausgabekacheln 442 zugeordnet sind, die über CTAs 390 aufgeteilt sind. Kachelkoordinationsoperationen werden nachstehend in Verbindung mit 5 und 6 ausführlicher beschrieben.
  • In einigen Ausführungsformen schickt als Reaktion auf den Kernelaufruf 488 eine virtualisierte parallele Laufzeit (nicht gezeigt) ein Gitter von CTAs 390 über die SMs 310 ab, die in der PPU 202 umfasst sind. Bemerkenswerterweise ist jeder Thread in dem Gitter von CTAs 390 konfiguriert, um den GEMM-Kernel 192 an unterschiedlichen Eingabedaten auszuführen. Die Einplanungseinheit(en) innerhalb der PPU 202 (z.B., die Arbeitsverteilungseinheit innerhalb der Aufgaben/Arbeitseinheit 207 und der Pipeline-Manager 305 innerhalb den GPCs 208) planen das Gitter von CTAs 390 gleichmäßig auf den SMs 310. Die CTAs 390, die in dem Gitter von CTAs 390 umfasst sind, führen zusammen und gleichlaufend die parallele GEMM-Berechnung 490 aus.
  • Ausführen von MAC-Iterationen, die in einer parallelen GEMM-Berechnung umfasst sind
  • 5 ist eine beispielhafte Veranschaulichung der parallelen GEMM-Berechnung 490 von 4 gemäß verschiedener Ausführungsformen. Lediglich für erläuternde Zwecke wird die parallele GEMM-Berechnung 490 im Kontext des Beispiels des Kernelaufrufs 488 beschrieben, der hier zuvor in Verbindung mit 4 beschrieben wurde, die den GEMM-Kernel 192 konfiguriert, um den Zerlegungstyp 478 von STK zu implementieren. Genauer gesagt ist die Gittergröße 482, die über die Ausführungskonfiguration des Kernelaufrufs 488 spezifiziert wird, gleich der maximalen Wellengröße 436 von vier, und der MAC-Iterationszählwert 456, der über die Argumentwerte 484 spezifiziert wird, die den Argumenten des GEMM-Kernels 192 entsprechen, ist gleich sechsunddreißig.
  • In der in 5 anschaulich dargestellten Ausführungsform veranlasst, weil die Gittergröße 482 gleich vier ist, die virtualisierte parallele Laufzeit (nicht gezeigt in 5), die der PPU 202 zugeordnet ist, die PPU 202 den GEMM-Kernel 192 als ein Gitter von CTAs 390(0)-390(3) auszuführen. Die Planungseinheit(en) innerhalb der PPU 202 (z.B., die Arbeitsverteilungseinheit innerhalb der Aufgabe/Arbeitseinheit 207 und der Pipeline-Manager 305 innerhalb der GPCs 208) plant(en) die CTAs 390(0)-390(3) gleichmäßig auf den SMs 310 basierend auf der maximalen Anzahl von CTAs 390, die jeder SM 310 gleichlaufend verarbeiten kann.
  • Unter erneuter Bezugnahme nun auf 4, ist die maximale Wellengröße gleich vier. Demgemäß können die SMs 310 gleichlaufend eine Gesamtzahl von vier CTAs 390 ausführen. Lediglich für erläuternde Zwecke umfasst die in 5 anschaulich dargestellte Ausführungsform, die PPU 202 umfasst, ohne darauf beschränkt zu sein, SMs 310(0)-310(3), und jeder der SMs 310 kann gleichlaufend ein Maximum von einer der CTAs 390(0)-390(3) ausführen. Die Planungseinheit(en) plant(en) daher die CTAs 390(0)-390(3) jeweils auf den SMs 310(0)-310(3) ein. Und die CTAs 390(0)-390(3) werden gleichlaufend in einer einzigen, vollen Welle ausgeführt, um die Ausgabekacheln 442 zu berechnen, die in der über die Argumentwerte 484 spezifizierten Ausgabematrix 440 umfasst sind.
  • Unter erneuter Bezugnahme nun auf 4 umfasst die Ausgabematrix 440, ohne darauf beschränkt zu sein, die Ausgabekacheln 442(0)-442(8), und die MAC-Iterationen pro Kachel 454 sind gleich vier. Demgemäß ist jede der Ausgabekacheln 442(0)-442(8) einer unterschiedliche Teilmenge von vier der sechsunddreißig MAC-Iterationen zugeordnet, die in der parallelen GEMM-Berechnung 490 umfasst sind. Lediglich für erläuternde Zwecke werden die vier MAC-Iterationen, die jeder Ausgabekachel 442 zugeordnet sind, hier ebenfalls als „Kacheliterationen“ der Ausgabekachel 442 bezeichnet. Über die Ausgabekacheln 442 ist jede der sechsunddreißig Kacheliterationen eine unterschiedliche der sechsunddreißig MAC-Iterationen, welche die CTAs 390(0)-390(3) ausführen, um die parallele GEMM-Berechnung 490 durchzuführen.
  • Lediglich für erläuternde Zwecke werden im Kontext von 5 Kacheliterationen als x-y bezeichnet, wobei x ein Index in den Ausgabekacheln 442 ist und y eine Index in der Teilmenge von vier MAC-Iterationen ist, die der Ausgabekachel 442(x) zugeordnet sind. Die der Ausgabekachel 442(0) zugeordneten Kacheliterationen, die mit 0-0, 0-1, 0-2 und 0-3 bezeichnet sind, sind jeweils die MAC-Iterationen 0-3. Die der Ausgabekachel 442(1) zugeordneten Kacheliterationen, die mit 1-0, 1-1, 1-2 und 1-3 bezeichnet sind, sind jeweils die MAC-Iterationen 4-7. Die der Ausgabekachel 442(2) zugeordneten Kacheliterationen, die mit 2-0, 2-1, 2-2 und 2-3 bezeichnet sind, sind jeweils die MAC-Iterationen 8-11. Die der Ausgabekachel 442(3) zugeordneten Kacheliterationen, die mit 3-0, 3-1, 3-2 und 3-3 bezeichnet sind, sind jeweils die MAC-Iterationen 12-15. Die der Ausgabekachel 442(4) zugeordneten Kacheliterationen, die mit 4-0, 4-1, 4-2 und 4-3 bezeichnet sind, sind jeweils die MAC-Iterationen 16-19. Die der Ausgabekachel 442(5) zugeordneten Kacheliterationen, die mit 5-0, 5-1, 5-2 und 5-3 bezeichnet sind, sind jeweils die MAC-Iterationen 20-23. Die der Ausgabekachel 442(6) zugeordneten Kacheliterationen, die mit 6-0, 6-1, 6-2 und 6-3 bezeichnet sind, sind jeweils die MAC-Iterationen 24-27. Die der Ausgabekachel 442(7) zugeordneten Kacheliterationen, die mit 7-0, 7-1, 7-2 und 7-3 bezeichnet sind, sind jeweils die MAC-Iterationen 28-32. Die der Ausgabekachel 442(8) zugeordneten Kacheliterationen, die mit 8-0, 8-1, 8-2 und 8-3 bezeichnet sind, sind jeweils die MAC-Iterationen 33-36.
  • Jede der CTAs 390(0)-390(3) kann konfiguriert sein, um eine angemessene Anzahl von MAC-Iterationen in einer beliebigen technisch machbaren Art und Weise durchzuführen. In einigen Ausführungsformen und wie nachstehend in Verbindung mit 6 gemäß dem GEMM-Kernel 192 ausführlicher beschrieben, initialisiert jede CTA 390 eine CTA-Iteration („cta_itr“) in einer ersten CTA-Iteration und bestimmt eine letzte CTA-Iteration („cta_letzte_itr“) basierend auf der zugeordneten CTA-ID, der Gittergröße 482 und dem MAC-Iterationszählwert 456. Für jede CTA 390 ist die Anzahl von MAC-Iterationen gleich (CTA letzte Iteration - CTA erste Iteration + 1). Im Allgemeinen variiert die Anzahl von MAC-Iterationen, die von jeder der CTAs 390 ausgeführt werden, um höchstens eins. Genauer gesagt führt jede der CTAs 390 entweder x oder (x+1) MAC-Iterationen aus, wobei x eine beliebige positive ganze Zahl sein kann.
  • Für die in 5 anschaulich dargestellte Ausführungsform spezifizieren CTA-Iterationsbereiche 510(0)-510(3) jeweils die durch die CTAs 390(0)-390(3) ausgeführten MAC-Iterationen. Der CTA-Iterationsbereich 510(0) spezifiziert, dass die CTA 390(0) die MAC-Iterationen 0-8 ausführt. Der CTA-Iterationsbereich 510(1) spezifiziert, dass die CTA 390(1) die MAC-Iterationen 9-17 ausführt. Der CTA-Iterationsbereich 510(2) spezifiziert, dass die CTA 390(2) die MAC-Iterationen 18-26 ausführt. Der CTA-Iterationsbereich 510(3) spezifiziert, dass die CTA 390(3) die MAC-Iterationen 27-35 ausführt.
  • In einigen anderen Ausführungsformen kann die parallele GEMM-Berechnung 490 durch eine beliebige Anzahl von CTAs 390 ausgeführt werden, die auf einer beliebigen Anzahl von SMs 310 einer einzigen Welle ausgeführt werden. In der gleichen oder anderen Ausführungsformen kann die parallele GEMM-Berechnung 490 eine beliebige Anzahl von MAC-Iterationen umfassen und kann eine beliebige Anzahl von Ausgabekacheln 442 erzeugen. In einigen Ausführungsformen kann der Zerlegungstyp 478 über die CTAs 390 in einem gegebenen Gitter variieren, die von den CTAs 390 ausgeführte Anzahl von MAC-Iterationen kann variieren und die Anzahl von Wellen kann größer als eins sein.
  • Wichtig ist, dass dann, wenn die MAC-Iterationen pro CTA (der MAC-Iterationszählwert 456 geteilt durch die Gittergröße 482) nicht ein gerades Vielfaches der MAC-Iterationen pro Kachel 454 sind, die Kacheliterationen für eine oder mehrere der Ausgabekacheln 442 über CTAs 390 aufgeteilt werden. Für jede Ausgabekachel 442, die über eine Teilmenge von CTAs 390 aufgeteilt ist, führt jede CTA 390, die in der Teilmenge der CTAs 390 umfasst ist, eine oder mehrere Kachelkoordinationsoperationen aus, die der Ausgabekachel 442 zugeordnet sind. Wie nachstehend ausführlicher in Verbindung mit einem Beispiel des GEMM-Kernels 192 beschrieben ist, umfassen in einigen Ausführungsformen Kachelkoordinationsoperationen, ohne darauf beschränkt zu sein, Carry-Out-Operationen, Carry-In-Operationen, Warteoperationen und Carry-In-Akkumulationsoperationen. In einigen anderen Ausführungsformen können die CTAs 390 eine beliebige Anzahl und/oder Typen von Kachelkoordinationsoperationen in einer beliebigen technisch machbaren Art und Weise durchführen.
  • Lediglich für veranschaulichende Zwecke wird die parallele GEMM-Berechnung 490 vertikal über die SMs 310(0)-310(3) und horizontal entlang einer Zeitachse 550 anschaulich dargestellt. Die entlang der Zeitachse 550 anschaulich dargestellte GEMM-Ausführungszeit 560 umfasst, ohne darauf beschränkt zu sein, einen Mehraufwand, der dem Starten des Gitters zugeordnet ist, der Zeit von der die erste der CTAs 390 das Ausführen beginnt bis wenn die letzte der CTAs 390 das Ausführen beendet, und einen Mehraufwand, der dem Beenden des Gitters zugeordnet ist. Die CTAs 390(0)-390(3) werden jeweils innerhalb der SMs 310(0)-310(3) anschaulich dargestellt und jeweils mit den CTA-Iterationsbereichen 510(0)-510(3) annotiert. Die Kacheliterationen, die den Ausgabekacheln 442(0), 442(2), 442(4), 442(6) und 442(8) zugeordnet sind, werden über schattierte gestrichelte Kästchen anschaulich dargestellt. Die den Ausgabekacheln 442(1), 442(3), 442(5) und 442(7) zugeordnete Kacheliterationen werden über nicht schattierte gestrichelte Kästchen anschaulich dargestellt.
  • Wie gezeigt, führt die CTA 390(0) die MAC-Iterationen 0-8 aus, die den Kacheliterationen 0-0, 0-1, 0-2 und 0-3 der Ausgabekachel 442(0), den Kacheliterationen 1-0, 1-1, 1-2 und 1-3 der Ausgabekachel 442(1) und der Kacheliteration 2-0 der Ausgabekachel 442(2) entsprechen. In einigen Ausführungsformen erzeugt, weil die CTA 390(0) alle Kacheliterationen der Ausgabekachel 442(0) ausführt, die CTA 390(0) die Ausgabekachel 442(0) nach Ausführen der Kacheliteration 0-3. Auf ähnliche Weise erzeugt, weil die CTA 390(0) alle Kacheliterationen der Ausgabekachel 442(1) erzeugt, die CTA 390(0) die Ausgabekachel 442(1) nach Ausführen der Kacheliteration 1-3.
  • Im Gegensatz dazu führt, weil die CTA 390(0) die Kacheliteration 2-1 der Ausgabekachel 442(2) jedoch nicht die Kacheliteration 2-3 der Ausgabekachel 442(2) ausführt, die CTA 390(0) einen Satz von Operationen aus, der in dem GEMM-Kernel 192 spezifiziert und hier als eine Nahtfixierung (seam fixup) 520(0) bezeichnet wird, um die Ausgabekachel 442(2) zu erzeugen. Gemäß der Nahtfixierung 520(0) wartet die CTA 390(0), wie erforderlich, auf die anderen CTAs 390, um das Ausführen der Kacheliterationen 2-1, 2-2 und 2-3 der Ausgabekachel 442(2) zu beenden.
  • Wie gezeigt, führt die CTA 390(1) die MAC-Iterationen 9-11 aus, die den Kacheliterationen 2-1, 2-2 und 2-3 der Ausgabekachel 442(2) entsprechend, bevor die CTA 390(0) die Nahtfixierung 520(0) ausführt. Weil die CTA 390(1) die Kacheliteration 2-0 nicht ausführt, führt die CTA 390(1) einen Satz von Teilsummen aus, die den Kacheliterationen 2-1, 2-2 und 2-3 zugeordnet sind. In einigen Ausführungsformen speichert, um den Satz von Teilsummen auszuführen, die CTA 390(1) den Satz von Teilsummen in einem Speicher, der allen CTAs 390 in dem Gitter zugänglich ist.
  • Weil die CTA 390(1) das Ausführen die Kacheliterationen 2-1, 2-2 und 2-3 beendet, bevor die CTA 390(0) die Nahtfixierung 520(0) ausführt, muss die CTA 390(0) nicht auf die CTA 390(1) warten. Wie gemäß der Nahtfixierung 520(0) wird die CTA 390(0) Carry-In den Satz von Teilsummen, die den Kacheliterationen 2-1, 2-2 und 2-3 zugeordnet sind. In einigen Ausführungsformen liest für den Carry-In des Satzes von Teilsummen, die CTA 390(0) den Satz von Teilsummen aus einem Speicher, der allen CTAs 390 in dem Gitter zugänglich ist. Anschließend akkumuliert die CTA 390(0) den Satz von Teilsummen, der den Kacheliterationen 2-1, 2-2 und 2-3 zugeordnet ist, in einen Satz von Teilsummen, welcher der Kacheliteration 2-0 zugeordnet ist, um Elemente eines Matrixprodukts zu erzeugen, die der Ausgabekachel 442(2) zugeordnet sind. Die CTA 390(0) erzeugt dann die Ausgabekachel 442(2) basierend auf den Elementen des Matrixprodukts. Dann beendet die CTA 390(0) die Ausführung.
  • Nach Ausführen des Carry-Out, der den Kacheliterationen 2-1, 2-2 und 2-3 zugeordnet ist, führt die CTA 390(1) die MAC-Iterationen 12-17 aus, die den 3-0, 3-1, 3-2 und 3-3 Kacheliterationen der Ausgabekachel 442(3) und den Kacheliterationen 4-0 und 4-1 der Ausgabekachel 442(4) entsprechen. Weil die CTA 390(1) alle Kacheliterationen der Ausgabekachel 442(3) ausführt, erzeugt die CTA 390(1) die Ausgabekachel 442(3) nach Ausführen der Kacheliteration 3-3.
  • Im Gegensatz dazu führt, weil die CTA 390(1) die Kacheliteration 4-0 der Ausgabekachel 442(4) ausführt, jedoch nicht die Kacheliteration 4-3 der Ausgabekachel 442(4) ausführt, die CTA 390(1) einen Satz von Operationen aus, die in dem GEMM-Kernel 192 spezifiziert sind und hier als eine Nahtfixierung 520(1) bezeichnet werden, um die Ausgabekachel 442(4) zu erzeugen. Gemäß der Nahtfixierung 520(1) wartet die CTA 390(1) wie erforderlich auf die anderen CTAs 390, um das Ausführen der Kacheliterationen 4-2 und 4-3 der Ausgabekachel 442(4) zu beenden.
  • Wie gezeigt, führt die CTA 390(2) die MAC-Iterationen 18-19 aus, die den Kacheliterationen 4-2 und 4-3 der Ausgabekachel 442(4) entsprechen, bevor die CTA 390(1) die Nahtfixierung 520(1) ausführt. Weil die CTA 390(2) die Kacheliteration 4-0 nicht ausführt, führt die CTA 390(2) einen Satz von Teilsummen aus, die den Kacheliterationen 4-2 und 4-3 der Ausgabekachel 442(4) zugeordnet sind.
  • Weil die CTA 390(2) das Ausführen der Kacheliterationen 4-2 und 4-3 der Ausgabekachel 442(4) beendet, bevor die CTA 390(1) die Nahtfixierung 520(1) ausführt, muss die CTA 390(1) nicht auf die CTA 390(2) warten. Gemäß der Nahtfixierung 520(1) wird die CTA 390(1) den Satz von Teilsummen Carry-In, der den Kacheliterationen 4-2 und 4-3 zugeordnet ist. Anschließend akkumuliert die CTA 390(1) den Satz von Teilsummen, der den Kacheliterationen 4-2 und 4-3 zugeordnet ist, in einen Satz von Teilsummen, der den Kacheliterationen 4-0 und 4-1 zugeordnet ist, um die Elemente des Matrixprodukts zu erzeugen, die der Ausgabekachel 442(4) zugeordnet sind. Die CTA 390(1) erzeugt die Ausgabekachel 442(4) basierend auf den Elementen des Matrixprodukts. Dann endet die CTA 390(1) die Ausführung.
  • Nach Durchführen des den Kacheliterationen 4-2 und 4-3 der Ausgabekachel 442(4) durchgeführten Carry-Out, führt die CTA 390(2) die MAC-Iterationen 20-26 aus, die den Kacheliterationen 5-0, 5-1, 5-2 und 5-3 der Ausgabekachel 442(5) und den Kacheliterationen 6-0, 6-1 und 6-2 der Ausgabekachel 442(6) entsprechen. Weil die CTA 390(2) alle Kacheliterationen der Ausgabekachel 442(5) ausführt, erzeugt die CTA 390(2) die Ausgabekachel 442(5) nach Ausführen der Kacheliteration 5-3.
  • Im Gegensatz dazu führt, weil die CTA 390(2) die Kacheliteration 6-0 der Ausgabekachel 442(6) ausführt, jedoch nicht die Kacheliteration 6-3 der Ausgabekachel 442(6) ausführt, die CTA 390(2) einen Satz von Operationen aus, spezifizierte in den GEMM-Kernel 192 und hier als eine Nahtfixierung 520(2) bezeichnet werden, um die Ausgabekachel 442(6) zu erzeugen. Gemäß der Nahtfixierung 520(2) wartet die CTA 390(2) wie erforderlich auf die anderen CTAs 390, um das Ausführen der Kacheliteration 6-3 der Ausgabekachel 442(6) zu beenden.
  • Wie gezeigt, führt die CTA 390(3) die MAC-Iteration 27 aus, die der Kacheliteration 6-3 der Ausgabekachel 442(6) entspricht, bevor die CTA 390(2) die Nahtfixierung 520(2) ausführt. Weil die CTA 390(3) die Kacheliteration 6-0 nicht ausführt, führt die CTA 390(3) einen Satz von Teilsummen aus, welcher der Kacheliteration 6-3 der Ausgabekachel 442(6) zugeordnet ist.
  • Weil die CTA 390(3) das Ausführen der Kacheliteration 6-3 der Ausgabekachel 442(6) beendet, bevor die CTA 390(2) die Nahtfixierung 520(2) ausführt, muss die CTA 390(2) nicht auf die CTA 390(3) warten. Gemäß der Nahtfixierung 520(2) führt die CTA 390(2) Carry-In des Satzes von Teilsummen aus, die der Kacheliteration 6-3 zugeordnet sind. Anschließend akkumuliert die CTA 390(2) den Satz von Teilsummen, welcher der Kacheliteration 6-3 zugeordnet ist, in einen Satz von Teilsummen, welcher der Kacheliterationen 6-0, 6-1 und 6-2 zugeordnet ist, um Elemente des Matrixprodukts zu erzeugen, die der Ausgabekachel 442(6) zugeordnet sind. Die CTA 390(2) erzeugt die Ausgabekachel 442(6) basierend auf den Elementen des Matrixprodukts. Dann endet die CTA 390(2) die Ausführung.
  • Nach Durchführen des der Kacheliteration 6-3 der Ausgabekachel 442(6) zugeordneten Carry-Out, führt die CTA 390(3) die MAC-Iterationen 28-35 aus, die den Kacheliterationen 7-0, 7-1, 7-2 und 7-3 der Ausgabekachel 442(7) und den Kacheliterationen 8-0, 8-1, 8-2 und 8-3 der Ausgabekachel 442(8) entsprechen. Weil die CTA 390(3) alle Kacheliterationen der Ausgabekachel 442(7) ausführt, erzeugt die CTA 390(3) die Ausgabekachel 442(7) nach Ausführen der Kacheliteration 7-3. Weil die CTA 390(3) alle Kacheliterationen der Ausgabekachel 442(8) ausführt, erzeugt die CTA 390(3) die Ausgabekachel 442(8) nach Ausführen der Kacheliteration 8-3. Dann endet die CTA 390(3) die Ausführung.
  • Wie in 5 veranschaulicht werden, wenn der Zerlegungstyp 478 gleich STK ist, die MAC-Iterationen angemessen zwischen den CTAs 390 geteilt, und die CTAs 390 werden gleichmäßig zwischen den SMs 310 ungeachtet der Kachelgröße 412 und der GEMM-Charakteristiken geteilt. Des Weiteren ist in einigen Ausführungsformen die Gesamtzahl von Nahtfixierungen 520 kleiner als die Gesamtzahl von CTAs 390, keine der CTAs 390 muss auf eine beliebige der anderen CTAs 390 warten, und die Kachelkoordinationsoperationen sind ein relativ kleiner Prozentsatz der GEMM-Ausführungszeit 560. Durch Definieren einer MAC-Iteration, so dass die Gesamtzahl der in jeder MAC-Iteration umfassten MAC-Operationen erheblich kleiner als die Gesamtzahl von MAC-Operationen ist, die erforderlich sind, um jede Ausgabekachel 442 zu berechnen, kann jede Mehrkernprozessor-Unterbeanspruchung, die dem Berechnen der GEMM zugeordnet ist, in Bezug auf vorbekannte kachelbasierte parallele Zerlegungstechniken verringert werden. Genauer gesagt kann jede Prozessor-Unterbeanspruchung, die dem Berechnen einer gegebenen GEMM auf der PPU 202 zugeordnet ist, in Bezug auf herkömmliche kachelbasierte parallele Zerlegungsvorgehensweisen verringert werden.
  • Bemerkenswerterweise werden die hier offenbarten Iterations-basierten parallelen Zerlegungstechniken wirksam in unterschiedliche Formen der Ausgabematrix 440 skaliert. Beispielsweise weisen in einigen Ausführungsformen die GEMM, die über den GEMM-Funktionsaufruf 410 spezifiziert ist, eine „kleine Ausgabe“ Form auf, bei der die Dimensionen m und n erheblich kleiner als die Dimension k ist, die Gesamtzahl von Ausgabekacheln 442 eins ist und die MAC-Iterationen pro Kachel 454 vier Mal größer als die MAC-Iterationen pro CTA sind. In derartigen Ausführungsformen führen die in 5 veranschaulichten SMs 310(0)-310(3) jeweils ein Viertel der MAC-Iterationen für die Ausgabekachel 442(0) aus. Demgemäß ist die hier offenbarte Iterations-basierte parallele Zerlegung nahezu 100% der Prozessornutzung zugeordnet. Im Gegensatz dazu würde eine herkömmliche DP-Vorgehensweise, bei der ein einziger SM 310 die Ausgabekachel 442(0) erzeugt, höchstens eine 25% Prozessornutzung zugeordnet sein.
  • Bemerkenswerterweise kann, wie in 5 veranschaulicht, der GEMM-Kernel 192 die Kachelgröße 412 implementieren, die für die PPU 202 optimiert ist, ohne dabei negativen Einfluss auf die Verteilung der MAC-Iterationen, die in einer GEMM zugeordnet sind, über die SMs 310 zu nehmen. Allgemeiner kann jeder MAC-Berechnungskernel die Kachelgröße 412 implementieren, die für einen gegebenen Mehrkernprozessor optimiert ist, ohne sich negative auf die Verteilung der MAC-Iterationen, die einer MAC-Berechnung zugeordnet sind, über Verarbeitungskerne auszuwirken. Folglich können Verschlechterungen im Rechendurchsatz und Latenzzeiten, die sich aus suboptimaler Kachelgrößenauswahl ergeben, verringert werden.
  • 6 ist eine beispielhafte Veranschaulichung eines GEMM-Kernel-Pseudocodes 610 für den GEMM-Kernel 192 von 4 gemäß verschiedener Ausführungsformen. Lediglich für erläuternde Zwecke wird der GEMM-Kernel-Pseudocode 610 im Kontext des Kernelaufrufs 488 beschrieben, der dem Zerlegungstyp 478 von STK mit einem Gitter entspricht, das die CTAs 390(0)-390(3) umfasst, ohne darauf beschränkt zu sein. In einigen anderen Ausführungsformen kann eine beliebige Anzahl von Instanzen des Kernelaufrufs 488 durch beliebige Typen eines Rechensystems ausgeführt werden, das mehrere Parallelverarbeitungselementen in einer beliebigen Hierarchieebene (z.B., der CPU 102, der PPU 202 usw.) basierend auf einer beliebigen Startkonfiguration und einer beliebigen Anzahl und/oder Typen von Argumenten umfasst.
  • Wie gezeigt umfasst in einigen Ausführungsformen, ohne darauf beschränkt zu sein, der GEMM-Kernel-Pseudocode 610 eine Kerneldeklaration 620, einen Initialisierungspseudocode 622 und eine Iterations-basierte Verarbeitungsschleife 630. Die Kerneldeklaration 620 umfasst, ohne darauf beschränkt zu sein, einen „_global_“ Bezeichner, der angibt, das der GEMM-Kernel-Pseudocode 610 eine Definition eines Kernels ist. Genauer gesagt spezifiziert die Kerneldeklaration 620, dass der GEMM-Kernel-Pseudocode 610 den GEMM-Kernel 192 definiert, der als „GemmKernel“ bezeichnet wird.
  • Die Initialisierungspseudocode 622 wird von jeder der CTAs 390 in die Gitter ausgeführt, der über den Kernelaufruf 488 spezifiziert ist, ohne darauf beschränkt zu sein, den CTA-Iterationsbereich 510 für die CTA 390 zu bestimmen. In einigen Ausführungsformen initialisiert jede CTA 390 eine CTA-Iteration („cta_itr“) in einer ersten CTA-Iteration und bestimmt eine letzte CTA-Iteration („cta_last_itr“) basierend auf der zugeordneten CTA ID, der Gittergröße 482 und dem MAC-Iterationszählwert 456. Unter Rückbezug auf 4 entspricht für jede CTA 390 der CTA-Iterationsbereich 510 der ersten CTA-Iteration bis zu der letzten CTA-Iteration.
  • In einigen anderen Ausführungsformen können die Argumente des GEMM-Kernels 192 variieren und der Initialisierungspseudocode 622 variiert demgemäß. Beispielsweise umfassen in einigen Ausführungsformen die Argumente des GEMM-Kernels 192 eine MAC-Iterationen pro CTA anstatt dem MAC-Iterationszählwert 456 und jede CTA 390 berechnet eine zugeordnete erste CTA-Iteration basierend auf der zugeordneten CTA ID, der Gittergröße 482 und der MAC-Iterationen pro CTA. Jede CTA 390 setzt dann die letzte CTA-Iteration gleich (erste CTA-Iteration + MAC-Iterationen pro CTA - 1).
  • Die Iterations-basierte Verarbeitungsschleife 630 ist eine Arbeitsverarbeitungsschleife, die durch jede der CTAs 390 in dem Gitter ausgeführt wird, die über den Kernelaufruf 488 spezifiziert wird. In einigen Ausführungsformen führen die CTAs 390 die Iterations-basierte Verarbeitungsschleife 630 mindestens teilweise parallel aus. Unter Rückbezug auf 5 führen die CTAs 390(0)-390(3) die Iterations-basierte Verarbeitungsschleife 630 jeweils basierend auf CTA-Iterationsbereichen 510(0)-510(3), jeweils von 0-8, 9-17, 18-26 und 27-35 aus. Die Iterations-basierte Verarbeitungsschleife 630 umfasst, ohne darauf beschränkt zu sein, eine kachelbasierte GEMM-Schleife 640, einen Carry-Out-Pseudocode 650, einen Nahtfixierungs-Pseudocode 660 und einen Epilogpseudocode 670.
  • Da jede CTA 390 die Iterations-basierte Verarbeitungsschleife 630 ausführt, führt die CTA 390 die kachelbasierte GEMM-Schleife 640 für jede der Ausgabekachel 442 zugeordneten MAC-Iterationen durch, die mindestens teilweise den CTA-Iterationsbereich 510 der CTA 390 überlappen. Genauer gesagt führt jede CTA 390 die kachelbasierte GEMM-Schleife 640 aus, um Akkumulatoren (nicht gezeigt) für den überlappenden Abschnitt (falls vorhanden) zu erzeugen, der den jeder Ausgabekachel 442 zugeordneten MAC-Iterationen. Für jede Ausgabekachel 442, die MAC-Iterationen zugeordnet ist, die zwei oder mehr der CTA-Iterationsbereiche 510 überspannen, sind die Akkumulatoren ein Satz von Teilsummen für die Elemente des der Ausgabekachel 442 zugeordneten Matrixprodukts. Für den Rest der Ausgabekacheln 442 sind die Akkumulatoren die Elemente des der Ausgabekachel 442 zugeordneten akkumulierten Matrixprodukts.
  • Unter Rückbezug auf 5 führt die CTA 390(1) beispielsweise die kachelbasierte GEMM-Schleife 640 aus, um die Elemente des akkumulierten Matrixprodukts zu berechnen, die der Ausgabekachel 442(0) zugeordnet sind, führt die kachelbasierte GEMM-Schleife 640 erneut aus, um die Elemente des akkumulierten Matrixprodukts zu berechnen, die der Ausgabekachel 442(1) zugeordnet sind, und führt die kachelbasierte GEMM-Schleife 640 erneut aus, um einen Satz von Teilsummen für die Elemente des Matrixprodukt zu erzeugen, die der Ausgabekachel 442(2) zugeordnet sind.
  • Die CTAs 390 können die kachelbasierte GEMM-Schleife 640 in einer beliebigen technisch machbaren Art und Weise ausführen. Wie in einigen Ausführungsformen gezeigt, ist die kachelbasierte GEMM-Schleife 640 in einer kachelbasierten GEMM-Funktion verkapselt, die mit „gemm_Kachel“ bezeichnet wird, und die CTAs 390 rufen die kachelbasierte GEMM-Funktion auf, um die kachelbasierte GEMM-Schleife 640 auszuführen. Die kachelbasierte GEMM-Funktion erzeugt mit „accum“ bezeichnete Akkumulatoren (nicht gezeigt), basierend auf einer Ausgabekachel ID, einer startenden Kacheliteration, die der CTA 390 zugeordnet ist, und eine stoppende Kacheliteration, die der CTA 390 zugeordnet ist. In einigen Ausführungsformen werden die Akkumulatorelemente im Register der teilnehmenden Threads gehalten. In der gleichen oder anderen Ausführungsformen sind die startende Kacheliteration und die stoppende Kacheliterationen mit Bezug auf Schritten in dem Akkumulationsmaß spezifiziert. Wenn jede der Ausgabekacheln 442 beispielsweise einem unterschiedlichen Satz von vier MAC-Iterationen zugeordnet ist, dann sind die startenden Kacheliterationen und die endenden Kacheliterationen ganze Zahlen zwischen 0 und 3, die eine Gesamtzahl von Schritten von k=0 in dem Akkumulationsmaß spezifizieren.
  • Während der kachelbasierten GEMM-Schleife 640 führen die Threads der CTA 390 eine beliebigen Anzahl und/oder Typen von MAC-Operationen aus, um die spezifizierten Iterationen für die Ausgabekachel 442 zu bewirken. Beispielsweise führt in einigen Ausführungsformen jeder Thread der CTA 390 eine oder mehrere fusionierte MAC-Operationen an Fragmenten der Eingabematrix 430(0), Fragmenten der Eingabematrix 430(1) und einer beliebigen Anzahl der Akkumulatoren aus, die im Register gehalten werden. Eine fusionierte MAC-Operation ist eine Gleitkomma-MAC-Operation, die in einem Schritt mit einem einzigen Runden durchgeführt wird. In der gleichen oder anderen Ausführungsformen kann die kachelbasierte GEMM-Schleife 640 eine beliebige Anzahl und/oder Typen von Blockierstrategien, eine beliebige Anzahl und/oder Typen von Kachelstrategien und eine beliebige Anzahl und/oder Typen von anderen Strategien implementieren, um eine beliebige Anzahl und/oder Typen von Zielen zu erreichen. Insbesondere implementiert in einigen Ausführungsformen die kachelbasierte GEMM-Schleife 640 eine beliebigen Anzahl und/oder Typen von Strategien, um eine gemeinsame Datennutzung und Wiederverwendung zu steigern.
  • Nachdem die CTA 390(x), wobei x eine ganze Zahl von 0 bis 3 ist, die der Ausgabekachel 442(y) zugeordnete kachelbasierte GEMM-Schleife 640 ausführt, wobei y eine ganze Zahl von 0 bis 8 ist, führt die CTA 390(x) den Carry-Out-Pseudocode 650, den Nahtfixierung -Pseudocode 660 gefolgt von dem Epilogpseudocode 670 oder dem Epilogpseudocode 670 aus. Wenn der CTA-Iterationsbereich 510(x) nicht die anfängliche Kacheliteration y-0 umfasst, die der Ausgabekachel 442(y) zugeordnet ist, dann führt die CTA 390(x) die Carry-Out Pseudocode 650 aus. Wenn der CTA-Iterationsbereich 510(x) jedoch die anfängliche Kacheliteration y-0 umfasst, die der Ausgabekachel 442(y) zugeordnet ist, und die letzte Kacheliteration (z.B., y-3), die der Ausgabekachel 442(y) zugeordnet ist, nicht umfasst, dann führt die CTA 390(x) den Nahtfixierungs-Pseudocode 660 gefolgt von dem Epilogpseudocode 670 aus. Wenn der CTA-Iterationsbereich 510(x) sämtliche MAC-Iterationen umfasst, die der Ausgabekachel 442(y) zugeordnet sind, dann führt die CTA 390(x) den Epilogpseudocode 670 aus.
  • In einigen Ausführungsformen speichert dann, wenn die CTA 390(x) den Carry-Out-Pseudocode 650 ausführt, die CTA 390(x) die Akkumulatoren in einem Speicher, der für alle CTAs 390 in dem Gitter zugänglich ist. Wie hier zuvor beschrieben, weil die Ausgabekachel 442(y) MAC-Iterationen zugeordnet ist, die zwei oder mehr der CTA-Iterationsbereiche 510 überspannen, sind die Akkumulatoren ein Satz von Teilsummen. Als Teil der Ausführung des Carry-Out-Pseudocodes 650 benachrichtigt die CTA 390(x) die anderen CTAs 390, dass die aktuelle MAC-Iteration beendet ist. Die CTA 390(x) kann die anderen CTAs 390, dass die aktuelle MAC-Iteration beendet ist, in einer beliebigen technisch machbaren Art und Weise mitteilen.
  • Wenn die CTA 390(x) jedoch den Nahtfixierungs-Pseudocode 660 ausführt, dann führt die CTA 390(x) eine der in 5 anschaulich dargestellten Nahtfixierungen 520 aus. Wie gezeigt wartet, um die Nahtfixierung 520 in einigen Ausführungsformen durchzuführen, die CTA 390(x) bis die letzte MAC-Iteration, die der Ausgabekachel 442(y) zugeordnet ist, abgeschlossen ist. Die CTA 390(x) akkumuliert dann einen oder mehrere Sätze von Teilsummen für die Ausgabekachel 442(y), die in einem Speicher gespeichert sind, die allen CTAs 390 in dem Gitter zugänglich sind, in den die CTA 390(x) zugeordneten Akkumulatoren. Anschließend führt die CTA 390(x) den Epilogpseudocode 670 aus.
  • Wenn die CTA 390(x) den Epilogpseudocode 670 ausführt, dann erzeugt die CTA 390(x) die Ausgabekachel 442(y). Der Epilogpseudocode 670 kann, ohne darauf beschränkt zu sein, eine beliebige Anzahl und/oder Typen von Operationen spezifizieren, die dem Erzeugen der Ausgabekachel 442(y) zugeordnet sind. In einigen Ausführungsformen spezifiziert der Epilogpseudocode 670, ohne darauf beschränkt zu sein, eine beliebige Anzahl und/oder Typen von Kernelaufrufen (z.B., einen Aufruf in einem Epilogkernel). In der gleichen oder anderen Ausführungsformen spezifiziert der Epilogpseudocode 670, ohne darauf beschränkt zu sein, eine beliebige Anzahl und/oder Typen von elementweisen Operationen, eine beliebige Anzahl von Datentypumwandlungen, eine beliebige Anzahl und/oder Typen von Matrixaktualisierungs-Operationen und eine beliebige Anzahl und/oder Typen von anderen Operationen in einer beliebigen Kombination.
  • Einige Beispiele von elementweisen Operationen sind, ohne darauf beschränkt zu sein, Skalierungsoperationen, Bias-Operationen und Aktivierungsfunktionen. Einige Beispiele von Datentypkonvertierungen sind, ohne darauf beschränkt zu sein, das Konvertieren des Gleitkomma mit einfacher Genauigkeit in Gleitkomma mit halber Genauigkeit, das Konvertieren von 32-bit vorzeichenbehaftete ganze Zahlen in 8-bit vorzeichenbehaftete ganze Zahlen und das Packen von Akkumulatoren in Registern. Einige Beispiele von Matrixaktualisierungsoperationen sind, ohne darauf beschränkt zu sein, Leseoperationen, Schreiboperationen und Lese-Modifizier-Schreib-Operationen.
  • Beispielsweise sind in einigen Ausführungsformen die Akkumulatoren der Elemente des Abschnitts des akkumulierten Matrixprodukts AB, die zugeordneten der Ausgabekachel 442 zugeordnet sind. Im Gegensatz dazu ist die in dem GEMM-Funktionsaufruf 410 spezifizierte GEMM gleich C = αAB + βC. Demgemäß führt die CTA 390(x) den Epilogpseudocode 670, Skalierungsoperationen, Akkumulierungsoperationen und Lese-Modifizier-Schreib-Operationen durch, um die Ausgabekachel 442(y) zu aktualisieren, die in dem globalen Speicher gespeichert ist.
  • Wie zuvor hier beschrieben, ist die PPU 202 ein beispielhafter Mehrkernprozessor und die SMs 310 sind beispielhafte Verarbeiterkerne, die in dem Mehrkernprozessor umfasst sind. Des Weiteren sind die CTAs 390 beispielhafte Thread-Gruppen, die über den Mehrkernprozessor über eine virtualisierte parallele Laufzeit verschickt werden, die dem Parallelverarbeitungs-Teilsystem 112 zugeordnet ist. In einigen anderen Ausführungsformen können die Techniken, die zuvor hier in Verbindung mit 1-6 und im Kontext der PPU 202, der SMs 310 und den CTAs 390 beschrieben sind, in einem beliebigen Typ von Mehrkernprozessor implementiert werden, der mindestens zwei Prozessorkerne von einem beliebigen Typ umfasst, um einen beliebigen Typ von MAC-Berechnung über einen beliebigen Typ von paralleler Laufzeit durchzuführen.
  • 7 ist ein Ablaufdiagramm von Verfahrensschritten zum Berechnen einer GEMM auf einem Mehrkernprozessor gemäß verschiedener Ausführungsformen. Genauer gesagt wird das Ablaufdiagramm von 7 im Kontext des Durchführens einer GEMM auf einem Mehrkernprozessor über eine virtualisierte parallele Laufzeit anschaulich dargestellt und beschrieben. Obwohl die Verfahrensschritte im Kontext der Systeme von 1-6 beschrieben sind, werden Fachleute verstehen, dass jedes beliebige System, das konfiguriert ist, die Verfahrensschritten in einer beliebigen Reihenfolge zu implementieren, innerhalb des Umfangs der vorliegenden Erfindung fällt.
  • Wie gezeigt, beginnt ein Verfahren 700 bei Schritt 702, wobei die Dispatch-Anwendung 180 den GEMM-Kernel 192 basierend auf null oder mehr GEMM-Charakteristiken einer gegebenen GEMM bestimmt. Bei Schritt 704 partitioniert die Dispatch-Anwendung 180 die Ausgabematrix 440 in Ausgabekacheln 442 basierend auf der Kachelgröße 412 und stellt den Ausgabekachelzählwert 452 gleich der Gesamtzahl von Ausgabekacheln 442 ein. Bei Schritt 706 bestimmt die Dispatch-Anwendung 180 die MAC-Iterationen pro Kachel 454 basierend auf der Definition einer MAC-Iteration und der Kachelgröße 412. Bei Schritt 708 setzt die Dispatch-Anwendung 180 den MAC-Iterationszählwert 456 gleich dem Produkt des Ausgabekachelzählwert 452 und der MAC-Iterationen pro Kachel 454.
  • Bei Schritt 710 stellt die Dispatch-Anwendung 180 die Gittergröße 482 gleich der maximalen Anzahl von Thread-Gruppen ein, die gleichzeitig auf den Parallelverarbeitungselementen ausgeführt werden können. Bei Schritt 712 ruft die Dispatch-Anwendung 180 den GEMM-Kernel 192 für die Thread-Gruppenkonfiguration und die Gittergröße 482 basierend auf mindestens dem MAC-Iterationszählwert 456, der Eingabematrix 430(0), der Eingabematrix 430(1) und der Ausgabematrix 440 auf.
  • Bei Schritt 714 veranlasst der Kernelaufruf 488, dass eine gleichmäßige gemeinsame Nutzung der Thread-Gruppen-Instanzen des GEMM-Kernels 192 auf jedem der Prozessorkerne geplant wird. Bei Schritt 716 führt, wie geplant, jede Thread-Gruppe eine angemessene Anzahl der MAC-Iterationen, null oder mehr Koordinationsoperationen, null oder mehr elementweise Operationen und null oder mehr Ausgabekachel-Schreiboperationen aus. Wenn die letzte der Thread-Gruppen das Ausführen beendet, spezifiziert die Ausgabematrix 440 das Ergebnis der GEMM. Das Verfahren 700 endet dann.
  • Iterations-basierte parallele Zerlegungsstrategie für MAC-Berechnungen
  • Wie hier zuvor bemerkt, kann die in Verbindung mit 1-7 beschriebene Iterations-basierte parallele Zerlegungsstrategie zur Implementierung in einem beliebigen Typ von Rechensystem verallgemeinert werden, die, ohne darauf beschränkt zu sein, mehrere Parallelverarbeitungselemente umfasst, um eine beliebige Anzahl und/oder Typen von MAC-Berechnungen durchzuführen. Insbesondere kann die Iterations-basierte parallele Zerlegungsstrategie in Rechensystemen von variierendem Umfang implementiert werden.
  • Beispielsweise ist in einigen Ausführungsformen das Rechensystem ein einziger Prozessorkern und die Parallelverarbeitungselemente sind parallele Logikeinheiten. In einigen anderen Ausführungsformen ist das Rechensystem ein Computerknoten und die Parallelverarbeitungselemente sind parallele Prozessoren. In noch anderen Ausführungsformen ist das Rechensystem ein verteiltes Computersystem und die Parallelverarbeitungselemente sind parallele Computerknoten. In einigen Ausführungsformen kann die parallele Zerlegungsstrategie in mehreren hierarchischen Ebenen innerhalb eines hierarchischen Rechensystems implementiert sein.
  • In einigen Ausführungsformen werden MAC-Operationen, die einer gegebenen MAC-Berechnung zugeordnet sind, über Aufgaben parallelisiert, wobei jede Aufgabe eine Programminstanz ist, die auf einem der Parallelverarbeitungselemente zu planen ist. Die Aufgaben können auf den Parallelverarbeitungselementen in einer beliebigen technisch machbaren Art und Weise geplant werden. In einigen Ausführungsformen plant ein beliebiger Typ von nicht virtualisierten parallelen Laufzeit die Aufgaben auf den Parallelverarbeitungselementen und die Parallelverarbeitungselemente führen das Programm direkt aus.
  • In einigen anderen Ausführungsformen ist jede der Aufgaben einem von mehreren virtuellen Verarbeitungselementen zugeordnet und kann in einer beliebigen technisch machbaren Art und Weise gestartet (z.B., gegabelt, verschickt usw.) werden. Ein beliebiger Typ von virtualisierter paralleler Laufzeit plant die gestarteten Aufgaben auf den Parallelverarbeitungselementen und die virtuellen Verarbeitungselemente führen das Programm auf den Parallelverarbeitungselementen aus. Bemerkenswerterweise kann in einigen Ausführungsformen jedem virtuellen Verarbeitungselement ein beliebiges Ausmaß an Parallelismus zugeordnet sein.
  • Beispielsweise ist in einigen Ausführungsformen jedes virtuelle Verarbeitungselement eine Thread-Gruppe, wobei jede Thread-Gruppe ein einziger Thread, eine eindimensionale Anordnung von Threads oder ein mehrdimensionaler Block von Threads sein kann. In den gleichen oder anderen Ausführungsformen ist jede Aufgabe eine Thread-Gruppen-Instanz eines Kernelprogramms. In einigen anderen Ausführungsformen ist jede Aufgabe eine Anweisungssequenz eines einzelnen Threads, der auf einem Prozessorkern geplant ist. In noch anderen Ausführungsformen ist jede Aufgabe ist ein Betriebssystembild, das auf einem Knoten geplant ist.
  • Wie zuvor hier im Kontext von Mehrkernprozessoren und GEMMs beschrieben, sind einige herkömmliche parallele Zerlegungsstrategien kachelbasiert. Die Ausgabe einer gegebenen MAC-Berechnung wird in Kacheln basierend auf einer Kachelgröße partitioniert, wobei jede Kachel ein unterschiedlicher diskreter Abschnitt der Ausgabe ist. Jede Aufgabe wird dann konfiguriert, um eine oder mehrere vollständige Kacheln zu erzeugen, und daher ist die unteilbare Einheit der Arbeit eine Kachel. Im Allgemeinen können herkömmliche kachelbasierte parallele Zerlegungsstrategien aus systemweiter Unterbeanspruchung aufgrund der Quantisierung von ganzen Kacheln über Parallelverarbeitungselemente leiden. Beispielsweise erzeugt in einigen Ausführungsformen das Rechensystem die Kacheln in Wellen, und wenn die Gesamtzahl von Kacheln kein ganzzahliges Vielfaches der Gesamtzahl von Parallelverarbeitungselemente ist, belegt die letzte Welle der Kachelerzeugung nicht sämtliche Parallelverarbeitungselemente.
  • Im Gegensatz dazu ist in der Iterations-basierten parallelen Zerlegungsstrategie für MAC-Berechnungen die unteilbare Einheit der Arbeit eine MAC-Iteration und die MAC-Iterationen werden über die Parallelverarbeitungselemente möglichst gleich verteilt. In einigen Ausführungsformen führt dann für jede Ausgabekachel 442, wenn die der Ausgabekachel 442 zugeordneten MAC-Iterationen zwischen mehreren Parallelverarbeitungselemente aufgeteilt werden, jede der Parallelverarbeitungselemente eine beliebigen Anzahl (einschließlich null) und/oder Typen von Koordinationsoperationen (z.B., Synchronisierung, Kommunikation usw.) aus, um die Ausgabekachel 442 zu erzeugen.
  • In einigen anderen Ausführungsformen führt dann für jede Ausgabekachel 442, wenn die der Ausgabekachel 442 zugeordneten MAC-Iterationen zwischen mehreren virtuellen Verarbeitungselementen aufgeteilt sind, jede der virtuellen Verarbeitungselemente eine beliebigen Anzahl (einschließlich null) und/oder Typen von Koordinationsoperationen aus (z.B., Synchronisierung, Kommunikation usw.), um die Ausgabekachel 442 zu erzeugen. Beispielsweise sind in der in 5 anschaulich dargestellten Ausführungsform die CTAs 390 virtuelle Verarbeitungselemente, die Carry-ins, Carry-Outs und die Nahtfixierungen 520(0)-520(2) ausführen, um die Ausgabekacheln 442(2), 442(4) und 442(6) zu erzeugen.
  • Eine beliebige Anzahl und/oder Typen von Programmen kann die Iterations-basierte parallele Zerlegungsstrategie in einer beliebigen technisch machbaren Art und Weise implementieren. Des Weiteren können die Programme auf den Parallelverarbeitungselementen, einer beliebigen Anzahl und/oder Typen von anderen Verarbeitungselemente (z.B., der CPU 102) oder irgendeiner Kombination davon ausgeführt werden. Beispielsweise wird in einigen Ausführungsformen eine Softwareanwendung (z.B., die Dispatch-Anwendung 180) auf einem Verarbeitungselement ausgeführt, das extern zu dem Rechensystem ist, das die Parallelverarbeitungselemente umfasst.
  • In einigen Ausführungsformen partitioniert die Softwareanwendung die Ausgabe einer gegebenen MAC-Berechnung in Ausgabekacheln 442 basierend auf der Kachelgröße 412 und stellt den Ausgabekachelzählwert 452 gleich der Gesamtzahl von Ausgabekacheln 442 ein. Die Softwareanwendung bestimmt die MAC-Iterationen pro Kachel 454 basierend auf der Definition einer MAC-Iteration und der Kachelgröße 412. Anschließend stellt die Softwareanwendung den MAC-Iterationszählwert 456 gleich dem Produkt des Ausgabekachelzählwerts 452 und der MAC-Iterationen pro Kachel 454 ein.
  • Die Softwareanwendung stellt einen Aufgabenzählwert gleich der maximalen Anzahl von Aufgaben ein, die gleichlaufend über die Parallelverarbeitungselementen ausgeführt werden können, die in einem gegebenen Berechnungssystem umfasst sind. Für eine Gesamtzahl von Ausgabenzählwerten konfiguriert die Softwareanwendung jede Aufgabe, so dass die Aufgabe für eine angemessene Anzahl der MAC-Iterationen, null oder mehr Koordinationsoperationen, null oder mehr elementweise Operationen und null oder mehr Schreib-Operationen zu null oder mehr Ausgabekacheln verantwortlich ist.
  • Die Softwareanwendung veranlasst dann, dass die Aufgaben gleichlaufend über den Satz von Parallelverarbeitungselementen ausgeführt werden, um die MAC-Berechnung durchzuführen. Die Softwareanwendung kann veranlassen, dass die auszuführenden Aufgaben gleichlaufend über den Satz von Parallelverarbeitungselementen in einer beliebigen technisch machbaren Art und Weise ausgeführt werden. In einigen Ausführungsformen plant die Softwareanwendung über eine virtualisierte parallele Laufzeit oder eine nicht virtualisierte parallele Laufzeit einen gleichen Anteil der Aufgaben auf jedem Parallelverarbeitungselement, das in dem Satz von Parallelverarbeitungselementen umfasst ist.
  • Genauer gesagt sind in einigen Ausführungsformen die Aufgaben virtuellen Verarbeitungselemente zugeordnet und die Softwareanwendung konfiguriert eine virtualisierte parallele Laufzeit, um einen gleichen Anteil der Aufgaben indirekt auf jedem der Parallelverarbeitungselemente zu planen. Beispielsweise startet in einigen Ausführungsformen die Softwareanwendung ein Programm, das der MAC-Berechnung zugeordnet ist, über eine Anzahl von Thread-Gruppen, die gleich der maximalen Anzahl von Aufgaben ist, die gleichlaufend über die Parallelverarbeitungselemente ausgeführt werden können. In einigen anderen Ausführungsformen konfiguriert die Softwareanwendung eine nicht virtualisierte parallele Laufzeit, die dem parallelen Rechensystem zugeordnet ist, um einen gleichen Anteil der Aufgaben direkt auf jedem der Parallelverarbeitungselemente zu planen. Wie von der parallelen Laufzeit geplant, werden die Aufgaben auf den Parallelverarbeitungselementen ausgeführt, um die MAC-Berechnung zusammen und gleichlaufend durchzuführen und die Ergebnisse in den Ausgabekacheln 442 zu speichern.
  • Vorteilhafterweise kann eine MAC-Iteration definiert sein, so dass die Anzahl von MAC-Operationen, die in jeder MAC-Iteration umfasst sind, erheblich kleiner als die Anzahl von MAC-Operationen ist, die erforderlich ist, um jede der Ausgabekacheln 442 zu erzeugen. Als Ergebnis kann in Bezug auf herkömmliche kachelbasierte parallele Zerlegungstechniken jede beliebigen systemweite Unterbeanspruchung, die der Quantisierung von MAC-Iterationen über die Parallelverarbeitungselemente zuzurechnen ist, ein kleinerer Prozentsatz der Ausführungszeit sein, die einer gegebenen MAC-Berechnung zugeordnet ist.
  • 8 ist ein Ablaufdiagramm von Verfahrensschritten zum Durchführen einer MAC-Berechnung auf eine Rechensystem, das mehrere Parallelverarbeitungselemente umfasst, gemäß verschiedener Ausführungsformen. Obwohl die Verfahrensschritten im Kontext der Systeme von 1-6 beschriebenen sind, werden Fachleute verstehen, dass ein beliebiges System, das konfiguriert ist, die Verfahrensschritten in einer beliebigen Reihenfolge zu implementieren, innerhalb des Umfangs der vorliegenden Erfindung fällt. In dieser Hinsicht kann die nachstehend beschriebene Funktionalität über eine beliebige Anzahl und/oder Typen von Programmen, die auf einer beliebigen Anzahl und/oder Typen von Parallelverarbeitungselementen ausgeführt werden, in einer beliebigen technisch machbaren Art und Weise verteilt werden.
  • Wie gezeigt, beginnt ein Verfahren 800 bei Schritt 802, wobei eine Softwareanwendung die Ausgabe einer MAC-Berechnung in Ausgabekacheln 442 basierend auf der Kachelgröße 412 partitioniert und den Ausgabekachelzählwert 452 gleich der Gesamtzahl von Ausgabekacheln 442 einstellt. Bei Schritt 804 bestimmt die Softwareanwendung die MAC-Iterationen pro Kachel 454 basierend auf der Definition einer MAC-Iteration und der Kachelgröße 412. Bei Schritt 806 stellt die Softwareanwendung den MAC-Iterationszählwert 456 gleich dem Produkt der Ausgabekachelzählwert 452 und der MAC-Iterationen pro Kachel 454 ein.
  • Bei Schritt 808 stellt die Softwareanwendung einen Ausgabenzählwert gleich der maximalen Anzahl von Aufgaben ein, die gleichzeitig auf den Parallelverarbeitungselementen ausgeführt werden können. Bei Schritt 810 konfiguriert die Softwareanwendung eine Gesamtzahl von Ausgabenzählwertaufgaben, so dass jede Aufgabe für eine angemessene Anzahl der MAC-Iterationen, null oder mehr Koordinationsoperationen, null oder mehr elementweise Operationen und null oder mehr Schreib-Operationen auf null oder mehr Ausgabekacheln verantwortlich ist.
  • Bei Schritt 812 veranlasst die Softwareanwendung eine parallele Laufzeit, die dem Rechensystem zugeordnet ist, einen gleichen Anteil der Aufgaben auf jedem der Parallelverarbeitungselemente zu planen. Bei Schritt 814 werden die Aufgaben wie geplant auf den Parallelverarbeitungselementen ausgeführt, um die MAC-Berechnung zusammen durchzuführen und die Ergebnisse in den Ausgabekacheln 442 zu erzeugen. Das Verfahren 800 terminiert dann.
  • Zusammenfassend können die offenbarten Techniken verwendet werden, um die Arbeit, die einer MAC-Berechnung zugeordnet ist, angemessen über Parallelverarbeitungselemente zu teilen, die in einem Rechensystem umfasst sind. Im Allgemeinen ist unter Verwendung der offenbarten Techniken jedes der Parallelverarbeitungselemente konfiguriert, um einen angemessenen Anteil der MAC-Iterationen auszuführen, die erforderlich sind, um die MAC-Berechnung, null oder mehr Kachelkoordinationsoperationen und null oder mehr elementweise Operationen durchzuführen, um null oder mehr Ausgabekacheln zu erzeugen.
  • In einigen Ausführungsformen ist die MAC-Berechnung eine GEMM, die MAC-Operationen sind einem Plus-Multiplizier-Semiring, das Rechensystem ist ein Mehrkernprozessor und die Parallelverarbeitungselementen sind Prozessorkerne. Um die GEMM zu berechnen, partitioniert eine Dispatch-Anwendung die Ausgabematrix in Ausgabekacheln basierend auf einer Kachelgröße. Die Dispatch-Anwendung stellt einen MAC-Iterationszählwert gleich dem Produkt der Gesamtzahl von Ausgabekacheln und den MAC-Iterationen pro Kachel ein. Die Dispatch-Anwendung stellt eine Gittergröße eines Gitter von Thread-Gruppen gleich der dem Mehrkernprozessor zugeordneten maximalen Wellengröße ein. Anschließend startet die Dispatch-Anwendung einen GEMM-Kernel mit einer Ausführungskonfiguration, welche die Dimensionen des Gitters spezifizieren, und jede Thread-Gruppe und Argumente spezifizieren mindestens den MAC-Iterationszählwert, die Eingabe- und Ausgabematrizen und die Auslegung der Eingabe- und Ausgabematrizen.
  • Jede Thread-Gruppe bestimmt einen zugeordneten angemessenen Anteil der MAC-Iterationen basierend auf einer Thread-Gruppenkennung, dem MAC-Iterationszählwert und der Dimensionen des Gitters und führt die zugeordneten MAC-Iterationen aus. Jede Thread-Gruppe kann eine nicht anfängliche passende Teilmenge von höchstens einer Ausgabekachel, einer anfänglich passenden Teilmenge von höchstens einer Ausgabedatei und null oder mehr gesamte Ausgabekacheln berechnen. Wenn eine gegebenen Thread-Gruppe eine nicht anfängliche passende Teilmenge einer gegebenen Ausgabekachel berechnet, dann führt die Thread-Gruppe Carry-Out Operation(en) durch, um Teilsummen in einem Speicher zu erzeugen, der allen Thread-Gruppen in dem Gitter zugänglich ist.
  • Wenn eine gegebenen Thread-Gruppe eine anfängliche ordnungsgemäße Teilmenge einer gegebenen Ausgabekachel berechnet, dann fügt die Thread-Gruppe einen oder mehrere Sätze von Teilsummen hinzu, die der Ausgabekachel zugeordnet sind, und speichert in dem Speicher in einen Satz von Teilsummen, die der anfänglichen ordungsgemäßen Teilmenge zugeordnet sind, um Elemente eines der Ausgabekachel zugeordneten Matrixprodukts zu erzeugen. Wenn eine gegebenen Thread-Gruppe eine anfängliche ordnungsgemäße Teilmenge einer gegebenen Ausgabekachel oder der gesamten Ausgabekachel berechnen, dann führt die Thread-Gruppe ebenfalls eine beliebige Anzahl und/oder Typen von Operationen durch, um die Ausgabekachel basierend auf den der Ausgabekachel zugeordneten Elemente des Matrixprodukts zu erzeugen.
  • Mindestens ein technischer Vorteil der offenbarten Techniken in Bezug auf den Stand der Technik ist, dass mit den offenbarten Techniken die Nutzungsraten eines Rechensystem einschließlich mehrere Parallelverarbeitungselementen beim Durchführen von MAC-Berechnungen erhöht werden kann. In dieser Hinsicht ist mit den offenbarten Techniken die Variation zwischen der Anzahl von Iterationen, die von jeder Parallelverarbeitungselement beim Durchführen einer MAC-Berechnung ausgeführt wird, auf etwa ein begrenzt, und die Zeit, die erforderlich ist, um eine gegebenen Iteration durchzuführen, kann im Wesentlichen kleiner als die Zeit sein, die erforderlich ist, um eine gegebene Ausgabekachel unter Verwendung von Vorgehensweisen des Standes der Technik zu berechnen. Demgemäß können die offenbarten Techniken die Menge der untätigen Parallelverarbeitungselementzeit beim Durchführen von MAC-Berechnungen verringern und den Rechendurchsatz ebenso vergrößern. Außerdem kann im Kontext von Mehrkernprozessoren für jede Kombination von MAC-Berechnungs-Charakteristiken, ein einziges MAC-Berechnungsprogramm implementiert werden, um Iterationen gleichmäßiger über die unterschiedlichen Verarbeitungskernen innerhalb eines Mehrkernprozessor ungeachtet der Kachelgröße zu verteilen. Somit kann die Gesamtzahl von MAC-Berechnungsprogrammen und die aggregierte Menge von Ressourcen, die erforderlich ist, um jene Programme zu erzeugen, zu speichern und zu übertragen, in Bezug auf Vorgehensweisen des Standes der Technik verringert werden. Ferner können, weil jedes MAC-Berechnungsprogramm eine Kachelgröße implementieren kann, die für einen gegebenen Mehrkernprozessor optimiert ist, ohne dabei negativen Einfluss auf die Verteilung von MAC-Berechnungen über die Verarbeitungskerne zu nehmen, Verschlechterungen im Rechendurchsatz und Latenzzeiten, die sich aus suboptimaler Kachelgrößenauswahl ergeben, verringert werden. Diese technischen Vorteile stellen eine oder mehrere technologische Verbesserungen gegenüber Vorgehensweisen des Standes der Technik bereit.
    1. 1. In einigen Ausführungsformen umfasst ein Das computerimplementierte Verfahren zum Durchführen von Multiplizier-Akkumulier-MAC-Berechnungen das Bestimmen einer ersten Menge von Iterationen, die einer ersten MAC-Berechnung zugeordnet sind, das Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über mehrere Parallelverarbeitungselemente ausgeführt werden können, und das Veranlassen, die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen auszuführen wird, um die erste MAC-Berechnung durchzuführen, wobei während der Ausführung jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
    2. 2. Das computerimplementierte Verfahren gemäß Klausel 1, wobei die erste MAC-Berechnung eine allgemeine Matrixmultiplikationsoperation, eine Faltungsoperation, eine Tensorproduktoperation oder eine Tensorkontraktionsoperation umfasst.
    3. 3. Das computerimplementierte Verfahren gemäß Klausel 1 oder 2, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einem im Wesentlichen ähnlichen Ausmaß des Fortschritts zugeordnet ist, um den ein gegebenes Parallelverarbeitungselement in einem gegebenen Akkumulationsmaß weiterkommt.
    4. 4. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-3, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einer gegebenen Anzahl von MAC-Operationen zugeordnet ist, wobei jede MAC-Operation, die in der gegebenen Anzahl von MAC-Operationen umfasst ist, einem Plus-Multiplizier-Semiring, einem Min-Plus-Semiring, einem Max-Multiplizier-Semiring, einem Min-Max-Semiring oder einem Oder-Und-Semiring entspricht.
    5. 5. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-4, wobei das Veranlassen, die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen auszuführen, das Starten eines Programms, das der ersten MAC-Berechnung zugeordnet ist, über eine Anzahl von Thread-Gruppen gleich der maximalen Anzahl von Aufgaben umfasst, und wobei jede Thread-Gruppe einen oder mehrere Threads umfasst.
    6. 6. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-5, wobei das Bestimmen der ersten Menge von Iterationen umfasst: ein Partitionieren einer Ausgabe der ersten MAC-Berechnung in eine zweite Menge von Ausgabekacheln, ein Bestimmen, dass jede Ausgabekachel, die in der zweiten Menge von Ausgabekacheln umfasst ist, einer dritte Mengen von Iterationen zugeordnet ist, und ein Einstellen der ersten Menge von Iterationen gleich einem Produkt der zweiten Menge von Ausgabekacheln und der dritten Menge von Iterationen.
    7. 7. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-6, wobei eine oder mehrere Iterationen, die einer ersten Ausgabekachel zugeordnet sind, die für die erste MAC-Berechnung ausgegeben wird, teilweise mit einer oder mehreren Iterationen, die einer ersten Aufgabe zugeordnet sind, und einer oder mehreren Iterationen, die einer zweiten Aufgabe zugeordnet sind, überlappen.
    8. 8. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-7, wobei eine Ausgabe der ersten MAC-Berechnung mindestens eine erste Ausgabekachel und eine zweite Ausgabekachel umfasst, und wobei erste mehreren Iterationen, die einer ersten Aufgabe zugeordnet sind, eine oder mehrere Iterationen, die der ersten Ausgabekachel zugeordnet sind, und eine oder mehrere Iterationen, die der zweiten Ausgabekachel zugeordnet sind, umfasst.
    9. 9. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-8, wobei während der Ausführung eine erste Aufgabe eine oder mehrere Iterationen durchführt, um einen ersten Satz von Teilsummen zu berechnen, die einem Matrixprodukt zugeordnet sind, eine oder mehrere Carry-in-Operationen an einem zweiten Satz von Teilsummen durchführt, die dem Matrixprodukt zugeordnet sind, und eine erste Ausgabekachel für die erste MAC-Berechnung basierend auf dem ersten Satz von Teilsummen und dem zweiten Satz von Teilsummen erzeugt.
    10. 10. Das computerimplementierte Verfahren gemäß einem der Klauseln 1-9, wobei die mehreren Parallelverarbeitungselemente umfassen: mehrere parallele Logikeinheiten, die in einem Prozessorkern umfasst sind, mehrere Verarbeiterkerne, die in einem Mehrkernprozessor umfasst sind, mehrere parallele Prozessoren, die in einem Computerknoten umfasst sind, oder mehrere parallele Computerknoten, die in einem verteilten Computersystem umfasst sind.
    11. 11. In einigen Ausführungsformen umfassen ein oder mehrere nichttransitorische computerlesbare Medien Anweisungen, die, wenn durch einen oder mehrere Prozessoren ausgeführt, den einen oder mehrere Prozessoren veranlassen, Multiplizier-Akkumulier-(„MAC“)-Berechnungen durch Durchführen der folgenden Schritte durchzuführen: Bestimmen einer ersten Menge von Iterationen, die einer ersten MAC-Berechnung zugeordnet sind, Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über mehrere Parallelverarbeitungselemente auszuführen sind, und Veranlassen der maximalen Anzahl von Aufgaben, gleichlaufend über die mehreren Parallelverarbeitungselemente ausgeführt zu werden, um die erste MAC-Berechnung durchzuführen, wobei während der Ausführung jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
    12. 12. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß Klausel 11, wobei die erste MAC-Berechnung eine allgemeine Matrixmultiplikationsoperation, eine Faltungsoperation, eine Tensorproduktoperation oder eine Tensorkontraktionsoperation umfasst.
    13. 13. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß Klausel 11 oder 12, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einer einzelnen MAC-Prozessoranweisung, einer Bulk-MAC-Prozessoranweisung, einem statischen Entrollen einer oder mehrerer MAC-Prozessoranweisungen oder einem statischen Entrollen einer oder mehrerer Bulk-MAC-Prozessoranweisungen zugeordnet ist.
    14. 14. Das ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Klauseln 11 bis 13, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einer gegebenen Anzahl von MAC-Operations zugeordnet ist, wobei jede MAC-Operation, die in der gegebenen Anzahl von MAC-Operationen umfasst ist, einem Plus-Multiplizier-Semiring, einem Min-Plus-Semiring, einem Max-Multiplizier-Semiring, einem Min-Max-Semiring oder einem Oder-Und-Semiring entspricht.
    15. 15. Das eine oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Klauseln 11 bis 14, wobei das Veranlassen, die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen auszuführen, die Planung eines gleichen Abschnitts der Aufgaben umfasst, welche die maximale Anzahl von Aufgaben auf jedem Parallelverarbeitungselement umfassen, das in den mehreren Parallelverarbeitungselementen umfasst ist.
    16. 16. Das oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Klauseln 11 bis 15, wobei das Bestimmen der ersten Menge von Iterationen umfasst: Partitionieren einer Ausgabe der ersten MAC-Berechnung in eine zweite Menge von Ausgabekacheln, Bestimmen, dass jede Ausgabekachel, die in der zweiten Menge von Ausgabekacheln umfasst ist, einer dritten Menge von Iterationen zugeordnet ist, und Einstellen die ersten Menge von Iterationen gleich einem Produkt der zweiten Menge von Ausgabekacheln und der dritten Menge von Iterationen.
    17. 17. Das eine oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Klauseln 11 bis 16, wobei eine oder mehrere Iterationen, die einer ersten Ausgabekachel zugeordnet sind, die für die erste MAC-Berechnung ausgegeben wird, teilweise mit einer oder mehrere Iterationen, die einer ersten Aufgabe zugeordnet sind, und einer oder mehrere Iterationen, die einer zweiten Aufgabe zugeordnet sind, überlappen.
    18. 18. Das ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Klauseln 11 bis 17, wobei während der Ausführung eine erste Aufgabe eine oder mehrere Iterationen durchführt, um einen ersten Satz von Teilsummen zu berechnen, die einem Matrixprodukt zugeordnet sind, und eine oder mehrere Carry-out-Operationen an dem ersten Satz von Teilsummen durchführt, um einer zweiten Aufgabe zu ermöglichen, eine erste Ausgabekachel für die erste MAC-Berechnung zu erzeugen.
    19. 19. Das ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Klauseln 11 bis 18, wobei die mehreren Parallelverarbeitungselemente umfassen:
      • mehrere parallele Logikeinheiten, die in einem Prozessorkern umfasst sind, mehrere Verarbeiterkerne, die in einem Mehrkernprozessor umfasst sind, mehrere parallele Prozessoren, die in einem Computerknoten umfasst sind, oder mehrere parallele Computerknoten, die in einem verteilten Computersystem umfasst sind.
    20. 20. In einigen Ausführungsformen umfasst ein System einen oder mehrere Speicher, die Anweisungen speichern, und einen oder mehrere Prozessoren, die mit dem einem oder mehreren Speichern gekoppelt sind, die beim Ausführen der Anweisungen die folgenden Schritte durchführen: Bestimmen einer ersten Menge von Iterationen, die einer MAC-Berechnung zugeordnet sind, Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über mehreren Parallelverarbeitungselemente ausgeführt werden können, und Veranlassen der maximalen Anzahl von Aufgaben, gleichlaufend über die mehreren Parallelverarbeitungselementen ausgeführt zu werden, um die MAC-Berechnung durchzuführen, wobei während der Ausführung jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
  • Beliebige und alle Kombinationen beliebiger Anspruchselemente, die in einem der Ansprüche vorgetragen werden, und/oder beliebige Elemente, die in dieser Anmeldung beschrieben sind, liegen in jeglicher Weise innerhalb des angedachten Schutzumfangs der Ausführungsformen und deren Schutzbereichs.
    Die Beschreibungen der verschiedenen Ausführungsformen wurden zum Zwecke der Veranschaulichung präsentiert, aber sollen die offenbarten Ausführungsformen nicht erschöpfen oder darauf begrenzt sein. Viele Modifikationen und Variationen sind dem Durchschnittsfachmann ersichtlich, ohne von dem Schutzumfang und Wesen der beschriebenen Ausführungsformen abzuweichen.
  • Aspekte der vorliegenden Ausführungsformen können als ein System, Verfahren oder Computerprogrammprodukt verkörpert sein. Demgemäß können Aspekte der vorliegenden Offenbarung die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (einschließlich Firmware, residenten Software, Mikro-Code usw.) oder einer Ausführungsform annehmen, die Software- und Hardwareaspekte kombiniert, die hier alle im Allgemeinen als ein „Modul“, ein „System“ oder ein „Computer“ bezeichnet werden können. Darüber hinaus kann jede Hardware- und/oder Softwaretechnik, jeder Prozess, jede Funktion, jede Komponente, jede Maschine, jedes Modul oder jedes System, das in der vorliegenden Offenbarung beschrieben wird, als ein Schaltung oder ein Satz von Schaltungen implementiert werden. Des Weiteren können Aspekte der vorliegenden Offenbarung die Form eines Computerprogrammproduktes annehmen, dass in einem oder mehreren computerlesbaren Medium/Medien mit darauf ausgeführtem computerlesbarem Programmcodec ausgeführt ist.
  • Jegliche Kombination von einem oder mehreren computerlesbaren Medium/Medien kann benutzt werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speicherungsmedium sein. Ein computerlesbares Speicherungsmedium kann, zum Beispiel, jedoch nicht ausschließlich, ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, Gerät oder Vorrichtung oder jegliche geeignete Kombination der vorstehenden sein. Spezifischere Beispiele (eine nicht-erschöpfende Liste) des computerlesbaren Speicherungsmediums würde das Folgende beinhalten: eine elektrische Verbindung mit einem oder mehreren Drähten, eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher, einen Read Only Speicher, einen löschbaren programmierbaren Read Only Speicher, Flashspeicher, eine Glasfaser, ein tragbarer Compact-Disc Read Only Speicher, eine optische Speicherungsvorrichtung, eine Magnetspeicherungsvorrichtung oder jegliche geeignete Kombination der vorstehenden. In dem Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes greifbare Medium sein, das ein Programm zur Verwendung von oder in Verbindung mit einem Anweisungsausführungssystem, Gerät oder einer Vorrichtung enthalten oder speichern kann.
  • Aspekte der vorliegenden Offenbarung werden oben mit Bezug auf Ablaufdiagramm-Veranschaulichungen und/oder Blockdiagramme von Verfahren, Geräten (Systemen) und Computerprogrammprodukten gemäß den Ausführungsformen der Offenbarung beschrieben. Es versteht sich, dass jeder Block der Ablaufdiagramm-Veranschaulichungen und/oder Blockdiagramme und Kombinationen von Blöcken in den Ablaufdiagramm-Veranschaulichungen und/oder Blockdiagrammen von Computerprogrammanweisungen implementiert werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Allzweckcomputers, eines Spezialzweckcomputers oder eines anderen programmierbaren Datenverarbeitungsgeräts bereitgestellt werden, um eine Maschine zu erzeugen. Die Anweisungen, die über den Prozessor des Computers oder eines anderen programmierbaren Datenverarbeitungsgeräts ausgeführt werden, ermöglichen die Implementierung der im Ablaufdiagramm und/oder Blockdiagramm angegebenen Funktionen/Aktionen. Derartige Prozessoren können, ohne Begrenzung, Allgemeinzweck-Prozessoren, Spezialzweckprozessoren, anwendungsspezifische Prozessoren oder feldprogrammierbare Gate-Arrays sein.
  • Die Ablauf- und Blockdiagramme in den Figuren veranschaulichen die Architektur, Funktionalität und den Betrieb von möglichen Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß mehreren Ausführungsformen der vorliegenden Offenbarung. In dieser Hinsicht kann jeder Block in dem Ablauf- oder Blockdiagrammen ein Modul, Segment oder einen Abschnitt von Code repräsentieren, der eine oder mehrere ausführbare Anweisungen zum Implementieren der spezifizierten logischen Funktion(en) umfasst. Es sei ebenfalls anzumerken, dass die Funktionen, die in dem Block vermerkt sind, in manchen alternativen Implementierungen, außerhalb der in den Figuren angemerkten Reihenfolge erfolgen können. Zum Beispiel können zwei aufeinanderfolgend gezeigte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden oder die Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden, abhängig von der beteiligten Funktionalität. Es wird ebenfalls angemerkt, dass jeder Block des Blockdiagramms und/oder Ablaufdiagramm-Veranschaulichung und Kombinationen von Blöcken in den Blockdiagrammen und/oder Ablaufdiagramm-Veranschaulichungen von hardwarebasierten Systemen für spezielle Zwecke, welche die spezifizierten Funktionen oder Handlungen ausführen, oder Kombinationen von Hardware- und Computeranweisungen für spezielle Zwecke implementiert werden können.
  • Während das Vorstehende an Ausführungsformen der vorliegenden Offenbarung gerichtet ist, können andere und weitere Ausführungsformen der Offenbarung angedacht werden, ohne von dem grundlegenden Schutzumfang davon abzuweichen und der Schutzumfang davon wird von den folgenden Patentansprüchen bestimmt.

Claims (21)

  1. Computerimplementiertes Verfahren zum Durchführen von Multiplizier-Akkumulier-MAC-Berechnungen, wobei das Verfahren umfasst: Bestimmen einer ersten Menge von Iterationen, die einer ersten MAC-Berechnung zugeordnet sind; Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über mehrere Parallelverarbeitungselemente ausgeführt werden können; und Veranlassen, dass die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen ausgeführt wird, um die erste MAC-Berechnung durchzuführen, wobei während der Ausführung jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
  2. Computerimplementiertes Verfahren gemäß Anspruch 1, wobei die erste MAC-Berechnung eine allgemeine Matrixmultiplikationsoperation, eine Faltungsoperation, eine Tensorproduktoperation oder eine Tensorkontraktionsoperation umfasst.
  3. Computerimplementiertes Verfahren gemäß Anspruch 1 oder 2, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einem im Wesentlichen ähnlichen Ausmaß des Fortschritts zugeordnet ist, um den ein gegebenes Parallelverarbeitungselement in einem gegebenen Akkumulationsmaß weiterkommt.
  4. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einer gegebenen Anzahl von MAC-Operationen zugeordnet ist, wobei jede MAC-Operation, die in der gegebenen Anzahl von MAC-Operationen umfasst ist, einem Plus-Multiplizier-Semiring, einem Min-Plus-Semiring, einem Max-Multiplizier-Semiring, einem Min-Max-Semiring oder einem Oder-Und-Semiring entspricht.
  5. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei das Veranlassen, die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen auszuführen, das Starten eines Programms, das der ersten MAC-Berechnung zugeordnet ist, über eine Anzahl von Thread-Gruppen gleich der maximale Anzahl von Aufgaben umfasst, und wobei jede Thread-Gruppe einen oder mehrere Threads umfasst.
  6. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei das Bestimmen der ersten Menge von Iterationen umfasst: Partitionieren einer Ausgabe der ersten MAC-Berechnung in eine zweiten Menge von Ausgabekacheln; Bestimmen, dass jede Ausgabekachel, die umfassend in der zweiten Menge von Ausgabekacheln umfasst ist, einer dritten Menge von Iterationen zugeordnet ist; und Einstellen die ersten Menge von Iterationen gleich einem Produkt der zweiten Menge von Ausgabekacheln und der dritte Mengen von Iterationen.
  7. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei eine oder mehrere Iterationen, die einer ersten Ausgabekachel zugeordnet sind, die für die erste MAC-Berechnung ausgegeben wird, teilweise mit einer oder mehreren Iterationen, die einer ersten Aufgabe zugeordnet sind, und einer oder mehrere Iterationen, die einer zweiten Aufgabe zugeordnet sind, überlappen.
  8. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei eine Ausgabe der ersten MAC-Berechnung mindestens eine erste Ausgabekachel und eine zweite Ausgabekachel umfasst, und wobei erste mehreren Iterationen, die einer ersten Aufgabe zugeordnet sind, eine oder mehrere Iterationen, die der ersten Ausgabekachel zugeordnet sind, und eine oder mehrere Iterationen, die der zweiten Ausgabekachel zugeordnet sind, umfasst.
  9. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei während der Ausführung eine erste Aufgabe eine oder mehrere Iterationen durchführt, um einen ersten Satz von Teilsummen zu berechnen, die einem Matrixprodukt zugeordnet sind, eine oder mehrere Carry-In-Operationen an einem zweiten Satz von Teilsummen durchführt, die dem Matrixprodukt zugeordnet sind,; und eine erste Ausgabekachel für die erste MAC-Berechnung basierend auf dem ersten Satz von Teilsummen und dem zweiten Satz von Teilsummen erzeugt.
  10. Computerimplementiertes Verfahren gemäß einem vorhergehenden Anspruch, wobei die mehreren Parallelverarbeitungselementen umfassen: mehrere parallele Logikeinheiten, die in einem Prozessorkern umfasst sind, mehrere Verarbeiterkerne, die in einem Mehrkernprozessor umfasst sind, mehrere parallele Prozessoren, die in einem Computerknoten umfasst sind, oder mehrere parallele Computerknoten, die in einem verteilten Computersystem umfasst sind.
  11. Ein oder mehrere nichttransitorische computerlesbare Medien, die Anweisungen umfassen, die, wenn durch einen oder mehrere Prozessoren ausgeführt, den einen oder mehrere Prozessoren veranlassen, Multiplizier-Akkumulier-MAC-Berechnungen durch Durchführen der folgenden Schritte durchzuführen: Bestimmen einer ersten Menge von Iterationen, die einer ersten MAC-Berechnung zugeordnet sind; Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über eine mehreren Parallelverarbeitungselemente ausgeführt sind; und Veranlassen der maximalen Anzahl von Aufgaben, gleichlaufend über die mehreren Parallelverarbeitungselemente ausgeführt zu werden, um die erste MAC-Berechnung durchzuführen, wobei während der Ausführung jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
  12. ein oder mehrere nichttransitorische computerlesbare Medien gemäß Anspruch 11, wobei die erste MAC-Berechnung eine allgemeine Matrixmultiplikationsoperation, eine Faltungsoperation, eine Tensorproduktoperation oder eine Tensorkontraktionsoperation umfasst.
  13. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß Anspruch 11 oder 12, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einer einzelnen MAC-Prozessoranweisung, einer Bulk-MAC-Prozessoranweisung, einem statischen Entrollen einer oder mehrerer MAC-Prozessoranweisungen oder einem statischen Entrollen einer oder mehrerer Bulk-MAC-Prozessoranweisungen zugeordnet ist.
  14. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Ansprüche 11 bis 13, wobei jede Iteration, die in der ersten Menge von Iterationen umfasst ist, einer gegebenen Anzahl von MAC-Operations zugeordnet ist, wobei jede MAC-Operation, die in der gegebenen Anzahl von MAC-Operationen umfasst ist, einem Plus-Multiplizier-Semiring, einem Min-Plus-Semiring, einem Max-Multiplizier-Semiring, einem Min-Max-Semiring oder einem Oder-Und-Semiring entspricht.
  15. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Ansprüche 11 bis 14, wobei das Veranlassen, die maximale Anzahl von Aufgaben gleichlaufend über die mehreren Parallelverarbeitungselementen auszuführen, die Planung eines gleichen Abschnitts der Aufgaben umfasst, welche die maximale Anzahl von Aufgaben auf jedem Parallelverarbeitungselement umfassen, das in den mehreren Parallelverarbeitungselementen umfasst ist.
  16. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Ansprüche 11 bis 15, wobei das Bestimmen der ersten Menge von Iterationen umfasst: Partitionieren einer Ausgabe der ersten MAC-Berechnung in eine zweite Menge von Ausgabekacheln; Bestimmen, dass jede Ausgabekachel, die in der zweiten Menge von Ausgabekacheln umfasst ist, einer dritten Menge von Iterationen zugeordnet ist; und Einstellen die ersten Menge von Iterationen gleich einem Produkt der zweiten Menge von Ausgabekacheln und der dritten Menge von Iterationen.
  17. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Ansprüche 11 bis 16, wobei eine oder mehrere Iterationen, die einer ersten Ausgabekachel zugeordnet sind, die für die erste MAC-Berechnung ausgegeben wird, teilweise mit einer oder mehrere Iterationen, die einer ersten Aufgabe zugeordnet sind, und einer oder mehrere Iterationen, die einer zweiten Aufgabe zugeordnet sind, überlappen.
  18. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Ansprüche 11 bis 17, wobei während der Ausführung eine erste Aufgabe eine oder mehrere Iterationen durchführt, um einen ersten Satz von Teilsummen zu berechnen, die einem Matrixprodukt zugeordnet sind, und eine oder mehrere Carry-Out-Operationen an dem ersten Satz von Teilsummen durchführt, um einer zweiten Aufgabe zu ermöglichen, eine erste Ausgabekachel für die erste MAC-Berechnung zu erzeugen.
  19. Ein oder mehrere nichttransitorische computerlesbare Medien gemäß einem der Ansprüche 11 bis 18, wobei die mehreren Parallelverarbeitungselemente umfassen: mehrere parallele Logikeinheiten, die in einem Prozessorkern umfasst sind, mehrere Verarbeiterkerne, die in einem Mehrkernprozessor umfasst sind, mehrere parallele Prozessoren, die in einem Computerknoten umfasst sind, oder mehrere parallele Computerknoten, die in einem verteilten Computersystem umfasst.
  20. System, umfassend: einen oder mehrere Speicher, die Anweisungen speichern; und einen oder mehrere Prozessoren, die mit einem oder mehreren Speichern gekoppelt sind, die beim Ausführen der Anweisungen die folgenden Schritte durchführen: Bestimmen einer ersten Menge von Iterationen, die einer Multiplizier-Akkumulier-MAC-Berechnung zugeordnet sind; Bestimmen einer maximalen Anzahl von Aufgaben, die gleichlaufend über mehreren Parallelverarbeitungselemente ausgeführt werden können; und Veranlassen der maximalen Anzahl von Aufgaben, gleichlaufend über die mehreren Parallelverarbeitungselementen ausgeführt zu werden, um die MAC-Berechnung durchzuführen, wobei, während der Ausführung, jede Aufgabe eine im Wesentlichen der ersten Menge ähnliche Anzahl von Iterationen durchführt.
  21. System gemäß Anspruch 20, wobei der eine oder mehrere Prozessoren, die mit einem oder mehreren Speichern konfiguriert sind, beim Ausführen die Anweisungen die Schritten eines Verfahren durchzuführen, wie in einem der Ansprüche 1 bis 10 erwähnt.
DE102022105958.8A 2021-03-22 2022-03-15 Techniken zum ausgleichen von arbeitslasten beim parallelisieren von multiplizier-akkumulier-berechnungen Pending DE102022105958A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/209,061 US20220300326A1 (en) 2021-03-22 2021-03-22 Techniques for balancing workloads when parallelizing multiply-accumulate computations
US17/209,061 2021-03-22

Publications (1)

Publication Number Publication Date
DE102022105958A1 true DE102022105958A1 (de) 2022-09-22

Family

ID=83114713

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022105958.8A Pending DE102022105958A1 (de) 2021-03-22 2022-03-15 Techniken zum ausgleichen von arbeitslasten beim parallelisieren von multiplizier-akkumulier-berechnungen

Country Status (2)

Country Link
US (1) US20220300326A1 (de)
DE (1) DE102022105958A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250953B2 (en) * 2013-11-12 2016-02-02 Oxide Interactive Llc Organizing tasks by a hierarchical task scheduler for execution in a multi-threaded processing system

Also Published As

Publication number Publication date
US20220300326A1 (en) 2022-09-22

Similar Documents

Publication Publication Date Title
DE102013208554B4 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE102013022712B4 (de) Virtuelle Speicherstruktur für Coprozessoren, die Speicherallokationsbegrenzungen haben
US8099584B2 (en) Methods for scalably exploiting parallelism in a parallel processing system
DE102012220267B4 (de) Rechenarbeitsverteilungs - Referenzzähler
US8707320B2 (en) Dynamic partitioning of data by occasionally doubling data chunk size for data-parallel applications
US9477465B2 (en) Arithmetic processing apparatus, control method of arithmetic processing apparatus, and a computer-readable storage medium storing a control program for controlling an arithmetic processing apparatus
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
Ashari et al. On optimizing machine learning workloads via kernel fusion
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE102012212639A1 (de) Temporäre SIMT-Ausführungs-Optimierung
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102012222913A1 (de) Verfahren und Apparat zum Planen von Anweisungen unter Benutzung von Zuvor-Dekodieren-Daten
DE102013201178A1 (de) Steuern von Arbeitsverteilung für Verarbeitung von Tasks
DE102013208421A1 (de) Sharing einer Grafikverarbeitungseinheit unter vielen Anwendungen
DE102020112826A1 (de) Verfahren zur effizienten durchführung von datenreduktionen in parallelverarbeitungseinheiten
Bakunas-Milanowski et al. Efficient algorithms for stream compaction on GPUs
DE102013022258A1 (de) Kontextumschaltung für Granulatität eines kooperativen Strang-Arrays während einer Haftstellenbehandlung
DE102022105958A1 (de) Techniken zum ausgleichen von arbeitslasten beim parallelisieren von multiplizier-akkumulier-berechnungen
DE102012222391B4 (de) Mehrkanal-Zeitscheibengruppen
DE102012220365A1 (de) Aufgabe-Thread-Feld-Granularität-Ausführung-Präemption
DE102013201195A1 (de) Zuvor-geplante Wiederholungen von divergenten Operationen
DE102023101520A1 (de) Effizientes Starten von Aufgaben auf einem Prozessor
Tariq An introduction to gpu computing and cuda architecture
Athil et al. Cuda memory techniques for matrix multiplication on quadro 4000

Legal Events

Date Code Title Description
R012 Request for examination validly filed