Структура DML_RANDOM_GENERATOR_OPERATOR_DESC (директмл. h)

Заполняет выходной тензорные с помощью детерминированно сформированных псевдослучайных и единообразно распределенных битов. Этот оператор также может выводить обновленное внутреннее состояние генератора, которое можно использовать при последующих выполнениях оператора.

Этот оператор является детерминированным и ведет себя так, как если бы он был чистой функцией, — т. е. ее выполнение не дает никаких побочных эффектов и не использует глобальное состояние. Выходные данные псевдо-Random, создаваемые этим оператором, зависят только от значений, предоставленных в инпутстатетенсор.

Генераторы, реализованные этим оператором, не защищают криптографически. Поэтому этот оператор не следует использовать для шифрования, создания ключа или других приложений, которым требуется криптографически защищенное формирование случайных чисел.

Важно!

Этот API доступен как часть автономного распространяемого пакета Директмл (см. Microsoft. AI. директмл версии 1,4 и более поздних версий). См. также Журнал версий директмл.

Синтаксис

struct DML_RANDOM_GENERATOR_OPERATOR_DESC
{
  const DML_TENSOR_DESC* InputStateTensor;
  const DML_TENSOR_DESC* OutputTensor;
  _Maybenull_ 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

Тип: _ майбенулл _ const DML_TENSOR_DESC *

Необязательный выходной тензорные, содержащий обновленное состояние внутреннего генератора. Если оно указано, этот оператор использует инпутстатетенсор для вычисления соответствующего обновленного состояния генератора и записывает результат в аутпутстатетенсор. Как правило, вызывающие объекты сохраняют этот результат и передают его в качестве входного состояния при последующем выполнении этого оператора.

Type

Тип: DML_RANDOM_GENERATOR_TYPE

Одно из значений перечисления DML_RANDOM_GENERATOR_TYPE , указывающее тип используемого генератора. В настоящее время единственным допустимым значением является DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10, которое создает псевдо-случайные числа в соответствии с алгоритмом филокс 4X32-10.

Комментарии

При каждом выполнении этого оператора необходимо увеличить 128-разрядный счетчик. Если указан параметр аутпутстатетенсор , этот оператор увеличивает значение счетчика с правильным значением от вашего имени и записывает результат в аутпутстатетенсор. Объем, на который он должен увеличиваться, зависит от числа формируемых 32-разрядных выходных элементов и типа генератора.

Для DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10 значение счетчика 128-bit должно увеличиваться при ceil(outputSize / 4) каждом выполнении, где outputSize — число элементов в аутпуттенсор.

Рассмотрим пример, где значение счетчика 128-разрядов в настоящее время равно 0x48656c6c'6f46726f'6d536561'74746c65 , а размер аутпуттенсор — {3,3,20,7219} . После однократного выполнения этого оператора счетчик должен увеличиваться на 324 855 (число элементов вывода, формируемых на 4, округляя вверх), в результате чего получается значение счетчика 0x48656c6c'6f46726f'6d536561'746f776e . Это обновленное значение затем должно быть указано в качестве входных данных для следующего выполнения этого оператора.

Доступность

Этот оператор появился в DML_FEATURE_LEVEL_3_0 .

Ограничения тензорные

InputStateTensor и OutputStateTensor должны иметь одинаковые размеры.

Поддержка тензорные

Тензорные Вид Измерения Поддерживаемые счетчики измерений Поддерживаемые типы данных
инпутстатетенсор Входные данные {1, 1, 1, 6} 4 ЗНАЧЕНИЕМ
аутпуттенсор Выходные данные {D0, D1, D2, D3} 4 ЗНАЧЕНИЕМ
аутпутстатетенсор Необязательный вывод {1, 1, 1, 6} 4 ЗНАЧЕНИЕМ

Требования

   
Header директмл. h