estructura DML_RANDOM_GENERATOR_OPERATOR_DESC (directml.h)
Rellena un tensor de salida con bits deterministas, pseudoaleadores y distribuidos uniformemente. Opcionalmente, este operador también puede generar un estado de generador interno actualizado, que se puede usar durante las ejecuciones posteriores del operador.
Este operador es determinista y se comporta como si fuera una función pura, es decir, su ejecución no produce efectos secundarios y no usa ningún estado global. La salida pseudoaleatoriedad producida por este operador depende únicamente de los valores proporcionados en InputStateTensor.
Los generadores implementados por este operador no son criptográficamente seguros; por lo tanto, este operador no se debe usar para el cifrado, la generación de claves u otras aplicaciones que requieren una generación de números aleatorios segura criptográficamente.
Sintaxis
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;
};
Miembros
InputStateTensor
Tipo: const DML_TENSOR_DESC*
Tensor de entrada que contiene el estado del generador interno. El tamaño y el formato de este tensor de entrada dependen del DML_RANDOM_GENERATOR_TYPE.
Por DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, este tensor debe ser de tipo UINT32 y tener tamaños {1,1,1,6}
. Los cuatro primeros valores de 32 bits contienen un contador de 128 bits que aumenta de forma monotónica. Los dos últimos valores de 32 bits contienen el valor de clave de 64 bits para el generador.
Element 0 1 2 3 4 5
(32-bits each) |-------|-------|-------|-------|-------|-------|
<--------128-bit counter------> <-64-bit key-->
Al inicializar el estado de entrada del generador por primera vez, normalmente el contador de 128 bits (los cuatro primeros valores UINT32 de 32 bits) se debe inicializar en 0. La clave se puede elegir arbitrariamente; los distintos valores de clave generarán secuencias de números diferentes. Normalmente, el valor de la clave se genera mediante un valor de inicialización proporcionado por el usuario.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Tensor de salida que contiene los valores pseudoalealeanos resultantes. Este tensor puede tener cualquier tamaño.
OutputStateTensor
Tipo: _Maybenull_ const DML_TENSOR_DESC*
Un tensor de salida opcional que contiene el estado del generador interno actualizado. Si se proporciona, este operador usa InputStateTensor para calcular un estado de generador actualizado adecuado y escribe el resultado en OutputStateTensor. Normalmente, los autores de llamadas guardarían este resultado y los proporcionarían como estado de entrada en una ejecución posterior de este operador.
Type
Tipo: DML_RANDOM_GENERATOR_TYPE
Uno de los valores de la enumeración DML_RANDOM_GENERATOR_TYPE , que indica el tipo de generador que se va a usar. Actualmente, el único valor válido es DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, que genera números pseudoaleativos según el algoritmo Philox 4x32-10.
Comentarios
En cada ejecución de este operador, se debe incrementar el contador de 128 bits. Si se proporciona OutputStateTensor , ENTONCES este operador incrementa el contador con el valor correcto en su nombre y escribe el resultado en OutputStateTensor. La cantidad que debe incrementarse depende del número de elementos de salida de 32 bits generados y del tipo del generador.
Por DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, el contador de 128 bits debe incrementarse ceil(outputSize / 4)
en cada ejecución, donde outputSize
es el número de elementos de OutputTensor.
Considere un ejemplo en el que el valor del contador de 128 bits es actualmente 0x48656c6c'6f46726f'6d536561'74746c65
y el tamaño de OutputTensor es {3,3,20,7219}
. Después de ejecutar este operador una vez, el contador debe incrementarse en 324 855 (el número de elementos de salida generados dividido por 4, redondeado hacia arriba) lo que da lugar a un valor de contador de 0x48656c6c'6f46726f'6d536561'746f776e
. A continuación, este valor actualizado se debe proporcionar como entrada para la siguiente ejecución de este operador.
Disponibilidad
Este operador se introdujo en DML_FEATURE_LEVEL_3_0
.
Restricciones tensor
InputStateTensor y OutputStateTensor deben tener el mismo DimensionCount y Sizes.
Compatibilidad con Tensor
DML_FEATURE_LEVEL_4_0 y versiones posteriores
Tensor | Kind | Dimensions | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|---|
InputStateTensor | Entrada | { [1], [1], [1], [1], [1], [1], [1], 6 } | De 1 a 8 | UINT32 |
OutputTensor | Resultados | { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } | De 1 a 8 | UINT32 |
OutputStateTensor | Salida opcional | { [1], [1], [1], [1], [1], [1], [1], 6 } | De 1 a 8 | UINT32 |
DML_FEATURE_LEVEL_3_0 y versiones posteriores
Tensor | Kind | Dimensions | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|---|
InputStateTensor | Entrada | { 1, 1, 1, 6 } | 4 | UINT32 |
OutputTensor | Resultados | { D0, D1, D2, D3 } | 4 | UINT32 |
OutputStateTensor | Salida opcional | { 1, 1, 1, 6 } | 4 | UINT32 |
Requisitos
Cliente mínimo compatible | Compilación 20348 de Windows 10 |
Servidor mínimo compatible | Compilación 20348 de Windows 10 |
Encabezado | directml.h |