다음을 통해 공유


DML_GEMM_OPERATOR_DESC 구조체(directml.h)

형식 Output = FusedActivation(Alpha * TransA(A) x TransB(B) + Beta * C)의 일반 행렬 곱셈 함수를 수행합니다. 여기서 x 는 행렬 곱셈을 표시하고 스칼라를 * 사용하여 곱셈을 표시합니다.

이 연산자에는 레이아웃 { BatchCount, ChannelCount, Height, Width }이 있는 4D 텐서가 필요하며 BatchCount * 독립 행렬 곱셈의 ChannelCount 수를 수행합니다.

예를 들어 ATensor{ BatchCount, ChannelCount, M, K }크기가 이고 BTensor{ BatchCount, ChannelCount, K, N }크기가 이고 OutputTensor{ BatchCount, ChannelCount, M, N }크기가 인 경우 이 연산자는 BatchCount * ChannelCount 독립 행렬 차원의 곱하기 {M,K} x {K,N} = {M,N}을 수행합니다.

구문

struct DML_GEMM_OPERATOR_DESC {
  const DML_TENSOR_DESC   *ATensor;
  const DML_TENSOR_DESC   *BTensor;
  const DML_TENSOR_DESC   *CTensor;
  const DML_TENSOR_DESC   *OutputTensor;
  DML_MATRIX_TRANSFORM    TransA;
  DML_MATRIX_TRANSFORM    TransB;
  FLOAT                   Alpha;
  FLOAT                   Beta;
  const DML_OPERATOR_DESC *FusedActivation;
};

멤버

ATensor

형식: const DML_TENSOR_DESC*

A 행렬을 포함하는 텐서입니다. 이 텐서의 크기TransADML_MATRIX_TRANSFORM_NONE 경우 또는 { BatchCount, ChannelCount, K, M }TransADML_MATRIX_TRANSFORM_TRANSPOSE 경우 여야 합니다{ BatchCount, ChannelCount, M, K }.

BTensor

형식: const DML_TENSOR_DESC*

B 행렬을 포함하는 텐서입니다. 이 텐서의 크기TransBDML_MATRIX_TRANSFORM_NONE 경우 또는 { BatchCount, ChannelCount, N, K }TransBDML_MATRIX_TRANSFORM_TRANSPOSE 경우 여야 합니다{ BatchCount, ChannelCount, K, N }.

CTensor

형식: _Maybenull_ const DML_TENSOR_DESC*

C 행렬 또는 nullptr를 포함하는 텐서입니다. 값을 제공하지 않으면 기본값은 0으로 설정됩니다. 제공된 경우 이 텐서의 크기는 이어야 { BatchCount, ChannelCount, M, N }합니다.

OutputTensor

형식: const DML_TENSOR_DESC*

결과를 쓸 텐서입니다. 이 텐서의 크기는 입니다 { BatchCount, ChannelCount, M, N }.

TransA

형식: DML_MATRIX_TRANSFORM

ATensor에 적용할 변환입니다. 변환 또는 변환 없음 중 하나를 선택합니다.

TransB

형식: DML_MATRIX_TRANSFORM

BTensor에 적용할 변환입니다. 변환 또는 변환 없음 중 하나를 선택합니다.

Alpha

형식: FLOAT

입력 ATensorBTensor의 곱에 대한 스칼라 승수 값입니다.

Beta

형식: FLOAT

선택적 입력 CTensor에 대한 스칼라 승수의 값입니다. CTensor가 제공되지 않으면 이 값은 무시됩니다.

FusedActivation

형식: _Maybenull_ const DML_OPERATOR_DESC*

GEMM 다음에 적용할 선택적 융합 활성화 계층입니다. 자세한 내용은 성능 향상을 위해 융합 연산자 사용을 참조하세요.

가용성

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

텐서 제약 조건

  • ATensor, BTensor, CTensorOutputTensor 에는 동일한 DataTypeDimensionCount가 있어야 합니다.
  • CTensorOutputTensor크기는 같아야 합니다.

텐서 지원

DML_FEATURE_LEVEL_4_0 이상

텐서 종류 차원 지원되는 차원 수 지원되는 데이터 형식
ATensor 입력 { [BatchCount], [ChannelCount], M, K } 2~4 FLOAT32, FLOAT16
BTensor 입력 { [BatchCount], [ChannelCount], K, N } 2~4 FLOAT32, FLOAT16
CTensor 선택적 입력 { [BatchCount], [ChannelCount], M, N } 2~4 FLOAT32, FLOAT16
OutputTensor 출력 { [BatchCount], [ChannelCount], M, N } 2~4 FLOAT32, FLOAT16

DML_FEATURE_LEVEL_1_0 이상

텐서 종류 차원 지원되는 차원 수 지원되는 데이터 형식
ATensor 입력 { BatchCount, ChannelCount, M, K } 4 FLOAT32, FLOAT16
BTensor 입력 { BatchCount, ChannelCount, K, N } 4 FLOAT32, FLOAT16
CTensor 선택적 입력 { BatchCount, ChannelCount, M, N } 4 FLOAT32, FLOAT16
OutputTensor 출력 { BatchCount, ChannelCount, M, N } 4 FLOAT32, FLOAT16

요구 사항

요구 사항
헤더 directml.h

추가 정보