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,每個執行時,應該遞 ceil(outputSize / 4)
增 128 位計數器,其中 outputSize
是 OutputTensor中的元素數目。
請考慮範例,其中 128 位計數器的值目前 0x48656c6c'6f46726f'6d536561'74746c65
為 ,而 OutputTensor 的大小為 {3,3,20,7219}
。 執行此運算子一次之後,計數器應該遞增 324,855 (產生的輸出元素數目除以 4,進位) 產生計數器值 0x48656c6c'6f46726f'6d536561'746f776e
。 接著,應該提供這個更新的值做為下一個執行這個運算子的輸入。
可用性
這個運算子是在 中 DML_FEATURE_LEVEL_3_0
引進的。
Tensor 條件約束
InputStateTensor 和 OutputStateTensor 必須具有相同的 DimensionCount 和 大小。
Tensor 支援
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 |