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}
は である必要があります。 最初の 4 つの 32 ビット値には、単調に増加する 128 ビット カウンターが含まれています。 最後の 2 つの 32 ビット値には、ジェネレーターの 64 ビット キー値が含まれています。
Element 0 1 2 3 4 5
(32-bits each) |-------|-------|-------|-------|-------|-------|
<--------128-bit counter------> <-64-bit key-->
ジェネレーターの入力状態を初めて初期化するときは、通常、128 ビット カウンター (最初の 4 つの 32 ビット UINT32 値) を 0 に初期化する必要があります。 キーは任意に選択できます。キー値が異なると、数値のシーケンスが異なります。 キーの値は、通常、ユーザー指定の シードを使用して生成されます。
OutputTensor
型: const DML_TENSOR_DESC*
結果の擬似ランダム値を保持する出力テンソル。 このテンソルは任意のサイズにすることができます。
OutputStateTensor
型: _Maybenull_ const DML_TENSOR_DESC*
更新された内部ジェネレーターの状態を保持するオプションの出力テンソル。 指定した場合、この演算子は InputStateTensor を使用して適切な更新されたジェネレーターの状態を計算し、その結果を OutputStateTensor に書き込みます。 通常、呼び出し元はこの結果を保存し、この演算子の後続の実行時に入力状態として指定します。
Type
使用するジェネレーターの種類を示す、 DML_RANDOM_GENERATOR_TYPE 列挙型の値の 1 つ。 現在、唯一有効な値は 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}
例を考えてみましょう。 この演算子を 1 回実行した後、カウンターを 324,855 ずつインクリメントする必要があります (生成された出力要素の数を 4 で除算し、切り上げます)。0x48656c6c'6f46726f'6d536561'746f776e
この更新された値は、この演算子の次の実行の入力として指定する必要があります。
可用性
この演算子は、 で DML_FEATURE_LEVEL_3_0
導入されました。
テンソル制約
InputStateTensor と OutputStateTensor には、同じ DimensionCount と サイズが必要です。
Tensor のサポート
DML_FEATURE_LEVEL_4_0以上
テンソル | 種類 | Dimensions | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|---|
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以上
テンソル | 種類 | Dimensions | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|---|
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 |
Header | directml.h |