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와 일치해야 합니다. DataTypeInputTensor.DataType과 일치해야 합니다.

OutputTensor

형식: const DML_TENSOR_DESC*

결과를 쓸 텐서입니다. 이 텐서의 크기DataTypeInputTensor와 일치해야 합니다.

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, OutputTensorUpdatesTensor 에는 동일한 DimensionCount가 있어야 합니다.
  • InputTensor, OutputTensorUpdatesTensor 에는 동일한 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