DE102020127707A1 - HIGH PERFORMANCE SYNCHRONIZATION MECHANISMS FOR COORDINATING OPERATIONS ON A COMPUTER SYSTEM - Google Patents
HIGH PERFORMANCE SYNCHRONIZATION MECHANISMS FOR COORDINATING OPERATIONS ON A COMPUTER SYSTEM Download PDFInfo
- Publication number
- DE102020127707A1 DE102020127707A1 DE102020127707.5A DE102020127707A DE102020127707A1 DE 102020127707 A1 DE102020127707 A1 DE 102020127707A1 DE 102020127707 A DE102020127707 A DE 102020127707A DE 102020127707 A1 DE102020127707 A1 DE 102020127707A1
- Authority
- DE
- Germany
- Prior art keywords
- barrier
- synchronization
- thread
- arrive
- counter
- 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.)
- Withdrawn
Links
- 230000004888 barrier function Effects 0.000 claims abstract description 335
- 230000015654 memory Effects 0.000 claims abstract description 104
- 230000006870 function Effects 0.000 claims description 60
- 238000000034 method Methods 0.000 claims description 52
- 230000008569 process Effects 0.000 claims description 42
- 230000008859 change Effects 0.000 claims description 8
- 230000004044 response Effects 0.000 claims 2
- 230000001419 dependent effect Effects 0.000 claims 1
- 230000007246 mechanism Effects 0.000 abstract description 7
- 230000001360 synchronised effect Effects 0.000 abstract description 5
- 238000012545 processing Methods 0.000 description 24
- 238000013459 approach Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 9
- 241000283973 Oryctolagus cuniculus Species 0.000 description 7
- 241000270666 Testudines Species 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 5
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 4
- 241001136792 Alle Species 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- BUHVIAUBTBOHAG-FOYDDCNASA-N (2r,3r,4s,5r)-2-[6-[[2-(3,5-dimethoxyphenyl)-2-(2-methylphenyl)ethyl]amino]purin-9-yl]-5-(hydroxymethyl)oxolane-3,4-diol Chemical compound COC1=CC(OC)=CC(C(CNC=2C=3N=CN(C=3N=CN=2)[C@H]2[C@@H]([C@H](O)[C@@H](CO)O2)O)C=2C(=CC=CC=2)C)=C1 BUHVIAUBTBOHAG-FOYDDCNASA-N 0.000 description 1
- 102100024748 E3 ubiquitin-protein ligase UHRF2 Human genes 0.000 description 1
- 101000820240 Escherichia coli (strain K12) Uncharacterized protein YfiL Proteins 0.000 description 1
- 101000760434 Homo sapiens E3 ubiquitin-protein ligase UHRF2 Proteins 0.000 description 1
- 101000786457 Leptolyngbya boryana Uncharacterized 15.3 kDa protein in frxC 3'region Proteins 0.000 description 1
- 101000786458 Leptolyngbya boryana Uncharacterized protein in chlN 3'region Proteins 0.000 description 1
- 241000283986 Lepus Species 0.000 description 1
- 101000758956 Paracoccus denitrificans Uncharacterized 22.9 kDa protein in nqo2 3'region Proteins 0.000 description 1
- 101000758961 Paracoccus denitrificans Uncharacterized 9.3 kDa protein in nqo2 3'region Proteins 0.000 description 1
- 101000823662 Synechococcus sp. (strain PCC 6716) Uncharacterized 31.6 kDa protein in atpI 5'region Proteins 0.000 description 1
- 101000823678 Synechococcus sp. (strain PCC 6716) Uncharacterized 8.8 kDa protein in atpI 5'region Proteins 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000005352 clarification Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- RDYMFSUJUZBWLH-UHFFFAOYSA-N endosulfan Chemical compound C12COS(=O)OCC2C2(Cl)C(Cl)=C(Cl)C1(Cl)C2(Cl)Cl RDYMFSUJUZBWLH-UHFFFAOYSA-N 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000037452 priming Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000004304 visual acuity Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
Um Operationen eines Rechnersystems zu synchronisieren wird ein neuer Typ einer Synchronisierungsbarriere offenbart. Bei einer Ausführungsform kann die offenbarte Synchronisierungsbarriere für bestimmte Synchronisierungsmechanismen, wie zum Beispiel „Arrive“ und „Wait“, geteilt werden, um eine größere Flexibilität und Effizienz beim Koordinieren einer Synchronisierung zu ermöglichen. Bei einer anderen Ausführungsform ermöglicht die offenbarte Synchronisierungsbarriere, dass Hardwarekomponenten, wie zum Beispiel bestimmte Kopier- oder Direktspeicherzugriffs- (DMA-) Maschinen, mit Software-basierten Threads synchronisiert werden.In order to synchronize operations of a computer system, a new type of synchronization barrier is disclosed. In one embodiment, the disclosed synchronization barrier for certain synchronization mechanisms, such as "Arrive" and "Wait", can be shared to allow greater flexibility and efficiency in coordinating synchronization. In another embodiment, the disclosed synchronization barrier enables hardware components, such as certain copy or direct memory access (DMA) machines, to be synchronized with software-based threads.
Description
HINTERGRUND & ZUSAMMENFASSUNGBACKGROUND & SUMMARY
Massiv-parallele Hochleistungssysteme mit Multithreading-Mehrkernprozessoren - Systeme, die viele parallel arbeitende Verarbeitungskerne enthalten - verarbeiten Daten viel schneller, als es in der Vergangenheit möglich war. Diese Verarbeitungssysteme zerlegen komplexe Berechnungen in kleinere Aufgaben, die gleichzeitig von parallelen Rechenkernen ausgeführt werden. Dieser „Divide and Conquer“-Ansatz ermöglicht es, komplexe Berechnungen in einem Bruchteil der Zeit durchzuführen, die erforderlich wäre, wenn nur ein oder wenige Prozessoren nacheinander an denselben Berechnungen arbeiten würden. Aber eine solche Parallelverarbeitung schafft auch den Bedarf an Kommunikation und Koordination zwischen parallelen Ausführungs-Threads oder -Blöcken.Massively parallel high-performance systems with multithreading multi-core processors - systems that contain many processing cores working in parallel - process data much faster than was possible in the past. These processing systems break down complex calculations into smaller tasks that are carried out simultaneously by parallel computing cores. This “divide and conquer” approach enables complex calculations to be performed in a fraction of the time it would take if only one or a few processors worked on the same calculations in succession. But such parallel processing also creates the need for communication and coordination between parallel execution threads or blocks.
Eine Möglichkeit, um für verschiedene Ausführungsprozesse ihre Zustände miteinander zu koordinieren, ist die Synchronisierung mittels einer Barriere. Bei der Synchronisierung mittels einer Barriere wartet jeder Prozess in einer Sammlung parallel ausgeführter Prozesse in der Regel an einer Barriere, bis alle anderen Prozesse in der Sammlung aufgeholt haben. Kein Prozess kann die Barriere überschreiten, bis alle Prozesse die Barriere erreicht haben.One possibility to coordinate their states for different execution processes is the synchronization by means of a barrier. When synchronizing using a barrier, each process in a collection of parallel processes usually waits at a barrier until all other processes in the collection have caught up. No process can cross the barrier until all processes have reached the barrier.
Die
Ein Thread
Ein weiterer Thread
Die
Sobald der letzte nachlaufende „Schildkröten“-Thread
Ein Beispiel für eine nützliche Anwendung, die von der Synchronisierung mittels einer Barriere profitiert, ist die „asynchrone Berechnung“. Bei der asynchronen Berechnung wird die GPU-Nutzung dadurch gesteigert, dass die Aufgaben nicht in strikter Reihenfolge, sondern ohne Beachtung der Reihenfolge eingeplant werden, so dass „spätere“ (gemäß der Reihenfolge) Berechnungen zur gleichen Zeit wie „frühere“ (gemäß der Reihenfolge) Berechnungen durchgeführt werden können. Ein Beispiel: Beim Rendern von Grafiken kann eine asynchrone Berechnung eine gleichzeitige Ausführung des Shaders mit anderen Arbeiten ermöglicht werden, anstatt dass ein Shader sequentiell zu anderen Arbeitslasten ausgeführt wird. Während die GPU-API so konzipiert sein kann, dass sie davon ausgeht, dass die meisten oder alle Aufrufe unabhängig sind, erhält der Entwickler auch die Kontrolle darüber, wie die Aufgaben oder Tasks eingeplant werden, und kann Barrieren implementieren, um die Korrektheit zu gewährleisten, z. B. wenn eine Operation vom Ergebnis einer anderen abhängt. Siehe z.B. U.S. Patent Nr.
Hardware-basierte Synchronisierungsmechanismen sind in GPUs zur Unterstützung solcher Arten von Synchronisierungsfunktionen mit einer Barriere enthalten. Siehe z.B.
In modernen GPU-Architekturen werden viele Ausführungsthreads gleichzeitig ausgeführt, und viele Warps, die jeweils viele Threads umfassen, werden ebenfalls gleichzeitig ausgeführt. Wenn Threads in einem Warp kompliziertere Kommunikations- oder kollektive Operationen ausführen müssen, kann der Entwickler z.B. NVIDIAs CUDA „_syncwarp“-Grundelement bzw. -Primitiv verwenden, um Threads zu synchronisieren. Das _syncwarp-Grundelement initialisiert Hardware-Mechanismen, die bewirken, dass ein ausführender Thread vor der Wiederaufnahme der Ausführung wartet, bis alle in einer Maske angegebenen Threads das Grundelement mit derselben Maske aufgerufen haben. Für weitere Einzelheiten siehe z.B.
Obwohl sich hardwareimplementierte Barrieren als nützlich erwiesen haben, ist es manchmal hilfreich, wenn ein Programm mehr als eine Barriere gleichzeitig nutzt. Beispielsweise kann ein Programm potenziell eine erste Synchronisierungsbarriere verwenden, um eine erste Gruppe von Threads zu blockieren, und eine zweite, andere Synchronisierungsbarriere, um eine weitere Gruppe von Threads zu blockieren (oder manchmal wird dieselbe Synchronisierungsbarriere wiederverwendet, um dieselbe Gruppe von Threads immer wieder zu blockieren, während sie ihre Ausführungspfade durchlaufen). In der Vergangenheit musste ein Software-Entwickler, um Operationen mit mehreren Barrieren durchzuführen, dem Compiler in der Regel im Voraus angeben, wie viele Barrieren benötigt werden. In Systemen, in denen Synchronisierungsbarrieren hardwareimplementiert waren, stand eine begrenzte Anzahl von Synchronisierungsbarrieren zur Verfügung. Einige Programme benötigten oder hätten mehr Synchronisierungsbarrieren verwenden können, als in der Hardware von der Hardware-Plattform unterstützt wurden.Although hardware-implemented barriers have proven useful, it is sometimes helpful for a program to use more than one barrier at the same time. For example, a program can potentially use a first sync barrier to block a first set of threads and a second, different sync barrier to block another set of threads (or sometimes the same sync barrier is reused to block the same set of threads over and over again block as they traverse their execution paths). In the past, in order to perform operations with multiple barriers, a software developer typically had to tell the compiler how many barriers were needed in advance. In systems where synchronization barriers were hardware implemented, a limited number of synchronization barriers were available. Some programs needed or could have used more synchronization barriers than were supported in the hardware by the hardware platform.
Aufgrund zusätzlicher Anwendungen von und der Nachfrage nach Synchronisierungsbarrieren besteht die Notwendigkeit, die Zuordnung von Synchronisierungsbarrieren zu verbessern. Insbesondere bestimmte frühere Implementierungen und Ansätze von Hardware-beschleunigten Barrieren weisen erhebliche Mängel auf:
- 1. Programme, die mehr als eine physikalische Hardware-Barriere benötigten, hatten Schwierigkeiten bei der Zuweisung dieser Barrieren.
- 2. Barrieren mit der klassischen „arrive-and-wait“-Schnittstelle verbergen die Synchronisierungslatenz nicht gut (in Bezug auf die Flipchart-Animation in
1A-1H muss der „Hase“-Thread möglicherweise eine Weile warten und nichts tun, bis die „Schildkröten“-Threads aufholen). - 3. Kopier-Maschinen (wie DMA-Einheiten (Direct Memory Access)) können in der Regel nicht direkt an der hardwarebasierten Synchronisierung teilnehmen, da sie keine Software-Threads sind.
- 1. Programs that required more than one physical hardware barrier had difficulty assigning these barriers.
- 2. Barriers with the classic “arrive and wait” interface do not hide the synchronization latency well (with regard to the flipchart animation in
1A-1H the "rabbit" thread may have to wait a while and do nothing for the "turtle" threads to catch up). - 3. Copy machines (such as DMA units (Direct Memory Access)) can usually not participate directly in the hardware-based synchronization because they are not software threads.
Es ist seit langem möglich, Synchronisierungsbarrieren in Software zu implementieren, aber software-implementierte Barrieren stellen nicht unbedingt das gleiche Leistungsniveau wie hardware-implementierte Barrieren bereit. Beispielsweise verwendeten einige Entwickler in der Vergangenheit Hardware, um so viele Barrieren zu implementieren, wie von der Plattform-Hardware unterstützt wurden, und wenn mehr (oder andere Arten von) Barrieren benötigt wurden, implementierten sie zusätzliche Barrieren in Software. Entwickler, die Synchronisierungsbarrieren in Software implementierten, mussten oft Leistungseinbußen hinnehmen. Insbesondere eine übermäßige Zuweisung von Barrieren konnte zu weniger Ausführungspfaden und entsprechend geringerer Leistung führen. Es war für Entwickler nicht immer ein einfacher Kompromiss, festzustellen, ob die Leistung durch den Einsatz von mehr Barrieren und weniger Tasks verbessert werden könnte.It has long been possible to implement synchronization barriers in software, but software-implemented barriers do not necessarily provide the same level of performance as hardware-implemented barriers. For example, in the past some developers used hardware to implement as many barriers as the platform hardware supported, and when more (or other types of) barriers were needed, they implemented additional barriers in software. Developers who implemented synchronization barriers in software often suffered performance degradation. In particular, over-assigning barriers could result in fewer execution paths and correspondingly lower performance. It has not always been an easy compromise for developers to determine if using more barriers and fewer tasks could improve performance.
Es besteht die Notwendigkeit, die Zuweisung von Hardware-beschleunigten und/oder -unterstützten Synchronisierungsbarrieren so zu verbessern, dass die Software-Zuweisung flexibel gestaltet werden kann, ohne die Leistung jedoch negativ zu beeinflussen.There is a need to improve the assignment of hardware-accelerated and / or -assisted synchronization barriers in such a way that the software assignment can be made flexible without, however, adversely affecting performance.
FigurenlisteFigure list
-
Die
1A-1H bilden zusammen eine zeitliche Abfolge von Bildern, die eine Flipchart-Animation umfassen, die die Verwendung einer Synchronisierungsbarriere veranschaulicht (um die Animation anzusehen, beginnt man mit1A einer elektronischen Kopie dieses Patents und drückt wiederholt die Taste „Seite nach unten“);The1A-1H together form a temporal sequence of images that comprise a flipchart animation that illustrates the use of a synchronization barrier (to view the animation, start with1A an electronic copy of this patent and presses the page down key repeatedly); -
2 zeigt ein Beispiel für einen nicht einschränkenden Befehlsstrom;2 Figure 13 shows an example of a non-limiting instruction stream; -
Die
2A &2B sind Blockdiagramme eines Beispiels für ein nicht einschränkendes System, das das vorliegende Verfahren zur Synchronisierung mittels einer Barriere verwendet;The2A &2 B Figure 4 is block diagrams of an example of a non-limiting system using the present method of synchronization using a barrier; -
3 ist ein Blockdiagramm eines Beispiels für ein nicht einschränkendes speichergestütztes Synchronisierungsbarrieren-Grundelement;3 Figure 3 is a block diagram of an example of a non-limiting memory-based synchronization barrier primitive; -
4 ist ein Blockdiagramm einer beispielhaften nicht einschränkenden Kombination von Hardware- und Softwarefunktionen, die zur Verwaltung der Barriere von3 verwendet werden kann;4th FIG. 3 is a block diagram of an exemplary, non-limiting combination of hardware and software functions used to manage the barrier of3 can be used; -
Die
5A-5F stellen beispielhafte Flussdiagramme von Operationen dar, denen Barrierefunktionen zugeordnet sind;The5A-5F illustrate exemplary flow diagrams of operations associated with barrier functions; -
Die
6 &7 zeigen illustrative Beispiele für Barrieren mit zwei Threads;The6th &7th show illustrative examples of two-threaded barriers; -
8 zeigt ein illustratives Beispiel für einen dreistufigen Pipeline-Streaming-Code; und8th Figure 12 shows an illustrative example of three stage pipeline streaming code; and -
9 zeigt ein Beispiel für eine nicht einschränkende Schleifencode-Struktur.9 shows an example of a non-limiting loop code structure.
DETAILLIERTE BESCHREIBUNG DER BEISPIELHAFTEN NICHT EINSCHRÄNKENDEN AUSFÜHRUNGSFORMENDETAILED DESCRIPTION OF EXEMPLARY NON-RESTRICTING EMBODIMENTS
Es wird eine neue Art von Barriere eingeführt, die die oben beschriebenen Probleme löst:
- 1. Sie ist im Speicher implementiert und allokiert daher wie der Speicher.
- 2. Die „Arrive“- (Ankommen-) und die „Wait“- (Warten-) Operation werden aufgeteilt, damit nicht betroffene Tasks bzw. Arbeiten dazwischen ausgeführt werden können.
- 3. Asynchrone Kopierhardware von demselben Streaming-Multiprozessor (SM) kann sich als virtueller oder „moralischer“ Thread beteiligen.
- 1. It is implemented in memory and is therefore allocated like memory.
- 2. The "Arrive" and "Wait" operations are split up so that unaffected tasks or work in between can be carried out.
- 3. Asynchronous copy hardware from the same streaming multiprocessor (SM) can participate as a virtual or "moral" thread.
Die Implementierung von Barrieren im Speicher ist durchaus machbar und ist im Allgemeinen durch Software realisiert. Geteilte Software-Barrieren sind weniger verbreitet, existieren aber auch in der Praxis. Es wird eine Hardware-Beschleunigung für diese(s) Idiom(e) bereitgestellt, und Hardware-Kopiereinheiten werden mit der Hardware-Beschleunigung integriert, als ob die Hardware-Kopiereinheiten „moralische“ Threads wären.The implementation of barriers in memory is quite feasible and is generally implemented by software. Shared software barriers are less common, but they also exist in practice. Hardware acceleration is provided for this idiom (s), and hardware copiers are integrated with the hardware acceleration as if the hardware copiers were "moral" threads.
Der Programmieraufwand, der erforderlich ist, um eine Barriere mit reichhaltigerer Funktionalität und guter Leistung zu erzeugen, wird wesentlich verbessert. Es wird auch ermöglicht, dass mehr asynchrone Kopieroperationen bezüglich der Streaming-Multiprozessoren (SMs) einer GPU eingeführt werden, indem ein innovativer Weg zur Synchronisierung mit den Kopieroperationen bereitgestellt wird, der die SM-Leistung verbessert, indem die Kern-Threads von Arbeit entlastet werden.The programming effort required to create a barrier with richer functionality and good performance is greatly improved. It also enables more asynchronous copy operations to be introduced into the streaming multiprocessors (SMs) of a GPU by providing an innovative way of synchronizing with the copy operations that improves SM performance by offloading work on the core threads .
Das vorliegende Beispiel eines nicht einschränkenden Verfahrens verlagert somit zusätzliche Funktionalität in Barrieren, was wiederum die Verbreitung von Synchronisierungsbarrieren erhöhen kann. Insbesondere wird viel mehr Code als in der Vergangenheit potenziell mehrere Synchronisierungsbarrieren verwenden müssen (und können).The present example of a non-limiting method thus shifts additional functionality into barriers, which in turn can increase the spread of synchronization barriers. In particular, much more code will have to (and can) potentially use multiple sync barriers than in the past.
Synchronisierungsfunktion mit geteilter Ankommen-Warte-BarriereSynchronization function with split arrival / waiting barrier
Wie oben erläutert ist, ist eine Synchronisierung mittels einer Barriere häufig oder typischerweise als ein Konstrukt definiert, bei dem eine bestimmte Menge von Threads oder anderen Prozessen an dem Synchronisierungspunkt blockiert werden, und wenn alle Threads oder anderen Prozesse in einer bestimmten Menge am Synchronisierungspunkt angekommen sind, werden alle Threads oder anderen Prozesse dann freigegeben. Siehe
Insbesondere warteten in vielen früheren Implementierungen von einer Synchronisierung mittels einer Barriere Threads wie der „Hase“-Thread in
Es sei angenommen, dass ein Programmierer eine Barriere in Software implementiert. Es sei angenommen, dass der Programmierer/Entwickler Code geschrieben hat, um die Barriere zu implementieren. Ein wirtschaftlicher Vorgang wäre „ankommen und warten“ („arrive and wait“). Das ist es, was eine „Open MP“-Barriere implementiert und wie frühere CUDA-Barrieren implementiert wurden. Bei einer beispielhaften Implementierung würde jeder Thread, der am Synchronisierungspunkt ankommt, die Aussage „Ich bin angekommen“ machen. Das Programm würde dann die Anzahl der Threads zählen, die angekommen sind. Wenn nicht alle Threads eingetroffen sind, würde das Programm blockieren. Ein solches System würde einfach warten und fortfahren, die Zählung abzufragen, bis die Zählung den richtigen Wert erreicht, der anzeigt, dass alle Threads angekommen sind. Die Abfrageschleife ist verschwenderisch, da die Threads keine sinnvolle Arbeit verrichten, während sie warten, der Prozessor viel Zeit damit verbringt, die Anzahl abzufragen, und das System dadurch Ressourcen verbraucht, die andernfalls für sinnvolle Arbeit verwendet werden könnten.Assume that a programmer implements a barrier in software. Assume that the programmer / developer wrote code to implement the barrier. An economic process would be “arrive and wait”. This is what an "Open MP" barrier implemented and how previous CUDA barriers were implemented. In an exemplary implementation, each thread arriving at the synchronization point would say "I have arrived". The program would then count the number of threads that arrived. If not all threads have arrived, the program would block. Such a system would simply wait and continue polling the count until the count reaches the correct value indicating that all threads have arrived. The polling loop is wasteful because the threads are not doing useful work while they wait, the processor spends a lot of time polling the number, and the system is consuming resources that could otherwise be used for useful work.
Einige neuere softwarebasierte Ansätze haben die beiden Ereignisse des Ankommens am Synchronisierungspunkt und des Blockierens am Synchronisierungspunkt voneinander entkoppelt. Beispielhafte, nicht einschränkende Ausführungsformen stellen in ähnlicher Weise eine Entkopplung bereit, wie ein Thread oder ein anderer Prozess an einem Synchronisierungspunkt ankommt und wartet. Bei beispielhaften nicht einschränkenden Ausführungsformen wird dieses Verfahren so verwendet, dass Threads zuerst an dem Synchronisierungspunkt ankommen, wo ihre Ankunft berücksichtigt wird. Bei nicht einschränkenden Implementierungen müssen die Threads jedoch nicht blockieren, wenn sie am Synchronisierungspunkt ankommen. Vielmehr können sie andere Arbeiten ausführen, die nicht mit dem Synchronisierungspunkt in Zusammenhang stehen (d.h. Arbeiten, die nicht durch diese spezielle Synchronisierungsbarriere synchronisiert werden müssen, sondern eher asynchron in Bezug auf diese spezielle Synchronisierungsbarriere sind). Sobald sie diese andere Arbeit abgeschlossen haben und zu der Arbeit zurückkehren müssen, die eine Synchronisierung durch die Barriere erfordert, können sie blockiert werden, wenn es erforderlich ist. Wenn die andere Arbeit jedoch bedeutend genug ist, sind zu dem Zeitpunkt, an dem der Thread die andere Arbeit abschließt, alle anderen Threads bereits am Synchronisierungspunkt angekommen, und es erfolgt überhaupt keine Blockierung. In solchen Situationen wird bei beispielhaften nicht einschränkenden Implementierungen einfach festgestellt, dass alle Threads am Synchronisierungspunkt angekommen sind, und atomar blockiert und freigeben, ohne die weitere Verarbeitung eines Threads tatsächlich zu verzögern oder zu stoppen (mit Ausnahme von Threads, denen die andere Arbeit ausgeht, die sie erledigen könnten, während sie auf die Freigabe am Synchronisierungspunkt warten).Some newer software-based approaches have decoupled the two events of arriving at the synchronization point and blocking at the synchronization point. Exemplary, non-limiting embodiments similarly provide decoupling of how a thread or other process arrives and waits at a synchronization point. In exemplary, non-limiting embodiments, this method is used so that threads arrive first at the synchronization point where their arrival is considered. However, in non-limiting implementations, the threads do not need to block when they arrive at the sync point. Rather, they can do other work that is not related to the synchronization point (i.e. work that does not need to be synchronized through that particular synchronization barrier, but is more asynchronous with respect to that particular synchronization barrier). Once they complete that other work and need to get back to the work that requires syncing through the barrier, they can be blocked if necessary. However, if the other work is significant enough, by the time the thread completes the other work, all the other threads have already arrived at the sync point and there is no blocking at all. In such situations, exemplary non-limiting implementations simply determine that all threads have arrived at the synchronization point and are atomically blocked and released without actually delaying or stopping further processing of a thread (with the exception of threads running out of other work, which they could do while waiting for the release at the sync point).
Beispielhafte, nicht einschränkende Ausführungsformen unterteilen somit die „arrive and wait“- bzw. Ankommen-und-Warten-Funktion in zwei verschiedene atomare Funktionen: (1) Ankommen bzw. arrive und (2) Warten bzw. wait. Der „arrive“-Teil der Funktion ist die gesamte Buchhaltung und sonstige Verwaltung, die typischerweise vor der Implementierung der Barriere durchgeführt werden muss, aber er bewirkt nicht, dass irgendein Thread tatsächlich blockiert wird. Da die Threads nicht blockiert werden, dürfen sie Arbeiten ausführen, die nicht mit der Barriere in Beziehung stehen.Exemplary, non-restrictive embodiments thus subdivide the “arrive and wait” or arriving and waiting function into two different atomic functions: (1) arriving or arrive and (2) waiting or wait. The "arrive" part of the function is all of the bookkeeping and other management that typically needs to be done prior to implementing the barrier, but it does not cause any thread to actually be blocked. Because the threads are not blocked, they are allowed to do work unrelated to the barrier.
Eine Barriere wird beispielsweise häufig verwendet, um Phasen einer Berechnung über eine Datenstrukturzu implementieren. Die Synchronisierungsbarriere wird also dazu verwendet, Threads an der Verwendung der Datenstruktur zu hindern, bis alle Threads ihre Aktualisierung der Datenstruktur abgeschlossen haben. Bei nicht einschränkenden Ausführungsformen kann Threads, die bereits am Synchronisierungspunkt angekommen sind, erlaubt werden, andere nützliche Arbeiten durchzuführen, die nicht diese Datenstruktur betreffen, während sie darauf warten, dass andere Threads am Synchronisierungspunkt ankommen.For example, a barrier is often used to implement phases of computation over a data structure. So the synchronization barrier is used to prevent threads from using the data structure until all threads have finished updating the data structure. In non-limiting embodiments, threads that have already arrived at the sync point may be allowed to perform other useful work that does not involve that data structure while waiting for other threads to arrive at the sync point.
Beispiel - Rote und grüne DatenstrukturenExample - red and green data structures
Als Beispiel in
Eine „rote“ Synchronisierungsbarriere wird erstellt (2100'), um eine Barriere für die „rote“ Datenstruktur bereitzustellen. Sobald Threads mit der Aktualisierung der „roten“ Datenstruktur fertig sind (2702) und an dem „roten“ Synchronisierungspunkt ankommen (2200'), nachdem sie ihre jeweiligen Operationen an der „roten“ Datenstruktur abgeschlossen haben, können sie mit anderen Arbeiten beginnen, wie z.B. Arbeiten in Bezug auf die „grüne“ Datenstruktur (
Sobald die Threads ihre Arbeit mit der „grünen“ Datenstruktur beendet haben, können sie wieder an der „roten“ Datenstruktur arbeiten - aber bevor sie weitere Schritte in Bezug auf die „rote“ Datenstruktur unternehmen, müssen sie sicherstellen, dass die vorherige Verarbeitungsphase abgeschlossen ist. Wenn zu diesem Zeitpunkt die vorherige Verarbeitung, wie sie von dem „roten“ Synchronisierungs-Grundelement verwaltet wird, noch nicht abgeschlossen ist, müssen die Threads möglicherweise warten (
Es kann sich herausstellen, dass das Synchronisierungs-Grundelement eigentlich nie einen Thread blockiert. Wenn alle Threads so ausgelegt sind, dass sie beim Ankommen (
Eine andere Art, dieses Szenario zu beschreiben, ist: Die Synchronisierungsbarriere erfordert, dass alle Threads oder anderen Prozesse gleichzeitig an dem Synchronisierungspunkt ankommen, und lässt keinen Thread oder Prozess weiterlaufen, bis alle angekommen sind. Anstelle eines „Ankommen und Warten“-Szenarios verwandeln beispielsweise nicht einschränkende Ausführungsformen das „arrive“-Ereignis in ein Ausführungsfenster zwischen dem „arrive“ (
Wenn alle Threads und anderen Prozessoren an dem Synchronisierungspunkt angekommen sind, werden die Synchronisierungsbarrieren gemäß einem nicht einschränkenden Beispiel zurückgesetzt, um die nächste Verarbeitungsphase zu starten. Eine Synchronisierungsbarriere ist somit gemäß beispielhafter nicht einschränkender Implementierungen ein mehrfach verwendbares Objekt, das verwendet werden kann, um mehrere Synchronisierungspunkte für dieselbe Menge von Threads zu verwalten. Sobald eine erste Phase abgeschlossen ist, beginnt die nächste Phase, die von derselben Synchronisierungsbarriere verwaltet werden kann, und dann beginnt die übernächste Phase, die ebenfalls von derselben Synchronisierungsbarriere verwaltet werden kann, und so weiter.As one non-limiting example, when all threads and other processors have arrived at the synchronization point, the synchronization barriers are reset to start the next phase of processing. Thus, in accordance with exemplary, non-limiting implementations, a synchronization barrier is a reusable object that can be used to manage multiple synchronization points for the same set of threads. Once a first phase is complete, the next phase begins, which can be managed by the same synchronization barrier, and then the next but one phase, which can also be managed by the same synchronization barrier, begins, and so on.
Genauer gesagt ruft bei einem Beispiel einer nicht einschränkenden Ausführungsform jeder Thread, der an der Ankommen-Warten-Barriere mitwirkt, der Reihe nach zwei Funktionen auf, zuerst die ARRIVE-Funktion und dann die WAIT-Funktion. Das Modell der Ankommen-Warte-Barriere teilt ein Mitwirken an einer Barriere in einem Programm in drei Abschnitte ein: einen VOR_ANKOMMEN_ABSCHNITT, einen MITTEL_ABSCHNITT und einen NACH-WARTEN_ABSCHNITT mit den folgenden Axiomen:
- 1. load-/store- bzw. Lade-/Speicher-Vorgänge in einem VOR_ANKOMMEN_ABSCHNITT eines Therads sind garantiert sichtbar für load-/store-Vorgänge in einem NACH_WARTEN_ABSCHNITT anderer mitwirkender Threads;
- 2. load-/store-Vorgänge in einem NACH_WARTEN_ABSCHNITT eines Threads sind garantiert nicht sichtbar für load-/store-Vorgänge in einem VOR_ANKOMMEN_ABSCHNITT anderer mitwirkender Threads; und
- 3. load-/store-Vorgänge in einem MITTEL_ABSCHNITT eines Threads weisen keine Sichtbarkeitsgarantiereihenfolge bezüglich anderer Threads auf.
- 1. load / store or load / store processes in an ARRIVAL_SECTION of a Therad are guaranteed to be visible for load / store processes in a WAIT_SECTION of other participating threads;
- 2. load / store operations in a WAIT_PART of a thread are guaranteed not to be visible to load / store operations in an ARRIVAL_SECTION of other contributing threads; and
- 3. load / store operations on a MID_SECTION of a thread do not have a visibility guarantee order with respect to other threads.
Bei nicht einschränkenden Ausführungsformen ermöglichen beispielsweise Ankommen-Warten-Barrieren, dass überlappende Barrieren für eine Auflösung ausstehen.In non-limiting embodiments, for example, arrive-wait barriers enable overlapping barriers to be pending resolution.
Eine solche Implementierung kann für eine softwareimplementierte Barriere, eine hardwareimplementierte Barriere oder eine hybride hardware-/software-implementierte Barriere durchgeführt werden. Zum Beispiel könnte das frühere CUDA-Hardware-basierte_synch-Grundelement mit Schaltungsänderungen modifiziert werden, um die Ankommen-und-Warten-Strategie als zwei separate atomare Funktionen (arrive und wait) zu implementieren, wie es oben beschrieben ist. Bei dem Beispiel einer nicht einschränkenden Technologie werden jedoch zusätzliche Vorteile erzielt, indem die Synchronisierungsbarriere als speichergestützte, hardwarebeschleunigte Barriere implementiert wird.Such an implementation can be carried out for a software-implemented barrier, a hardware-implemented barrier or a hybrid hardware / software-implemented barrier. For example, the previous CUDA hardware-based_synch primitive could be modified with circuit changes to implement the arrive-and-wait strategy as two separate atomic functions (arrive and wait) as described above. However, in the example of a non-limiting technology, additional benefits are obtained by implementing the synchronization barrier as a memory-based, hardware-accelerated barrier.
Speichergestützte SynchronisierungsbarrierenStorage-based synchronization barriers
Zum Zwecke einer terminologischen Klärung kann der Begriff „Barriere“ je nach Abstraktionsebene unterschiedliche Bedeutungen haben. Auf einer niedrigeren Abstraktionsebene verfügen Systeme in der Regel über einen physikalischen Speicher, der den Speicher implementiert. Eine Einrichtung, die das Laden bzw. load und Speichern bzw. store implementiert, wird zum Lesen und Schreiben bei diesem Speicher verwendet.For the purpose of terminological clarification, the term “barrier” can have different meanings depending on the level of abstraction. At a lower level of abstraction, systems usually have physical memory that implements the memory. A device that implements load and store is used for reading and writing to this memory.
Auf einer nächsten Abstraktionsebene, wenn der Speicher für die Datenkommunikation zwischen Prozessen verwendet wird, kann ein Mechanismus vorgesehen sein, der sicherstellt, dass alle relevanten Daten in den physikalischen Speicher geschrieben wurden, bevor ein Flag gesetzt wird, das einem anderen Prozess anzeigt, dass die Daten für die Kommunikation mit dem anderen Prozess verfügbar sind. Ohne irgendeine Art von Barriere könnte ein anderer Prozess versuchen, die Daten zu lesen, bevor sie geschrieben wurden oder während sie geschrieben werden, und die Nachricht könnte unvollständig oder falsch sein. Solche Barrieren, die davor schützen, werden üblicherweise als „Speicherbarrieren“ bezeichnet.At a next level of abstraction, if the memory is used for data communication between processes, a mechanism can be provided that ensures that all relevant data has been written to the physical memory before a flag is set that indicates to another process that the Data is available for communication with the other process. Without some sort of barrier, another process could be trying to read the data before it was written or while it was being written and the message could be incomplete or incorrect. Such barriers that protect against this are usually referred to as “storage barriers”.
Eine Speicherbarriere in dem obigen Beispielkontext ist kein Synchronisierungs-Grundelement, sondern vielmehr eine nebenwirkungsfreie Anweisung, die dazu verwendet wird, Operationen in einer Programmreihenfolge auf Maschinen wie vielen modernen GPUs, die Speichertransaktionen neu anordnen, sichtbar zu machen. Viele moderne GPUs haben solche Speicherbarrieren, z.B. eine Anweisung, die als „memory fence“ bezeichnet wird, wie der CUDA-Befehl „_thread-fence_block()“. Diese Speicherbarrieren befinden sich auf einer Abstraktionsebene, die unterhalb der typischen Synchronisierungsbarrieren liegt.A memory barrier in the example context above is not a synchronization primitive, but rather a non-side effect instruction that is used to make operations in a program order visible on machines like many modern GPUs that rearrange memory transactions. Many modern GPUs have such memory barriers, e.g. an instruction called "memory fence", such as the CUDA command "_thread-fence_block ()". These storage barriers are on an abstraction level that is below the typical synchronization barriers.
Es ist möglich, Speicherbarrieren zur Implementierung von Synchronisierungs-Grundelementen zu verwenden. Sperren bzw. Locks und Mutexe (Objekte zum gegenseitigen Ausschluss) sind weitere Beispiele für Synchronisierungs-Grundelemente. Ein Mutex gewährt einem Thread nach dem anderen einen exklusiven Zugriff auf eine kritische Ressource. Eine Barriere tut etwas Ähnliches, aber mit gewissen Unterschieden.It is possible to use memory barriers to implement synchronization primitives. Locks and mutexes (objects for mutual exclusion) are further examples of basic synchronization elements. A mutex grants thread after thread exclusive access to a critical resource. A barrier does something similar, but with certain differences.
Im Allgemeinen trennt eine Synchronisierungsbarriere, wie es in
Beispielhafte nicht einschränkende Ausführungsformen verwenden eine speichergestützte Synchronisierungsbarriere, d.h. sie implementieren Synchronisierungsbarrieren unter Verwendung von Speicher (und in einigen Fällen von zugehörigen Speicherbarrieren). Durch die Implementierung einer Synchronisierungsbarriere als einen Speicher wird die Synchronisierungsbarriere auf die gleiche Weise virtualisiert wie der Speicher virtualisiert wird. Darüber hinaus gibt es keine praktische Begrenzung der Anzahl der Barriere-Objekte, die instanziiert werden können, zumindest für den Fall, dass jeder virtuelle Speicherplatz zur Unterstützung und Speicherung einer Synchronisierungsbarriere verwendet werden kann.Exemplary non-limiting embodiments use a memory-based synchronization barrier, that is, they implement synchronization barriers using memory (and, in some cases, associated memory barriers). Implementing a synchronization barrier as storage virtualizes the synchronization barrier in the same way that storage is virtualized. Furthermore, there is no practical limit to the number of barrier objects that can be instantiated, at least in the event that each virtual storage space can be used to support and store a synchronization barrier.
Es sei zum Beispiel angenommen, dass ein Synchronisierungsbarrierenobjekt
Durch eine Instantiierung von Synchronisierungsbarrierenobjekten im Speicher werden die oben diskutierten Leistungskompromisse wesentlich erleichtert, da die Implementierung von Objekten im Speicher ein einfaches Problem ist, das die meisten Entwickler beherrschen. Da ein Entwickler so viele Barriereobjekte instanziieren kann (wenn auch nicht wirklich unbegrenzt, so ist die Anzahl doch praktisch unbegrenzt, wenn die Größe des Haupt- oder globalen Speichers zunimmt), besteht keine Notwendigkeit, einen Kompromiss zwischen der Anzahl der Synchronisierungsbarrieren und der Task-Kapazität einzugehen.Instantiating synchronization barrier objects in memory greatly eases the performance tradeoffs discussed above, since implementing objects in memory is a simple problem that most developers have mastered. Since a developer can instantiate so many barrier objects (although not really unlimited, the number is practically unlimited as the size of the main or global memory increases), there is no need to compromise between the number of synchronization barriers and the task Capacity to enter.
Da Synchronisierungsbarrieren gespeichert werden, d.h. bei bespielhaften Ausführungsformen im Speicher implementiert sind, profitieren sie auch von der gemeinsamen Nutzung des Speichers und der Speicherhierarchie. Frühere Hardware-Synchronisierungsbarriereschaltungen wurden oft direkt im Prozessor implementiert. Daher galten solche Hardware-implementierten Barrieren im Allgemeinen nicht zwischen verschiedenen Prozessoren. Mit anderen Worten, jeder Prozessor konnte seine eigenen hardwarebasierten Barrieren haben, die er zur Verwaltung von Tasks oder Aufgaben mit mehreren Threads verwenden konnte, die auf diesem Prozessor ausgeführt wurden, aber diese Hardware-Barrieren waren bei der Koordinierung der Aktivitäten außerhalb des jeweiligen Prozessors nicht hilfreich, z.B. in einem System mit mehreren Prozessoren, die möglicherweise an der parallelen Implementierung derselben Verarbeitungsphase beteiligt waren. Eine solche Koordination erforderte in der Regel die Verwendung eines gemeinsam genutzten globalen (CPU-) Hauptspeichers, der langsam sein und andere Leistungsprobleme aufweisen konnte.Because synchronization barriers are stored, i.e. implemented in memory in exemplary embodiments, they also benefit from sharing the memory and the memory hierarchy. Previous hardware synchronization barrier circuits were often implemented directly in the processor. Therefore, such hardware implemented barriers generally did not apply between different processors. In other words, each processor could have its own hardware-based barriers that it could use to manage tasks or multi-threaded tasks running on that processor, but those hardware barriers were not in coordinating activities outside of that processor useful, for example in a system with multiple processors that may have been involved in implementing the same processing phase in parallel. Such coordination typically required the use of shared global (CPU) memory, which could be slow and have other performance issues.
Im Gegensatz dazu ermöglichen beispielsweise nicht einschränkende Ausführungsformen, die eine Synchronisierungsbarriere unter Verwendung von Speicherbefehlen implementieren, die Unterstützung von Funktionalität außerhalb der Grenzen eines Prozessors, einer GPU oder eines SOC (System-on-a-Chip). Insbesondere können Synchronisierungsbarrieren jetzt auf jeder Ebene der Speicherhierarchie implementiert werden, einschließlich z.B. Ebenen, die über mehrere Kerne, mehrere Streaming-Multiprozessoren, mehrere GPUs, mehrere Chips, mehrere SOCs oder mehrere Systeme gemeinsam genutzt werden und in einigen Fällen in auf solchen Hierarchien basierenden Speicher-Caches zwischengespeichert werden.In contrast, for example, non-limiting embodiments that implement a synchronization barrier using memory instructions allow functionality to be supported outside the confines of a processor, GPU, or SOC (System-on-a-Chip). In particular, synchronization barriers can now be implemented at any level of the storage hierarchy, including, for example, levels shared across multiple cores, multiple streaming multiprocessors, multiple GPUs, multiple chips, multiple SOCs, or multiple systems, and in some cases, storage based on such hierarchies -Caches are cached.
Beispiel für eine Implementierung eines nicht einschränkenden speichergestützten SystemsExample of a non-limiting memory-based system implementation
Beispielsweise kann bei einem beispielhaften System mit Bezug zu
Solche speicherimplementierten Synchronisierungsbarrieren können daher verwendet werden, um zwischen Threads, die auf einem gemeinsamen Kern
Diese Fähigkeit wird durch die Implementierung der speichergestützten Synchronisierungsbarriere auf einer geeigneten Ebene der Speicherhierarchie ermöglicht, so dass auf sie zugegriffen werden kann und sie von mehreren Prozessen und/oder Prozessoren gemeinsam genutzt werden kann, während sie z.B. durch allgemein verwendete Speicherbarrieren geschützt ist. Was die Skalierbarkeit anbelangt, so können mit zunehmender Erweiterung der Speicherhierarchie immer mehr Threads diese Synchronisierungsbarrieren nutzen, während kleinere Hierarchien möglicherweise begrenztere Anwendungsbereiche der Barriere unterstützen.This capability is made possible by implementing the memory-based synchronization barrier at an appropriate level of the memory hierarchy so that it can be accessed and shared by multiple processes and / or processors while being protected, for example, by commonly used memory barriers. For scalability, as the storage hierarchy expands, more threads can leverage these synchronization barriers, while smaller hierarchies may support more limited uses of the barrier.
Verwendung von Synchronisierungsbarrieren zur Synchronisierung von HardwareUsing synchronization barriers to synchronize hardware
Eine zusätzliche Einschränkung der meisten früheren Implementierungen von Hardware-Synchronisierungsbarrieren bestand darin, dass sie zwar Software-Ausführungen blockieren konnten, aber nicht unbedingt Hardware-Prozesse. Ein Prozess, der typischerweise von einer früheren GPU-Hardware ausgeführt wird, sind Kopiervorgänge. Während ein Prozessor Speicherbefehle wie das Laden bzw. load und Speichern bzw. store, die von der Lade-/Speichereinheit
Häufig müssen solche Kopiervorgänge abgeschlossen werden, bevor eine nächste Verarbeitungsphase beginnen kann, da z. B. der Übergang zu der nächsten Verarbeitungsphase vom Abschluss einer Aktualisierung einer Datenstruktur im Speicher abhängen kann. Da jedoch frühere Implementierungen von Synchronisierungsbarrieren abhängig von blockierenden Threads und nicht abhängig von Hardware implementiert wurden, war über die hardwarebasierten Synchronisierungs-Grundelemente hinaus ein zusätzlicher Mechanismus erforderlich, um sicherzustellen, dass die richtigen Daten vorhanden waren, nachdem alle von dem Synchronisierungs-Grundelement überwachten Threads abgeschlossen waren, bevor die nächste Verarbeitungsphase beginnen konnte. Mit anderen Worten, in früheren traditionellen Ansätzen konnten solche zusätzlichen, hardwarebasierten Maschinen (z.B. Kopiermaschine
Im Gegensatz zu solchen früheren Ansätzen werden gemäß einem beispielhaften nicht einschränkenden Merkmal Kopieroperationen mit direktem Speicherzugriff (DMA), die von einer Kopiermaschine
Ein Beispiel für ein nicht einschränkendes Merkmal der hier vorgestellten Implementierungen ist daher die Synchronisierung von Transaktionen von Kopiermaschinen
Bei einer hierin beschriebenen nicht einschränkenden Ausführungsform verhalten sich Hardware-Operationen, wie z.B. die einmal initiierten Operationen von Kopiermaschinen
Mit massiv-parallelen modernen GPUs lassen sich komplexe Berechnungen am häufigsten kollektiv durchführen. So können die Berechnungen kollektiv unter Verwendung einer großen Anzahl von Threads durchgeführt werden, die wiederum gemeinsam eine noch größere Anzahl von hardwarebasierten Operationen wie DMA-Operationen durch eine oder beliebig viele Kopiermaschinen
Bei einer massiv parallelen Architektur, die viele Threads unterstützen kann, könnte es ineffizient sein, jeden einzelnen Thread so zu programmieren, dass er auf den Abschluss jeder hardwarebasierten Operation wartet. Das aktuelle Beispiel eines nicht einschränkenden Verfahrens stellt stattdessen ein Synchronisierungs-Grundelement bereit, das es der großen Anzahl von Threads (und in einigen Ausführungsformen auch Kopieroperationen) ermöglicht, gemeinsam auf den Abschluss einer oder mehrerer hardwarebasierter Operationen (z.B. Kopieren) zu warten, von denen die nächste Verarbeitungsphase abhängt.With a massively parallel architecture that can support many threads, it might be inefficient to program each individual thread to wait for each hardware-based operation to complete. The current example of a non-limiting method instead provides a synchronization primitive that allows the large number of threads (and, in some embodiments, copy operations) to wait together for one or more hardware-based operations (e.g., copy) to complete the next processing phase depends.
In diesem Fall ist das Barriere-Grundelement eine andere Art von Mechanismus als ein Semaphor oder ein Flag (die manchmal in früheren Ansätzen zur Synchronisierung mit hardwarebasierten Prozessen verwendet wurden), da das neue Synchronisierungs-Grundelement eine kollektive Synchronisierung bereitstellt. Es unterscheidet sich von einem Thread, der ein Flag oder eine Semaphore für einen anderen Thread setzt. Stattdessen erlaubt es, dass N Threads bis zum Abschluss von potenziell M hardwarebasierten Kopiervorgängen blockiert werden, wobei N und M eine beliebige nicht-negative ganze Zahl sind. Eine solche kollektive Funktionalität muss nicht notwendigerweise auf softwarebasierte oder speichergestützte Barriereverfahren beschränkt sein, sondern kann in Software, Hardware oder in beiden implementiert werden.In this case, the barrier primitive is a different type of mechanism than a semaphore or flag (which were sometimes used in previous approaches to synchronizing with hardware-based processes) because the new synchronization primitive provides collective synchronization. It is different from a thread setting a flag or semaphore for another thread. Instead, it allows N threads to be blocked pending completion of potentially M hardware-based copies, where N and M are any non-negative integers. Such collective functionality need not necessarily be limited to software-based or memory-based barrier methods, but can be implemented in software, hardware, or both.
Hardware-beschleunigte SynchronisierungsbarriereHardware accelerated synchronization barrier
Um die obige Funktionalität zu ermöglichen und eine höhere Leistung zu erzielen, stellen beispielsweise nicht einschränkende Ausführungsformen eine Hardware-beschleunigte Implementierung von speichergestützten Barrieren bereit. Die Implementierung wird durch Software-Befehle aufgerufen, integriert aber zusätzliche Hardware-Funktionalität, wie z.B. ein hardwarebasiertes Kopieren, in denselben Synchronisierungsbarrieremechanismus, der zur Blockierung von Software-Prozessen, wie z.B. Threads, verwendet wird.For example, to enable the above functionality and achieve higher performance, non-limiting embodiments provide hardware accelerated implementation of memory-based barriers. The implementation is called by software commands, but integrates additional hardware functionality, such as hardware-based copying, into the same synchronization barrier mechanism that is used to block software processes such as threads.
Während es, z.B. gemäß nicht einschränkender Implementierungen, möglich wäre, eine solche Funktion vollständig in Software zu implementieren, wird eine Hardware-Beschleunigung genutzt, um zumindest die Funktion zum Zurücksetzen einer Barriere effizienter zu implementieren, und sie wird auch genutzt, um eine Schnittstelle zu Hardware-basierten Prozessen wie DMA-Kopiermaschinen zu schaffen und so Hardware-Funktionen zu ermöglichen, eine Barriere zurückzusetzen. Bei einigen Ausführungsformen könnte ein dedizierter hardwarebasierter Beschleuniger verwendet werden, um die Synchronisierungsbarriere im Cache zu halten.While it would be possible, for example according to non-limiting implementations, to implement such a function entirely in software, hardware acceleration is used to at least implement the function of resetting a barrier more efficiently, and it is also used to interface with To create hardware-based processes such as DMA copy machines and thus to enable hardware functions to reset a barrier. In some embodiments, a dedicated hardware-based accelerator could be used to cache the synchronization barrier.
Bei früheren softwareimplementierten Versionen erkannte der zuletzt ankommende Thread, dass er der zuletzt ankommende Thread war und modifizierte einen Zähler entsprechend, indem er das Kompliment zum aktuellen Wert des Zählers hinzufügte, um den Zähler auf einen Startwert zurückzusetzen. Als Beispiel sei auf den Java-„Phaser“, der üblicherweise in virtuellen Java-Maschinen implementiert wird, verwiesen. DMA-Maschinen sind bei einigen beispielhaften Implementierungen nicht in Software geschrieben. Da die DMA-Maschinen in einigen Fällen für das Zurücksetzen der Barriere verantwortlich sein können und da sie keine Software sind, ist ein solches Zurücksetzen bei diesen Implementierungen in Hardware wünschenswert. Aus diesem Grund stellen beispielhafte nicht einschränkende Implementierungen eine hardwarebeschleunigte Rücksetzoperation bereit. Andere beispielhafte nicht einschränkende Implementierungen des hier vorgestellten Verfahrens könnten jedoch auf Phaser, Latches oder andere Synchronisierungs-Grundelemente angewandt werden, die keine Barrieren sind. Ein solches Verfahren könnte auch für die Verwendung mit Semaphoren angewandt werden.In previous software-implemented versions, the last thread to arrive recognized that it was the last thread to arrive and modified a counter accordingly, adding the compliment to the current value of the counter to reset the counter to a starting value. As an example, refer to the Java “Phaser”, which is usually implemented in Java virtual machines. DMA machines are not written in software in some example implementations. Because the DMA machines may be responsible for resetting the barrier in some cases, and because they are not software, such resetting is desirable in these hardware implementations. For this reason, exemplary non-limiting implementations provide a hardware accelerated reset operation. However, other exemplary, non-limiting implementations of the method presented here could be applied to phasers, latches, or other synchronization primitives that are not barriers. Such a technique could also be applied for use with semaphores.
Software-ImplementierungSoftware implementation
Bei nicht einschränkenden Ausführungsformen ist jeder Ankommen-Warten-Barriere-Zustand eine im Speicher gespeicherte, implementierte (z.B. 64-Bit) Datenstruktur
- 1. Die erwartete Anzahl von Ankünften für jedes Mal, wenn die Barriere benutzt wird (Feld
1908 ). - 2. Die verbleibende Anzahl von Ankünften, die erforderlich sind, um die Barriere aufzuheben (Zählerfeld
1904 ). - 3. Die Barrierephase (zur Wiederverwendung der Barriere) (Feld
1902 ).
- 1. The expected number of arrivals for each time the barrier is used (field
1908 ). - 2. The remaining number of arrivals required to lift the barrier (counter field
1904 ). - 3. The barrier phase (to reuse the barrier) (field
1902 ).
Gemäß beispielhaften nicht einschränkenden Implementierungen ermöglichen Ankommen-Warten-Barrieren eine Zusammenarbeit individueller Threads, so dass der Zählerstand der Felder
Wie es in
Wie in
Wenn der letzte nacheilende Thread (oder Hardware-Prozess) eintrifft und die Barriere gesättigt ist / zurückgesetzt wird, kann der Ankunftszähler
Wie im Folgenden diskutiert ist, erlauben beispielhafte nicht einschränkende Ausführungsformen, dass die Software die Werte des Ankunftszählers
Bei den beispielhaften nicht einschränkenden Ausführungsformen kann die in
Beispiel; Hardware-beschleunigte ImplementierungExample; Hardware accelerated implementation
Daher wird z.B. in nicht einschränkenden Ausführungsformen die Prozessorarchitektur modifiziert, um eine zusätzliche Schaltung bereitzustellen, die hardwarebasierte Prozesse wie DMA in die Implementierung der Synchronisierungsbarriere einbindet, so dass die Hardware in der Lage ist, den Speicher, der die Synchronisierungsbarriere blockiert, zurückzusetzen, wenn sie ihre DMA-Aufgabe abgeschlossen hat und erkennt, dass es sich um den letzten nacheilenden Prozess handelt, der erforderlich ist, um zur nächsten Verarbeitungsphase überzugehen. In beispielhaften nicht einschränkenden Implementierungen müssen sich die Hardware-Änderungen nicht darum kümmern, ein Ankommen von einem Warten zu trennen, wie es oben beschrieben ist, da die Hardware-DMA-Steuerung im Allgemeinen zurückkehrt und für eine nächste Task oder Aufgabe bereit ist, sobald sie die vorherige abgeschlossen hat. Die Zählung, die vom Beendigungszähler
Beispiel einer nicht einschränkenden ImplementierungExample of a non-limiting implementation
Beispielhafte, nicht einschränkende Ausführungsformen hierin implementieren Änderungen an der Instruction Set Architecture (ISA), damit diese Anweisungen für einen Zugriff auf ein neues Synchronisierungs-Grundelement aufweist, das auf eine speichergestützte Speicherung einer Synchronisierungs-Barriere im Speicher verweist. Darüber hinaus weist ein Thread bei beispielhaften nicht einschränkenden Implementierungen anstelle eines Grundelement-Aufrufs zwei verschiedene Grundelement-Aufrufe auf: einen Grundelement-Aufruf „arrive“ an die Barriere und einen Grundelement-Aufruf „wait“ an die Barriere. Zwischen diesen beiden Aufrufen kann der Thread, wie es vorab erklärt und in
Während der Initialisierung richtet das System zunächst die Instanz der Synchronisierungsbarriere im Speicher ein und speichert dort die entsprechenden Daten, die das System zur Implementierung der Barriere halten muss (z.B. Ankunftszähler, Phasenzähler). Typischerweise kann das vom Systementwickler bereitgestellte SDK (Software Development Kit) eine Bibliothek aufweisen, die diese verschiedenen Funktionsaufrufe zur Initiierung einer Synchronisierungsbarriere enthält. In ähnlicher Weise wird die ISA des Verarbeitungssystems modifiziert, um neue Anweisungen für das Synchronisierungsbarriere-arrive und das Synchronisierungsbarriere-wait aufzuweisen.During the initialization, the system first sets up the instance of the synchronization barrier in the memory and stores the corresponding data there that the system must hold to implement the barrier (e.g. arrival counter, phase counter). Typically, the software development kit (SDK) provided by the system developer may have a library that contains these various function calls to initiate a synchronization barrier. Similarly, the ISA of the processing system is modified to include new instructions for the sync barrier arrive and the sync barrier wait.
Bei einer beispielhaften nicht einschränkenden Ausführungsform können die folgenden Softwarefunktionen verwendet werden, um eine im Speicher gespeicherte Instanz eines Ankommen-Warten-Barriere-Grundelements
- • eine _create-Funktion
2100 (siehe5A) wird verwendet, um eine Ankommen-Warten-Barriere im Speicher einzurichten. - • eine _arrive-Funktion
2200 (siehe5B) wird von einem Thread verwendet, um seine Ankunft an einer Ankommen-Warten-Barriere anzuzeigen. Die Barrierephase wird von dieser Funktion zur Verwendung mit der _wait-Funktion zurückgegeben. - • eine _wait-Funktion
2300 (siehe5C ) wird verwendet, um auf die Freigabe einer Ankommen-Warten-Barriere für die vorgesehene Phase zu warten. - • a _dropthread-Funktion
2400 (siehe5D ) entfernt permanent einen Thread von einer Ankommen-Warten-Barriere. Dies ist nützlich, wenn ein Thread endet. - • eine _addonce-Funktion
2500 (siehe5E) fügt dem Zählerstand einer Ankommen-Warten-Barriere einen bestimmten Wert hinzu. - • eine _droponce-Funktion
2600 (siehe5F) reduziert den Zählerstand einer Ankommen-Warten-Barriere um einen bestimmten Wert.
- • a _create function
2100 (please refer5A) is used to set up an arriving-wait barrier in memory. - • an _arrive function
2200 (please refer5B) is used by a thread to indicate its arrival at an arrive-wait barrier. The barrier phase is returned by this function for use with the _wait function. - • a _wait function
2300 (please refer5C ) is used to wait for an arrival-wait barrier to be released for the intended phase. - • a _dropthread function
2400 (please refer5D ) permanently removes a thread from an arrival-wait barrier. This is useful when a thread ends. - • an _addonce function
2500 (please refer5E) adds a certain value to the count of an arrival-wait-barrier. - • a _droponce function
2600 (please refer5F) reduces the count of an arriving-waiting-barrier by a certain value.
Zusätzlich weisen einige nicht einschränkende Ausführungsformen eine zusätzliche Anweisung ARRIVES.LDGSTSBAR.64 auf, die signalisiert, dass alle DMA-Übertragungen von diesem Thread abgeschlossen sind, und den Ankommen-Zählerstand in der Ankommen-Warten-Barriere entsprechend aktualisiert.In addition, some non-limiting embodiments have an additional ARRIVES.LDGSTSBAR.64 instruction that signals that all DMA transfers from this thread have been completed and updates the arriving count in the arriving wait barrier accordingly.
_create_create
Ein spezifischeres Beispiel ist:
- _create(BarPtr, NumThreads);
- Eingabe: BarPtr, NumThreads;
- Initialisieren der Barriere für die angegebene Anzahl von Threads.
- Kern-Grundelement: Cooperative Thread Array- (CTA-) breite geteilte Barriere (zugewiesen durch CTA-breite Synchronisierung).
- BarPtr = Zeiger auf zugewiesene Barriere, die in einem gemeinsam genutzten oder jedem anderen Speicherort gespeichert ist, an dem der Zustand der opaken Barriere gespeichert ist.
- NumThreads: die Anzahl der an dieser Barriere beteiligten Threads, die ankommen müssen, bevor das Warten aufgehoben wird.
- _arrive
- _create (BarPtr, NumThreads);
- Input: BarPtr, NumThreads;
- Initialize the barrier for the specified number of threads.
- Core Primitive: Cooperative Thread Array (CTA) wide shared barrier (assigned by CTA wide sync).
- BarPtr = pointer to assigned barrier, stored in a shared or any other location that stores the state of the opaque barrier.
- NumThreads: the number of threads involved in this barrier that must arrive before the wait is released.
- _arrive
Bei der beispielhaften nicht einschränkenden Ausführungsform kann der Aufruf der _arrive-Funktion
Ein spezifischeres, nicht einschränkendes Beispiel:
- _arrive(BarPhase, BarPtr);
- Eingabe: BarPtr;
- Ausgabe: BarPhase
- _arrive (BarPhase, BarPtr);
- Input: BarPtr;
- Output: BarPhase
Zeigt an, dass ein Thread angekommen ist; gibt die Barrierenphase zurück, die für die Wait-Anweisung verwendet werden soll.Indicates that a thread has arrived; returns the barrier phase to be used for the wait statement.
Bei einer beispielhaften Ausführungsform kann eine Wait-Anweisung durch die Kopiermaschine
_wait(BarPtr, BarPhase)_wait (BarPtr, BarPhase)
Wie in
_wait(BarPtr, BarPhase) muss die BarPhase konsumieren, die durch einen vorherigen Aufruf von _arrive zurückgegeben wurde. Bei einer nicht einschränkenden beispielhaften Ausführungsform, bei der _arrive Seiteneffekte hervorruft, muss _wait auch diese Seiteneffekte hervorrufen. Aber viel typischer ist, dass das Gegenteil passieren wird - nämlich _wait ruft Seiteneffekte hervor und _arrive muss auch diese Seiteneffekte hervorrufen._wait (BarPtr, BarPhase) must consume the BarPhase returned by a previous call to _arrive. In one non-limiting exemplary embodiment where _arrive causes side effects, _wait must also cause those side effects. But it is much more typical that the opposite will happen - namely _wait causes side effects and _arrive must also cause these side effects.
Da im gezeigten Beispiel die _wait-Funktion
Ein spezifischeres Beispiel:
- _wait(BarPtr, BarPhase)
- Eingabe: BarPhase;
- _wait (BarPtr, BarPhase)
- Input: BarPhase;
Warten, bis alle erwarteten Ankünfte für die Barriere für die angegebene Phase der Barriere eingetroffen sind.
für einen Thread für einen Barriere-BarPtr:
- Jedes Wait(BarPtr) weist ein entsprechendes Arrive(BarPtr) auf, und die BarPhase von Arrive(BarPtr) wird als Eingabe für _wait(BarPtr) bereitgestellt; ein Aufruf von _wait(BarPtr) kann nicht auf ein _wait(BarPtr) ohne ein dazwischenliegendes _arrive(BarPtr) folgen.
for a thread for a barrier BarPtr:
- Each Wait (BarPtr) has a corresponding Arrive (BarPtr), and the BarPhase of Arrive (BarPtr) is provided as input to _wait (BarPtr); a call to _wait (BarPtr) cannot follow a _wait (BarPtr) without an intervening _arrive (BarPtr).
Ein Aufruf von _arrive(BarPtr) sollte nicht auf ein _arrive(BarPtr) ohne ein dazwischenliegendes _wait(BarPtr) folgen.
_dropthreadA call to _arrive (BarPtr) should not follow a _arrive (BarPtr) without an intervening _wait (BarPtr).
_dropthread
Die _dropthread-Funktion
Ein spezifischeres Beispiel:
- _dropThread (BarPtr)
- Eingabe: BarPtr;
- Entfernt einen Thread von der Barriere. Nützlich, wenn sich ein Thread beenden möchte.
- _addonce (BarPtr, Count)
- _dropThread (BarPtr)
- Input: BarPtr;
- Removes a thread from the barrier. Useful when a thread wants to end itself.
- _addonce (BarPtr, Count)
Die _addonce-Funktion
Ein spezifischeres Beispiel:
- _add(BarPtr, AddCnt)
- Eingabe: BarPtr, AddCnt;
- _add (BarPtr, AddCnt)
- Input: BarPtr, AddCnt;
AddCnt addiert zusätzliche erwartete Ankünfte für diese Barriere. Es wird nur für eine einmalige Benutzung der Barriere addiert.AddCnt adds additional expected arrivals for this barrier. It is only added for a single use of the barrier.
Für alle an der Barriere beteiligten Threads:For all threads involved in the barrier:
Die Summe aller AddCnt entspricht der Anzahl der _arrive()-Aufrufe.The sum of all AddCnt corresponds to the number of _arrive () calls.
Der Thread, der den _addCnt bereitstellt, kann sich von dem Thread unterscheiden, der den _arrive() ausführt.The thread that provides the _addCnt can be different from the thread that executes the _arrive ().
Ein Thread sollte _add(BarPtr) nicht zwischen _arrive(BarPtr) und _wait(BarPtr) ausführen.A thread should not execute _add (BarPtr) between _arrive (BarPtr) and _wait (BarPtr).
Andere ISA-Ansätze sind möglich. Die Hauptansätze unterscheiden sich in der Art und Weise, wie die erwartete Barriereankunftsanzahl angegeben wird. Einige Optionen weisen auf:
- • Spezifizierung der erwarteten Ankunftsanzahl bei der Erstellung der Barriere.
- • Spezifizierung der erwarteten Ankunftsanzahl jedes Mal, wenn die Barriere von dem Arrive verwendet wird (wie bei der bestehenden SM CTA-Barriere müssen alle Threads die gleiche erwartete Ankunftsanzahl angeben)
- • Spezifizierung der erwarteten Ankunftsanzahl jedes Mal, wenn die Barriere von Wait verwendet wird (wie bei der bestehenden SM CTA-Barriere müssen alle Threads die gleiche erwartete Ankunftsanzahl angeben)
- • hybrid: Spezifizierung der erwarteten Ankunftsanzahl bei der Erstellung der Barriere, aber zusätzliche erwartete Ankünfte können durch das Arrive hinzugefügt werden.
- • Specification of the expected number of arrivals when creating the barrier.
- • Specification of the expected number of arrivals each time the barrier is used by the arrive (as with the existing SM CTA barrier, all threads must specify the same expected number of arrivals)
- • Specification of the expected number of arrivals each time the barrier of Wait is used (as with the existing SM CTA barrier, all threads must specify the same expected number of arrivals)
- • hybrid: Specification of the expected number of arrivals when creating the barrier, but additional expected arrivals can be added by the Arrive.
Beispielhafte nicht einschränkende Mikro-Architektur (die zur Implementierung des Blockdiagramms von
- Barriere-Zustand
- * Phase: Phase der Barriere.
- * Zählerstand: Zählerstand der Barriere.
- * ThreadCnt: Anzahl der an dieser Barriere beteiligten Threads
_create(BarPtr,InitCnt) barrier[BarPtr].initCnt = initCnt; barrier[BarPtr].cnt = initCnt; barrier[BarPtr].phase = 0; _add(BarPtr, addCnt) // Erhöhen der Ankunftsanzahl barrier[BarPtr].cnt += addCnt; Arrive_function(BarPtr) // dies ist nicht Teil der API in einer Ausführungsform // Dekrementieren der Ankunftsanzahl barrier[BarPtr].cnt--; // Prüfen, ob die Ankunft die Barriere aufhebt if (barrier[BarPtr].cnt == 0) { // Aktualisieren der Phase und Rücksetzen des Zählerstands if (barrier[BarPtr].phase == 0) {barrier[BarPtr].phase = 1;} else {bar- rier[BarPtr].phase = 0;} barrier[BarPtr].cnt = barrier[BarPtr].init; // alle auf die Barriere wartenden Warps freigeben }unstall(BarPtr); } Arrive(BarPtr, addCnt, BarPhase) // Zurückgeben der Phase (optional) BarPhase = barrier[BarPtr].phase; // Arrive-Funktion ausführen Arrive_function(BarPtr); LDGSTS_Arrive(BarPtr) // Arrive-Funktion ausführen Arrive_function(BarPtr); BarWait(BarPtr,BarPhase) // wenn sich die Barriere in der gleichen Phase befindet, ist sie noch nicht freigegeben worden, dann anhalten, andernfalls weitermachen. if (barrier[BarPtr].phase == BarPhase) { stall(BarPtr); } DropThread(BarPtr) // Thread entfernt sich selbst von der Barriere barrier[BarPtr].initCnt--; // Arrive-Funktion ausführen Arrive(BarPtr);Exemplary non-limiting micro-architecture (used to implement the block diagram of the
- Barrier state
- * Phase: phase of the barrier.
- * Meter reading: Meter reading of the barrier.
- * ThreadCnt: Number of threads involved in this barrier
_create (BarPtr, InitCnt) barrier [BarPtr] .initCnt = initCnt; barrier [BarPtr] .cnt = initCnt; barrier [BarPtr] .phase = 0; _add (BarPtr, addCnt) // Increase the number of arrivals barrier [BarPtr] .cnt + = addCnt; Arrive_function (BarPtr) // this is not part of the API in any embodiment // Decrement the number of arrivals barrier [BarPtr] .cnt--; // Check that the arrival lifts the barrier if (barrier [BarPtr] .cnt == 0) { // Update the phase and reset the counter reading if (barrier [BarPtr] .phase == 0) {barrier [BarPtr] .phase = 1;} else {bar- rier [BarPtr] .phase = 0;} barrier [BarPtr] .cnt = barrier [BarPtr] .init; // release all warps waiting for the barrier } unstall (BarPtr); } Arrive (BarPtr, addCnt, BarPhase) // return the phase (optional) BarPhase = barrier [BarPtr] .phase; // Execute the Arrive function Arrive_function (BarPtr); LDGSTS_Arrive (BarPtr) // Execute the Arrive function Arrive_function (BarPtr); BarWait (BarPtr, BarPhase) // if the barrier is in the same phase, it is not yet released, then pause, otherwise continue. if (barrier [BarPtr] .phase == BarPhase) {stall (BarPtr); } DropThread (BarPtr) // thread removes itself from the barrier barrier [BarPtr] .initCnt--; // Execute the Arrive function Arrive (BarPtr);
Kooperative Datenbewegung ohne threadsync. DMA Taskbasierte geteilte BarriereCooperative data movement without thread sync. DMA task based shared barrier
Das Programmiermodell kann ein Modell sein, das dem einer Multi-Thread-Barriere entspricht, außer dass die Barriere geteilt ist.The programming model can be a model similar to that of a multi-threaded barrier, except that the barrier is split.
Eine bestehende Multi-Thread-Barriere kann wie folgt beschrieben werden:
- • <PRE>
- • BARRIER
- • <POST>
- • <PRE>
- • BARRIER
- • <POST>
Die Sichtbarkeitsregeln:
- • Die <PRE>.load/stores eines Threads sind garantiert sichtbar für die <POST>-load/stores anderer teilnehmender Threads.
- • Die <POST>-load/stores eines Threads sind garantiert nicht sichtbar für die <PRE>-load/stores anderer teilnehmender Threads.
- • The <PRE> .load / stores of a thread are guaranteed to be visible to the <POST> -load / stores of other participating threads.
- • The <POST> -load / stores of a thread are guaranteed not to be visible to the <PRE> -load / stores of other participating threads.
Die geteilte Multi-Thread-Barriere kann wie folgt beschrieben werden:
- • <PRE>
- • ARRIVE
- • <MIDDLE>
- • WAIT
- • <POST>
- • <PRE>
- • ARRIVE
- • <MIDDLE>
- • WAIT
- • <POST>
Die Sichtbarkeitsregeln (die ersten beiden sind die gleichen wie oben):
- • Die <PRE>-load/stores eines Threads sind garantiert sichtbar für die <POST>-load/stores anderer teilnehmender Threads.
- • Die <POST>-load/stores eines Threads sind garantiert nicht sichtbar für die <PRE>-load/stores anderer teilnehmender Threads.
- • Die <MIDDLE>-load/stores eines Threads haben keine Sichtbarkeitsgarantie-Reihenfolge für andere Threads (zumindest keine Sichtbarkeitsgarantie, die von dieser speziellen Barriere bereitgestellt wird).
- • The <PRE> -load / stores of a thread are guaranteed to be visible to the <POST> -load / stores of other participating threads.
- • The <POST> -load / stores of a thread are guaranteed not to be visible to the <PRE> -load / stores of other participating threads.
- • The <MIDDLE> -load / stores of a thread have no visibility guarantee order for other threads (at least no visibility guarantee provided by this particular barrier).
Die LDGSTS-„DMA“-Anweisung wird logisch wie ein unabhängiger Thread behandelt, der vom aufrufenden Thread abgespalten bzw. „forked“ wurde und einen LDG/STS/ARRIVE ausführt, wonach er endet bzw. „dies“.The LDGSTS “DMA” instruction is logically treated like an independent thread that has been split off or “forked” from the calling thread and executes an LDG / STS / ARRIVE, after which it ends or “this”.
Sichtbarkeitsprobleme mit geteilter BarriereSplit barrier visibility issues
Eine geteilte Barriere bedeutet, dass sich mehrere geteilte Barrieren überlappen können. Alle folgenden Überlappungen sind zulässig und funktional korrekt ohne Deadlock (siehe auch
Bei einigen beispielhaften nicht einschränkenden Ausführungsformen sollten die folgenden Überlappungen nicht erlaubt sein, da sie ein Deadlock erzeugen würden.
→ Deadlock
Beispiel eines ZustandsExample of a state
Bei diesem Beispiel stellt die Operation „Wait(BarPhase_T1, BarPtr)“ sicher, dass alle load-/store-Operationen in Phase0 für alle beteiligten Threads für Thread1 sichtbar sind (markiert durch Arrives) und alle LDGSTS-Ergebnisse im gemeinsamen Speicher sichtbar sind (markiert durch LDGSTS-Arrive). Sobald alle Arrives aufgetreten sind (siehe Linien mit Pfeilen, die phase=0 und dann phase=1 anzeigen), ändert sich die Barrierephase, und der Zählerstand wird neu gesetzt.In this example, the "Wait (BarPhase_T1, BarPtr)" operation ensures that all load / store operations in phase0 are visible for all threads involved for thread1 (marked by arrives) and that all LDGSTS results are visible in the shared memory ( marked by LDGSTS-Arrive). As soon as all arrives have occurred (see lines with arrows indicating phase = 0 and then phase = 1), the barrier phase changes and the count is reset.
Alle hier zitierten Dokumente werden durch Verweis einbezogen, als ob sie ausdrücklich aufgeführt wären.All documents cited here are incorporated by reference as if they were specifically listed.
Obwohl die Erfindung im Zusammenhang mit den gegenwärtig als am praktischsten und bevorzugtesten angesehenen Ausführungsformen beschrieben wurde, ist zu verstehen, dass die Erfindung nicht auf die offenbarten Ausführungsformen beschränkt werden soll, sondern im Gegenteil verschiedene Modifikationen und gleichwertige Anordnungen umfassen soll, die im Geist und Umfang der beigefügten Ansprüche enthalten sind.Although the invention has been described in connection with the embodiments presently considered to be most practical and preferred, it is to be understood that the invention is not intended to be limited to the disclosed embodiments, but on the contrary is intended to include various modifications and equivalent arrangements included in the spirit and scope of the appended claims are included.
ZITATE ENTHALTEN IN DER BESCHREIBUNGQUOTES INCLUDED IN THE DESCRIPTION
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of the documents listed by the applicant was generated automatically and is included solely for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.
Zitierte PatentliteraturPatent literature cited
- US 9117284 [0008]US 9117284 [0008]
- US 10217183 [0008]US 10217183 [0008]
- US 8381203 [0010]US 8381203 [0010]
- US 9158595 [0010]US 9158595 [0010]
- US 9442755 [0010]US 9442755 [0010]
- US 9448803 [0010]US 9448803 [0010]
- US 10002031 [0010]US 10002031 [0010]
- US 10013290 [0010]US 10013290 [0010]
Zitierte Nicht-PatentliteraturNon-patent literature cited
- Xiao et al., „Inter-Block GPU Communication via Fast Barrier Synchronization“, 2010 [0009]Xiao et al., "Inter-Block GPU Communication via Fast Barrier Synchronization", 2010 [0009]
Claims (24)
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962927511P | 2019-10-29 | 2019-10-29 | |
US201962927417P | 2019-10-29 | 2019-10-29 | |
US62/927,417 | 2019-10-29 | ||
US62/927,511 | 2019-10-29 | ||
US16/712,236 | 2019-12-12 | ||
US16/712,236 US11803380B2 (en) | 2019-10-29 | 2019-12-12 | High performance synchronization mechanisms for coordinating operations on a computer system |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102020127707A1 true DE102020127707A1 (en) | 2021-04-29 |
Family
ID=75379069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102020127707.5A Withdrawn DE102020127707A1 (en) | 2019-10-29 | 2020-10-21 | HIGH PERFORMANCE SYNCHRONIZATION MECHANISMS FOR COORDINATING OPERATIONS ON A COMPUTER SYSTEM |
Country Status (1)
Country | Link |
---|---|
DE (1) | DE102020127707A1 (en) |
-
2020
- 2020-10-21 DE DE102020127707.5A patent/DE102020127707A1/en not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE112009000741B4 (en) | Vector instructions for enabling efficient synchronization and parallel reduction operations | |
DE60002200T2 (en) | SWITCHING METHOD IN A MULTITHREAD PROCESSOR | |
DE69907955T2 (en) | GLOBAL AND LOCAL REGISTER SEGMENTATION IN A VLIW PROCESSOR | |
DE102013014169B4 (en) | Dynamically resizeable circular buffers | |
DE112005000706B4 (en) | Method and system for providing user-level multi-threading | |
DE60005701T2 (en) | THREAD SWITCHING LOGIC IN A MULTITHREAD PROCESSOR | |
DE60005002T2 (en) | VERTICAL-THREADED PROCESSOR WITH MULTIDIMENSIONAL MEMORY | |
DE60132633T2 (en) | DIGITAL SIGNAL PROCESSOR DEVICE | |
DE69636861T2 (en) | Microprocessor with load / store operation to / from multiple registers | |
DE102012220267B4 (en) | Arithmetic work distribution - reference counter | |
DE102013208558A1 (en) | Method and system for processing nested stream events | |
DE112012002465T5 (en) | Graphics processor with non-blocking concurrent architecture | |
DE102009012766A1 (en) | An access lock operation to allow atomic updates to a shared memory | |
DE112004001133T5 (en) | Queue locks with monitor memory wait | |
DE112010003750T5 (en) | Hardware for parallel command list generation | |
DE102015111333A1 (en) | OPERATING A 32-BIT OPERATING SYSTEM ON A 64-BIT MACHINE | |
DE112010005821T5 (en) | context switching | |
DE102012213631A1 (en) | Caching context data structures in a vector register file to maintain state data in a multithreaded image processing pipeline | |
DE112005003339T5 (en) | Transaction-based shared data processing operation in a multiprocessor environment | |
DE112015004750T5 (en) | A FINE FAIR ACTIVE BARRIER | |
DE112013005368T5 (en) | PROCESSORS, METHODS AND SYSTEMS FOR REAL-TIME COMMAND TRACKING | |
DE112020000865T5 (en) | STORAGE MANAGEMENT SYSTEM | |
DE102013020967B4 (en) | Technique for performing memory access operations via texture hardware | |
DE112020005987T5 (en) | SETTING CHECKPOINTS IN ACCUMULATOR REGISTER RESULTS IN A MICROPROCESSOR | |
DE102020103521A1 (en) | Minimizing the use of hardware counters in triggered operations for collective communication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed | ||
R016 | Response to examination communication | ||
R002 | Refusal decision in examination/registration proceedings | ||
R006 | Appeal filed | ||
R008 | Case pending at federal patent court | ||
R120 | Application withdrawn or ip right abandoned |