Bei früheren Shadermodellen macht die HLSL-Programmierung nur einen einzelnen Ausführungsthread verfügbar. Ab Modell 6.0 werden neue Vorgänge auf Wellenebene bereitgestellt, um die Parallelität aktueller GPUs explizit zu nutzen. Viele Threads können im Sperrschritt gleichzeitig auf demselben Kern ausgeführt werden. Beispielsweise ermöglichen die systeminternen Modell 6.0 die Beseitigung von Barrierkonstrukten, wenn der Synchronisierungsbereich innerhalb der Breite des SIMD-Prozessors liegt, oder einen anderen Satz von Threads, die bekannt sind, dass sie relativ zueinander atomisch sind.
Mögliche Anwendungsfälle sind: Streamverdichtung, Reduzierungen, Blocktransponierung, bitonic Sortierung oder Fast Fourier Transforms (FFT), Binning, Streamdeduplizierung und ähnliche Szenarien.
Die meisten systeminternen Elemente werden in Pixel-Shadern und Compute-Shadern angezeigt, obwohl es einige Ausnahmen gibt (für jede Funktion angegeben). Die Funktionen wurden den Anforderungen für DirectX-Featureebene 12.0 unter API-Ebene 12 hinzugefügt.
Der <Typparameter> und der Rückgabewert für diese Funktionen impliziert den Typ des Ausdrucks. Die unterstützten Typen sind diejenigen aus der folgenden Liste, die auch im Ziel-Shadermodell für Ihre App vorhanden sind:
half, half2, half3, half4
float, float2, float3, float4
double, double2, double3, double4
int, int2, int3, int4
uint, uint2, uint3, uint4
short, short2, short3, short4
ushort, ushort2, ushort3, ushort4
uint64_t, uint64_t2, uint64_t3, uint64_t4
Einige Vorgänge (z. B. die bitweisen Operatoren) unterstützen nur die Ganzzahltypen.
Begriff
Begriff
Definition
Bereich
Ein einzelner Ausführungsthread. Die Shadermodelle vor Version 6.0 machen nur eines auf Sprachebene verfügbar, sodass die Erweiterung der parallelen SIMD-Verarbeitung vollständig der Implementierung überlassen bleibt.
Wave
Eine Reihe von Lanes (Threads), die gleichzeitig im Prozessor ausgeführt werden. Es sind keine expliziten Barrieren erforderlich, um zu gewährleisten, dass sie parallel ausgeführt werden. Ähnliche Konzepte umfassen "Warp" und "Wavefront".
Inaktive Spur
Eine Spur, die nicht ausgeführt wird, z. B. aufgrund des Ablaufs der Steuerung oder aufgrund unzureichender Arbeit, um die Mindestgröße der Welle auszufüllen.
Aktive Spur
Eine Spur, für die die Ausführung ausgeführt wird. In Pixel-Shadern kann er beliebige Hilfspixelspuren enthalten.
Viereck
Ein Satz von vier angrenzenden Lanes, die Pixeln entsprechen, die in einem 2x2-Quadrat angeordnet sind. Sie werden verwendet, um Farbverläufe durch Differenzierung in x oder y abzuschätzen. Eine Welle kann aus mehreren Quads bestehen. Alle Pixel in einem aktiven Quad werden ausgeführt (und können "Aktive Lanes" sein), aber diejenigen, die keine sichtbaren Ergebnisse erzeugen, werden als "Hilfsgassen" bezeichnet.
Hilfsspur
Eine Spur, die ausschließlich zum Zweck von Farbverläufen in Pixel-Shader-Quads ausgeführt wird. Die Ausgabe einer solchen Spur wird verworfen und daher nicht auf die Zieloberfläche gerendert.
Intrinsische Schattierungssprache
Alle Vorgänge dieses Shadermodells wurden in einer Reihe von systeminternen Funktionen hinzugefügt.
Wave-Abfrage
Die systeminternen Funktionen zum Abfragen einer einzelnen Welle.
Gibt eine 64-Bit-Ganzzahl-Bitmaske ohne Vorzeichen der Auswertung des booleschen Ausdrucks für alle aktiven Lanes in der angegebenen Welle zurück.
*
*
Wave Broadcast
Diese systeminternen Elemente ermöglichen es allen aktiven Lanes in der aktuellen Welle, den Wert von der angegebenen Spur zu empfangen und ihn effektiv zu übertragen. Der Rückgabewert einer ungültigen Spur ist nicht definiert.
Gibt den Wert des Ausdrucks für die aktive Spur der aktuellen Welle mit dem kleinsten Index zurück.
*
*
Wellenreduktion
Diese systeminternen Daten berechnen den angegebenen Vorgang über alle aktiven Lanes in der Welle und senden das Endergebnis an alle aktiven Lanes. Daher ist die Endausgabe für die gesamte Welle gleichmäßig.
Gibt das bitweise AND aller Werte des Ausdrucks über alle aktiven Lanes in der aktuellen Welle zurück und repliziert das Ergebnis auf alle Bahnen in der Welle.
Gibt das bitweise OR aller Werte des Ausdrucks über alle aktiven Lanes in der aktuellen Welle zurück und repliziert das Ergebnis auf alle Bahnen in der Welle.
Gibt das bitweise exklusive OR aller Werte des Ausdrucks über alle aktiven Lanes in der aktuellen Welle hinweg zurück und repliziert das Ergebnis auf alle Bahnen in der Welle.
Zählt die Anzahl der booleschen Variablen, die für alle aktiven Lanes in der aktuellen Welle als true ausgewertet werden, und repliziert das Ergebnis auf alle Bahnen in der Welle.
Summiert den Wert des Ausdrucks über alle aktiven Lanes in der aktuellen Welle hinweg und repliziert ihn auf alle Bahnen in der aktuellen Welle und repliziert das Ergebnis auf alle Bahnen in der Welle.
*
*
Wellenscan und Präfix
Diese systeminternen Funktionen wenden den Vorgang auf jede Spur an und belassen jedes Teilergebnis der Berechnung in der entsprechenden Spur.
Gibt die Summe aller angegebenen booleschen Variablen zurück, die für alle aktiven Lanes mit Indizes, die kleiner als die aktuelle Lane sind, auf TRUE festgelegt sind.
Gibt das Produkt aller Werte in den Lanes vor dieser der angegebenen Welle zurück.
*
*
Quad-wide Shuffle-Vorgänge
Diese systeminternen Funktionen führen Austauschvorgänge für die Werte über eine Welle aus, die bekanntermaßen Pixelshader-Quads enthält, wie hier definiert. Die Indizes der Pixel im Quad werden in scan-line oder leserichtung definiert, wobei die Koordinaten innerhalb eines Quads wie folgt sind:
+---------> X
| [0] [1]
| [2] [3]
v
J
Diese Routinen funktionieren entweder in Compute-Shadern oder Pixelshadern. In Computeshadern arbeiten sie in Quads, die als gleichmäßig geteilte Gruppen von 4 innerhalb einer SIMD-Welle definiert sind. In Pixelshadern sollten sie für Wellen verwendet werden, die von WaveQuadLanes erfasst wurden, da die Ergebnisse andernfalls nicht definiert sind.
Gibt den angegebenen Quellwert zurück, der aus der Lane des aktuellen Quads gelesen wird, das durch quadLaneID [0..3] identifiziert wird, das über das Quad einheitlich sein muss.
Azure HPC ist eine zweckorientierte Cloudfunktion für HPC- und KI-Workloads, die modernste Prozessoren und InfiniBand-Verbindungen der HPC-Klasse verwendet, um die beste Anwendungsleistung, Skalierbarkeit und den besten Nutzen zu erzielen. Mit Azure HPC können Benutzer Innovationen, Produktivität und geschäftliche Agilität mithilfe einer hochverfügbaren Palette von HPC- und KI-Technologien nutzen, die dynamisch zugeordnet werden können, wenn sich Ihre geschäftlichen und technischen Anforderungen ändern. Bei