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,每個執行時,應該遞 ceil(outputSize / 4) 增 128 位計數器,其中 outputSizeOutputTensor中的元素數目。

請考慮範例,其中 128 位計數器的值目前 0x48656c6c'6f46726f'6d536561'74746c65 為 ,而 OutputTensor 的大小為 {3,3,20,7219} 。 執行此運算子一次之後,計數器應該遞增 324,855 (產生的輸出元素數目除以 4,進位) 產生計數器值 0x48656c6c'6f46726f'6d536561'746f776e 。 接著,應該提供這個更新的值做為下一個執行這個運算子的輸入。

可用性

這個運算子是在 中 DML_FEATURE_LEVEL_3_0 引進的。

Tensor 條件約束

InputStateTensorOutputStateTensor 必須具有相同的 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