DML_RANDOM_GENERATOR_OPERATOR_DESC 结构 (directml.h)

使用确定性生成的伪随机均匀分布位填充输出张量。 此运算符还可以根据需要输出更新的内部生成器状态,该状态可在运算符的后续执行期间使用。

此运算符是确定性的,其行为就像是纯函数一样,也就是说,它的执行不会产生任何副作用,并且不使用全局状态。 此运算符生成的伪随机输出完全取决于 InputStateTensor 中提供的值。

此运算符实现的生成器在加密上不安全;因此,不应将此运算符用于加密、密钥生成或其他需要加密安全随机数生成的应用程序。

语法

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;
};

成员

InputStateTensor

类型: const DML_TENSOR_DESC*

包含内部生成器状态的输入张量。 此输入张量的大小和格式取决于 DML_RANDOM_GENERATOR_TYPE

对于 DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10,此张量的类型必须为 UINT32,并且大小 {1,1,1,6}为 。 前四个 32 位值包含单调递增的 128 位计数器。 最后两个 32 位值包含生成器的 64 位键值。

    Element        0       1       2       3       4       5
(32-bits each) |-------|-------|-------|-------|-------|-------|
                <--------128-bit counter------> <-64-bit key-->

首次初始化生成器的输入状态时,通常 128 位计数器 () 的前四个 32 位 UINT32 值应初始化为 0。 可以任意选择密钥;不同的键值将生成不同的数字序列。 密钥的值通常是使用用户提供的 种子生成的。

OutputTensor

类型: const DML_TENSOR_DESC*

保存生成的伪随机值的输出张量。 此张量可以是任何大小。

OutputStateTensor

类型:_Maybenull_ const DML_TENSOR_DESC*

一个可选的输出张量,用于保存更新的内部生成器状态。 如果已提供,则此运算符使用 InputStateTensor 计算相应的更新生成器状态,并将结果写入 OutputStateTensor。 通常,调用方将保存此结果,并在后续执行此运算符时将其作为输入状态提供。

Type

类型: DML_RANDOM_GENERATOR_TYPE

DML_RANDOM_GENERATOR_TYPE枚举中的值之一,指示要使用的生成器类型。 目前,唯一有效的值为 DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10,它根据 Philox 4x32-10 算法生成伪随机数。

备注

每次执行此运算符时,128 位计数器都应递增。 如果提供了 OutputStateTensor ,则此运算符代表你递增计数器的正确值,并将结果写入 OutputStateTensor。 应递增的量取决于生成的 32 位输出元素的数量和生成器的类型。

对于 DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10,128 位计数器应在每次执行时递 ceil(outputSize / 4) 增,其中 outputSizeOutputTensor 中的元素数。

考虑一个示例,其中 128 位计数器的值当前 0x48656c6c'6f46726f'6d536561'74746c65为 ,而 OutputTensor 的大小为 {3,3,20,7219}。 执行此运算符一次后,计数器应递增 324,855 (生成的输出元素数除以 4,向上舍入) 导致计数器值 0x48656c6c'6f46726f'6d536561'746f776e。 然后,应提供此更新的值作为下一次执行此运算符的输入。

可用性

此运算符是在 中 DML_FEATURE_LEVEL_3_0引入的。

张量约束

InputStateTensorOutputStateTensor 必须具有相同的 DimensionCountSize

张量支持

DML_FEATURE_LEVEL_4_0 及更高版本

种类 维度 支持的维度计数 支持的数据类型
InputStateTensor 输入 { [1], [1], [1], [1], [1], [1], [1], 6 } 1 到 8 UINT32
OutputTensor 输出 { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } 1 到 8 UINT32
OutputStateTensor 可选输出 { [1], [1], [1], [1], [1], [1], [1], 6 } 1 到 8 UINT32

DML_FEATURE_LEVEL_3_0 及更高版本

种类 维度 支持的维度计数 支持的数据类型
InputStateTensor 输入 { 1, 1, 1, 6 } 4 UINT32
OutputTensor 输出 { D0, D1, D2, D3 } 4 UINT32
OutputStateTensor 可选输出 { 1, 1, 1, 6 } 4 UINT32

要求

   
最低受支持的客户端 Windows 10内部版本 20348
最低受支持的服务器 Windows 10内部版本 20348
标头 directml.h