DML_SCATTER_OPERATOR_DESC 구조체(directml.h)
전체 입력 텐서를 출력에 복사한 다음, 선택한 인덱스를 업데이트 텐서의 해당 값으로 덮어씁니다. 이 연산자는 다음 의사 코드를 수행합니다.
output = input
output[index[i, j, k, ...], j, k, ...] = updates[i, j, k, ...] // if axis == 0
output[i, index[i, j, k, ...], k, ...] = updates[i, j, k, ...] // if axis == 1
output[i, j, index[i, j, k, ...], ...] = updates[i, j, k, ...] // if axis == 2
...
두 출력 요소 인덱스가 겹치면(유효하지 않음) 마지막 쓰기가 우선하는 것을 보장할 수 없습니다.
DML_SCATTER_OPERATOR_DESCDML_GATHER_OPERATOR_DESC 역입니다.
구문
struct DML_SCATTER_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
const DML_TENSOR_DESC *UpdatesTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
멤버
InputTensor
형식: const DML_TENSOR_DESC*
읽을 텐서입니다.
IndicesTensor
형식: const DML_TENSOR_DESC*
출력 텐서에 인덱스를 포함하는 텐서입니다. 크기는 축을 제외한 모든 차원의 InputTensor.Sizes와 일치해야 합니다.
부터 이 연산자는 이 텐서와 DML_FEATURE_LEVEL_3_0
함께 서명된 정수 형식을 사용할 때 음수 인덱스 값을 지원합니다. 음수 인덱스는 축 차원의 끝을 기준으로 하는 것으로 해석됩니다. 예를 들어 -1의 인덱스는 해당 차원을 따라 마지막 요소를 나타냅니다.
UpdatesTensor
형식: const DML_TENSOR_DESC*
해당 인덱스의 기존 입력 값을 대체할 새 값을 포함하는 텐서입니다. 이 텐서의 크기 는 IndicesTensor.Sizes와 일치해야 합니다. DataType은 InputTensor.DataType과 일치해야 합니다.
OutputTensor
형식: const DML_TENSOR_DESC*
결과를 쓸 텐서입니다. 이 텐서의 크기 및 DataType 은 InputTensor와 일치해야 합니다.
Axis
형식: UINT
OutputTensor에서 인덱싱에 사용할 축 차원이며, 범위[0, OutputTensor.DimensionCount)
는 입니다.
예
예제 1. 1D 분산형
Axis: 0
InputTensor: (Sizes:{5}, DataType:FLOAT32)
[0,1,2,3,4]
IndicesTensor: (Sizes:{4}, DataType:UINT32)
[3,1,3,0]
UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
[5,6,7,8]
// output = input
// output[indices[x]] = updates[x]
OutputTensor: (Sizes:{5}, DataType:FLOAT32)
[8,6,2,7,4]
예제 2. 2D 분산형
Axis: 0
InputTensor: (Sizes:{2,3}, DataType:FLOAT32)
[[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0]]
IndicesTensor: (Sizes:{2,3}, DataType:UINT32)
[[1, 0, 2],
[0, 2, 1]]
UpdatesTensor: (Sizes:{2,3}, DataType:FLOAT32)
[[10, 11, 12],
[20, 21, 22]]
// output = input
// output[indices[y, x], x] = updates[y, x]
OutputTensor: (Sizes:{3,3}, DataType:FLOAT32)
[[20, 11, 0],
[10, 0, 22],
[ 0, 21, 12]]
설명
DML_SCATTER_OPERATOR_DESCDML_GATHER_ELEMENTS_OPERATOR_DESC 적절한 DML_SCATTER_ELEMENTS_OPERATOR_DESC 이름으로 더 적절하게 별 칭이 지정되었습니다. DML_SCATTER_OPERATOR_DESC 실제로 DML_GATHER_OPERATOR_DESC 대칭이 아니었기 때문입니다.
가용성
이 연산자는 에서 DML_FEATURE_LEVEL_1_0
도입되었습니다.
텐서 제약 조건
- IndicesTensor, InputTensor, OutputTensor 및 UpdatesTensor 에는 동일한 DimensionCount가 있어야 합니다.
- InputTensor, OutputTensor 및 UpdatesTensor 에는 동일한 DataType이 있어야 합니다.
텐서 지원
DML_FEATURE_LEVEL_4_1 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 1~8개 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
IndicesTensor | 입력 | 1~8개 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | 입력 | 1~8개 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | 출력 | 1~8개 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 1~8개 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | 입력 | 1~8개 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | 입력 | 1~8개 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | 출력 | 1~8개 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndicesTensor | 입력 | 4 | Uint32 |
UpdatesTensor | 입력 | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 4 | FLOAT32, FLOAT16 |
IndicesTensor | 입력 | 4 | Uint32 |
UpdatesTensor | 입력 | 4 | FLOAT32, FLOAT16 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16 |
요구 사항
지원되는 최소 클라이언트 | Windows 10 버전 2004(10.0; 빌드 19041) |
지원되는 최소 서버 | Windows Server 버전 2004(10.0; 빌드 19041) |
머리글 | directml.h |