DML_RANDOM_GENERATOR_OPERATOR_DESC-Struktur (directml.h)
Füllt einen Ausgabe tensor mit deterministisch generierten, pseudo-zufälligen, gleichmäßig verteilten Bits. Dieser Operator kann optional auch einen aktualisierten internen Generatorzustand ausgeben, der bei nachfolgenden Ausführungen des Operators verwendet werden kann.
Dieser Operator ist deterministisch und verhält sich so, als wäre er eine reine Funktion, d. h. seine Ausführung erzeugt keine Nebenwirkungen und verwendet keinen globalen Zustand. Die von diesem Operator erzeugte pseudo-zufällige Ausgabe ist ausschließlich von den im InputStateTensor angegebenen Werten abhängig.
Die von diesem Operator implementierten Generatoren sind kryptografisch nicht sicher. Daher sollte dieser Operator nicht für Verschlüsselung, Schlüsselgenerierung oder andere Anwendungen verwendet werden, die kryptografisch sichere Zufallszahlengenerierung erfordern.
Syntax
struct DML_RANDOM_GENERATOR_OPERATOR_DESC {
const DML_TENSOR_DESC *InputStateTensor;
const DML_TENSOR_DESC *OutputTensor;
const DML_TENSOR_DESC *OutputStateTensor;
DML_RANDOM_GENERATOR_TYPE Type;
};
Member
InputStateTensor
Typ: const DML_TENSOR_DESC*
Ein Eingabe tensor, der den internen Generatorzustand enthält. Größe und Format dieses Eingabe tensors hängen vom DML_RANDOM_GENERATOR_TYPE ab.
Für DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10 muss dieser Tensor vom Typ UINT32 sein und die Größe {1,1,1,6}
aufweisen. Die ersten vier 32-Bit-Werte enthalten einen monoton steigenden 128-Bit-Zähler. Die letzten beiden 32-Bit-Werte enthalten den 64-Bit-Schlüsselwert für den Generator.
Element 0 1 2 3 4 5
(32-bits each) |-------|-------|-------|-------|-------|-------|
<--------128-bit counter------> <-64-bit key-->
Bei der erstmaligen Initialisierung des Eingabezustands des Generators sollte in der Regel der 128-Bit-Zähler (die ersten vier 32-Bit-UINT32-Werte) auf 0 initialisiert werden. Der Schlüssel kann willkürlich ausgewählt werden; unterschiedliche Schlüsselwerte erzeugen unterschiedliche Zahlenfolgen. Der Wert für den Schlüssel wird in der Regel mithilfe eines vom Benutzer bereitgestellten Startwerts generiert.
OutputTensor
Typ: const DML_TENSOR_DESC*
Ein Ausgabe tensor, der die resultierenden Pseudo-Zufallswerte enthält. Dieser Tensor kann eine beliebige Größe aufweisen.
OutputStateTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein optionaler Ausgabe tensor, der den aktualisierten internen Generatorzustand enthält. Falls angegeben, verwendet dieser Operator inputStateTensor , um einen entsprechenden aktualisierten Generatorzustand zu berechnen, und schreibt das Ergebnis in den OutputStateTensor. In der Regel speichern Aufrufer dieses Ergebnis und geben es als Eingabezustand bei einer nachfolgenden Ausführung dieses Operators an.
Type
Typ: DML_RANDOM_GENERATOR_TYPE
Einer der Werte aus der DML_RANDOM_GENERATOR_TYPE Enumeration, der den Typ des zu verwendenden Generators angibt. Derzeit ist der einzige gültige Wert DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, der pseudo-zufällige Zahlen gemäß dem Philox 4x32-10-Algorithmus generiert.
Hinweise
Bei jeder Ausführung dieses Operators sollte der 128-Bit-Zähler erhöht werden. Wenn der OutputStateTensor angegeben wird, erhöht DIESER Operator DEN Zähler mit dem richtigen Wert in Ihrem Namen und schreibt das Ergebnis in den OutputStateTensor. Der Betrag, um den es erhöht werden soll, hängt von der Anzahl der generierten 32-Bit-Ausgabeelemente und dem Typ des Generators ab.
Für DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10 sollte der 128-Bit-Zähler bei jeder Ausführung um ceil(outputSize / 4)
erhöht werden, wobei outputSize
die Anzahl der Elemente im OutputTensor entspricht.
Betrachten Sie ein Beispiel, in dem der Wert des 128-Bit-Zählers derzeit 0x48656c6c'6f46726f'6d536561'74746c65
und die Größe des OutputTensor ist {3,3,20,7219}
. Nachdem dieser Operator einmal ausgeführt wurde, sollte der Zähler um 324.855 erhöht werden (die Anzahl der generierten Ausgabeelemente dividiert durch 4, aufgerundet), was zu einem Zählerwert von 0x48656c6c'6f46726f'6d536561'746f776e
führt. Dieser aktualisierte Wert sollte dann als Eingabe für die nächste Ausführung dieses Operators bereitgestellt werden.
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_3_0
eingeführt.
Tensoreinschränkungen
InputStateTensor und OutputStateTensor müssen über die gleichen DimensionCount und Sizes verfügen.
Tensorunterstützung
DML_FEATURE_LEVEL_4_0 und höher
Tensor | Typ | Dimensionen | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|---|
InputStateTensor | Eingabe | { [1], [1], [1], [1], [1], [1], [1], 6 } | 1 bis 8 | UINT32 |
OutputTensor | Ausgabe | { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } | 1 bis 8 | UINT32 |
OutputStateTensor | Optionale Ausgabe | { [1], [1], [1], [1], [1], [1], [1], 6 } | 1 bis 8 | UINT32 |
DML_FEATURE_LEVEL_3_0 und höher
Tensor | Typ | Dimensionen | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|---|
InputStateTensor | Eingabe | { 1, 1, 1, 6 } | 4 | UINT32 |
OutputTensor | Ausgabe | { D0, D1, D2, D3 } | 4 | UINT32 |
OutputStateTensor | Optionale Ausgabe | { 1, 1, 1, 6 } | 4 | UINT32 |
Anforderungen
Unterstützte Mindestversion (Client) | Windows 10 Build 20348 |
Unterstützte Mindestversion (Server) | Windows 10 Build 20348 |
Kopfzeile | directml.h |