다음을 통해 공유


DML_CUMULATIVE_PRODUCT_OPERATOR_DESC 구조체(directml.h)

축을 따라 텐서의 요소를 곱하여 제품의 실행 중인 집계를 출력 텐서에 기록합니다.

구문

struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveProduct;
};

멤버

InputTensor

형식: const DML_TENSOR_DESC*

입력 데이터를 포함하는 텐서입니다. 일반적으로 전달 패스에서 DML_BATCH_NORMALIZATION_OPERATOR_DESCInputTensor로 제공된 것과 동일한 텐서입니다.

곱할 요소를 포함하는 입력 텐서입니다.

OutputTensor

형식: const DML_TENSOR_DESC*

결과 누적 제품을 쓸 출력 텐서입니다. 이 텐서는 InputTensor와 크기 및 데이터 형식이 동일해야 합니다.

Axis

형식: UINT

요소를 곱할 차원의 인덱스입니다. 이 값은 InputTensorDimensionCount보다 작아야 합니다.

AxisDirection

형식: DML_AXIS_DIRECTION

DML_AXIS_DIRECTION 열거형의 값 중 하나입니다. DML_AXIS_DIRECTION_INCREASING 설정하면 요소 인덱스를 오름차순으로 지정된 축을 따라 텐서를 트래버스하여 제품이 발생합니다. DML_AXIS_DIRECTION_DECREASING 설정하면 역방향이 true이고 인덱스를 내림차순으로 요소를 트래버스하여 제품이 발생합니다.

HasExclusiveProduct

형식: BOOL

TRUE이면 실행 중인 집계를 출력 텐서에 쓸 때 현재 요소의 값이 제외됩니다. FALSE이면 현재 요소의 값이 실행 중인 집계에 포함됩니다.

예제

이 섹션의 예제에서는 모두 동일한 입력 텐서를 사용합니다.

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

예제 1. 가로 조각의 누적 제품

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  2,   6,  30],       // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
   [3, 24, 168, 504],       //      [...                   ]
   [9, 54, 108, 432]]]]     //      [...                   ]

예제 2. 독점 제품

HasExclusiveProductTRUE로 설정하면 출력 텐서에 쓸 때 실행 중인 집계에서 현재 요소의 값을 제외하는 효과가 있습니다.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2,  2,   6],      // Notice the product is written before multiplying the input,
   [1, 3, 24, 168],      // and the final total is not written to any output.
   [1, 9, 54, 108]]]]

예제 3. 축 방향

AxisDirectionDML_AXIS_DIRECTION_DECREASING 설정하면 실행 중인 집계를 계산할 때 요소의 순회 순서를 반전시키는 효과가 있습니다.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30,  15, 15, 5],    // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
   [504, 168, 21, 3],    //      [...                   ]
   [432,  48,  8, 4]]]]  //      [...                   ]

예제 4. 다른 축을 따라 곱하기

이 예제에서 제품은 높이 축(두 번째 차원)을 따라 세로로 발생합니다.

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 6,  8, 21, 15],   //      [2*3,  ...]
   [54, 48, 42, 60]]]] //      [2*3*9 ...]

설명

이 연산자는 현재 위치 실행을 지원합니다. 즉, 출력 텐서가 바인딩 중에 InputTensor 의 별칭을 지정하도록 허용됩니다.

가용성

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

텐서 제약 조건

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

텐서 지원

DML_FEATURE_LEVEL_5_0 이상

텐서 종류 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 1-8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor 출력 1-8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 이상

텐서 종류 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 1-8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor 출력 1-8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_1 이상

텐서 종류 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor 출력 4 FLOAT32, FLOAT16, INT32, UINT32

요구 사항

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