Compartir a través de


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'74746c65y 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