estrutura DML_RANDOM_GENERATOR_OPERATOR_DESC (directml.h)
Preenche um tensor de saída com bits gerados deterministicamente, pseudo-aleatórios e distribuídos uniformemente. Opcionalmente, esse operador também pode gerar um estado de gerador interno atualizado, que pode ser usado durante as execuções subsequentes do operador.
Esse operador é determinístico e se comporta como se fosse uma função pura, ou seja, sua execução não produz efeitos colaterais e não usa nenhum estado global. A saída pseudo-aleatória produzida por esse operador depende exclusivamente dos valores fornecidos no InputStateTensor.
Os geradores implementados por esse operador não são criptograficamente seguros; portanto, esse operador não deve ser usado para criptografia, geração de chave ou outros aplicativos que exigem geração de número aleatório criptograficamente segura.
Sintaxe
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;
};
Membros
InputStateTensor
Tipo: const DML_TENSOR_DESC*
Um tensor de entrada que contém o estado do gerador interno. O tamanho e o formato desse tensor de entrada dependem do DML_RANDOM_GENERATOR_TYPE.
Para DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, esse tensor deve ser do tipo UINT32 e ter tamanhos {1,1,1,6}
. Os primeiros quatro valores de 32 bits contêm um contador de 128 bits de aumento monotonicamente. Os dois últimos valores de 32 bits contêm o valor da chave de 64 bits para o gerador.
Element 0 1 2 3 4 5
(32-bits each) |-------|-------|-------|-------|-------|-------|
<--------128-bit counter------> <-64-bit key-->
Ao inicializar o estado de entrada do gerador pela primeira vez, normalmente o contador de 128 bits (os quatro primeiros valores UINT32 de 32 bits) deve ser inicializado como 0. A chave pode ser escolhida arbitrariamente; valores de chave diferentes produzirão sequências diferentes de números. O valor da chave geralmente é gerado usando uma semente fornecida pelo usuário.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Um tensor de saída que contém os valores pseudo-aleatórios resultantes. Esse tensor pode ter qualquer tamanho.
OutputStateTensor
Tipo: _Maybenull_ const DML_TENSOR_DESC*
Um tensor de saída opcional que contém o estado do gerador interno atualizado. Se fornecido, esse operador usa o InputStateTensor para calcular um estado de gerador atualizado apropriado e grava o resultado no OutputStateTensor. Normalmente, os chamadores salvariam esse resultado e o forneceriam como o estado de entrada em uma execução subsequente desse operador.
Type
Tipo: DML_RANDOM_GENERATOR_TYPE
Um dos valores da enumeração DML_RANDOM_GENERATOR_TYPE , indicando o tipo de gerador a ser usado. Atualmente, o único valor válido é DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, que gera números pseudo-aleatórios de acordo com o algoritmo Philox 4x32-10.
Comentários
Em cada execução desse operador, o contador de 128 bits deve ser incrementado. Se OutputStateTensor for fornecido, ENTÃO, esse operador incrementará o contador com o valor correto em seu nome e gravará o resultado no OutputStateTensor. O valor pelo qual ele deve ser incrementado depende do número de elementos de saída de 32 bits gerados e do tipo do gerador.
Para DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, o contador de 128 bits deve ser incrementado por ceil(outputSize / 4)
em cada execução, em que outputSize
é o número de elementos no OutputTensor.
Considere um exemplo em que o valor do contador de 128 bits é atualmente 0x48656c6c'6f46726f'6d536561'74746c65
e o tamanho de OutputTensor é {3,3,20,7219}
. Depois de executar esse operador uma vez, o contador deve ser incrementado em 324.855 (o número de elementos de saída gerados dividido por 4, arredondado) resultando em um valor de contador de 0x48656c6c'6f46726f'6d536561'746f776e
. Esse valor atualizado deve ser fornecido como uma entrada para a próxima execução desse operador.
Disponibilidade
Esse operador foi introduzido em DML_FEATURE_LEVEL_3_0
.
Restrições do Tensor
InputStateTensor e OutputStateTensor devem ter os mesmos DimensionCount e Sizes.
Suporte ao Tensor
DML_FEATURE_LEVEL_4_0 e superior
Tensor | Tipo | Dimensões | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|---|
InputStateTensor | Entrada | { [1], [1], [1], [1], [1], [1], [1], 6 } | 1 a 8 | UINT32 |
OutputTensor | Saída | { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } | 1 a 8 | UINT32 |
OutputStateTensor | Saída opcional | { [1], [1], [1], [1], [1], [1], [1], 6 } | 1 a 8 | UINT32 |
DML_FEATURE_LEVEL_3_0 e superior
Tensor | Tipo | Dimensões | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|---|
InputStateTensor | Entrada | { 1, 1, 1, 6 } | 4 | UINT32 |
OutputTensor | Saída | { D0, D1, D2, D3 } | 4 | UINT32 |
OutputStateTensor | Saída opcional | { 1, 1, 1, 6 } | 4 | UINT32 |
Requisitos
Cliente mínimo com suporte | Windows 10 Build 20348 |
Servidor mínimo com suporte | Windows 10 Build 20348 |
Cabeçalho | directml.h |