다음을 통해 공유


DML_SCATTER_ND_OPERATOR_DESC 구조체(directml.h)

전체 입력 텐서를 출력에 복사한 다음, 선택한 인덱스를 업데이트 텐서의 해당 값으로 덮어씁니다. 이 연산자는 다음 의사 코드를 수행합니다. 여기서 "..." 는 일련의 좌표를 나타내며, 정확한 동작은 축 및 인덱스 크기에 따라 결정됩니다.

output = input
output[indices[...]] = updates[...]

두 출력 요소 인덱스가 겹치는 경우(유효하지 않음) 마지막 쓰기가 우선하는 것을 보장할 수 없습니다.

구문

struct DML_SCATTER_ND_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *UpdatesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  InputDimensionCount;
  UINT                  IndicesDimensionCount;
};

멤버

InputTensor

형식: const DML_TENSOR_DESC*

읽을 텐서입니다.

IndicesTensor

형식: const DML_TENSOR_DESC*

인덱스를 포함하는 텐서입니다. 이 텐서의 DimensionCountInputTensor.DimensionCount와 일치해야 합니다. IndicesTensor의 마지막 차원은 실제로 인덱스 튜플당 좌표 수이며 InputTensor.DimensionCount를 초과하면 안 됩니다. 예를 들어 IndicesDimensionCount = 3이 있는 인덱스 텐서 크기 {1,4,5,2}InputTensor로 인덱싱하는 2개 값 좌표 튜플의 4x5 배열을 의미합니다.

부터 이 연산자는 이 텐서에 DML_FEATURE_LEVEL_3_0서명된 정수 계열 형식을 사용할 때 음수 인덱스 값을 지원합니다. 음수 인덱스는 해당 차원의 끝을 기준으로 하는 것으로 해석됩니다. 예를 들어 -1 인덱스는 해당 차원의 마지막 요소를 참조합니다.

UpdatesTensor

형식: const DML_TENSOR_DESC*

해당 인덱스에서 기존 입력 값을 대체할 새 값을 포함하는 텐서입니다. 이 텐서의 DimensionCountInputTensor.DimensionCount와 일치해야 합니다. 예상 UpdatesTensor.SizesIndicesTensor.Sizes 선행 세그먼트와 InputTensor.Sizes 후행 세그먼트가 연결되어 다음을 생성합니다.

indexTupleSize = IndicesTensor.Sizes[IndicesTensor.DimensionCount - 1]
UpdatesTensor.Sizes = [
    1...,
    IndicesTensor.Sizes[(IndicesTensor.DimensionCount - IndicesDimensionCount) .. (IndicesTensor.DimensionCount - 1)],
    InputTensor.Sizes[(InputTensor.DimensionCount - indexTupleSize) .. InputTensor.DimensionCount]
]

UpdatesTensor.DimensionCount를 충족하는 데 필요한 경우 앞에 앞에 1개의 값이 추가되어 차원이 오른쪽 맞춤됩니다.

예제는 다음과 같습니다.

InputTensor.Sizes = [3,4,5,6,7]
InputDimensionCount = 5
IndicesTensor.Sizes = [1,1, 1,2,3]
IndicesDimensionCount = 3 // can be thought of as a [1,2] array of 3-coordinate tuples

// The [1,2] comes from the indices tensor (ignoring last dimension, which is the tuple size),
// and the [6,7] comes from input tensor, ignoring the first 3 dimensions
// since the index tuples are 3 elements (from the indices tensor last dimension).
UpdatesTensor.Sizes = [1, 1,2,6,7]

OutputTensor

형식: const DML_TENSOR_DESC*

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

InputDimensionCount

형식: UINT

[1, InputTensor.DimensionCount ) 범위의 관련 없는 선행 차원을 무시한 후 InputTensor 내의 실제 입력 차원 수입니다. 예를 들어 InputTensor.Sizes = {1,1,4,6} 및 InputDimensionCount = 3이 지정된 경우 실제 의미 있는 인덱스는 입니다 {1,4,6}.

IndicesDimensionCount

형식: UINT

[1, IndicesTensor.DimensionCount ) 범위의 관련 없는 선행 차원을 무시한 후 IndicesTensor 내의 실제 인덱스 차원 수입니다. 예를 들어 IndicesTensor.Sizes = {1,1,4,6} 및 IndicesDimensionCount = 3이 지정된 경우 실제 의미 있는 인덱스는 입니다 {1,4,6}.

예제

InputTensor: (Sizes:{8}, DataType:FLOAT32)
    [1, 2, 3, 4, 5, 6, 7, 8]

IndicesTensor: (Sizes:{4,1}, DataType:FLOAT32)
    [[4], [3], [1], [7]]

UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
    [9, 10, 11, 12]

// output = input
// output[indices[x, 0]] = updates[x]
OutputTensor: (Sizes:{8}, DataType:FLOAT32)
    [1, 11, 3, 10, 9, 6, 7, 12]

가용성

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

텐서 제약 조건

  • IndicesTensor, InputTensor, OutputTensorUpdatesTensor 에는 동일한 DimensionCount가 있어야 합니다.
  • InputTensor, OutputTensorUpdatesTensor 에는 동일한 DataType이 있어야 합니다.

텐서 지원

DML_FEATURE_LEVEL_4_1 이상

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

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

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 빌드 20348
지원되는 최소 서버 Windows 10 빌드 20348
머리글 directml.h