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_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}
인 예를 생각해 보세요. 이 연산자를 한 번 실행한 후 카운터는 324,855(생성된 출력 요소 수를 4로 나누어 반올림됨)로 증가하여 카운터 값 0x48656c6c'6f46726f'6d536561'746f776e
이 되도록 해야 합니다. 그런 다음 이 업데이트된 값은 이 연산자의 다음 실행을 위한 입력으로 제공되어야 합니다.
가용성
이 연산자는 에서 DML_FEATURE_LEVEL_3_0
도입되었습니다.
텐서 제약 조건
InputStateTensor 및 OutputStateTensor 에는 동일한 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 |