Compartilhar via


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