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_PHILOX_4X32_10,它根据 Philox 4x32-10 算法生成伪随机数。
备注
每次执行此运算符时,128 位计数器都应递增。 如果提供了 OutputStateTensor ,则此运算符代表你递增计数器的正确值,并将结果写入 OutputStateTensor。 应递增的量取决于生成的 32 位输出元素的数量和生成器的类型。
对于 DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10,128 位计数器应在每次执行时递 ceil(outputSize / 4)
增,其中 outputSize
是 OutputTensor 中的元素数。
考虑一个示例,其中 128 位计数器的值当前 0x48656c6c'6f46726f'6d536561'74746c65
为 ,而 OutputTensor 的大小为 {3,3,20,7219}
。 执行此运算符一次后,计数器应递增 324,855 (生成的输出元素数除以 4,向上舍入) 导致计数器值 0x48656c6c'6f46726f'6d536561'746f776e
。 然后,应提供此更新的值作为下一次执行此运算符的输入。
可用性
此运算符是在 中 DML_FEATURE_LEVEL_3_0
引入的。
张量约束
InputStateTensor 和 OutputStateTensor 必须具有相同的 DimensionCount 和 Size。
张量支持
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 |