다음을 통해 공유


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비트 카운터가 포함됩니다. 마지막 두 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

사용할 생성기 유형을 나타내는 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) 해야 합니다. 여기서 outputSizeOutputTensor의 요소 수입니다.

128비트 카운터의 값이 현재 0x48656c6c'6f46726f'6d536561'74746c65이고 OutputTensor의 크기가 {3,3,20,7219}인 예를 생각해 보세요. 이 연산자를 한 번 실행한 후 카운터는 324,855(생성된 출력 요소 수를 4로 나누어 반올림됨)로 증가하여 카운터 값 0x48656c6c'6f46726f'6d536561'746f776e이 되도록 해야 합니다. 그런 다음 이 업데이트된 값은 이 연산자의 다음 실행을 위한 입력으로 제공되어야 합니다.

가용성

이 연산자는 에서 DML_FEATURE_LEVEL_3_0도입되었습니다.

텐서 제약 조건

InputStateTensorOutputStateTensor 에는 동일한 DimensionCount크기가 있어야 합니다.

텐서 지원

DML_FEATURE_LEVEL_4_0 이상

텐서 Kind 차원 지원되는 차원 수 지원되는 데이터 형식
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 이상

텐서 Kind 차원 지원되는 차원 수 지원되는 데이터 형식
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