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 행렬을 포함하는 텐서입니다. 이 텐서의 크기는 TransA가 DML_MATRIX_TRANSFORM_NONE 경우 또는 { BatchCount, ChannelCount, K, M }
TransA가 DML_MATRIX_TRANSFORM_TRANSPOSE 경우 여야 합니다{ BatchCount, ChannelCount, M, K }
.
BTensor
형식: const DML_TENSOR_DESC*
B 행렬을 포함하는 텐서입니다. 이 텐서의 크기는 TransB가 DML_MATRIX_TRANSFORM_NONE 경우 또는 { BatchCount, ChannelCount, N, K }
TransB가 DML_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
ATensor에 적용할 변환입니다. 변환 또는 변환 없음 중 하나를 선택합니다.
TransB
BTensor에 적용할 변환입니다. 변환 또는 변환 없음 중 하나를 선택합니다.
Alpha
형식: FLOAT
입력 ATensor 및 BTensor의 곱에 대한 스칼라 승수 값입니다.
Beta
형식: FLOAT
선택적 입력 CTensor에 대한 스칼라 승수의 값입니다. CTensor가 제공되지 않으면 이 값은 무시됩니다.
FusedActivation
형식: _Maybenull_ const DML_OPERATOR_DESC*
GEMM 다음에 적용할 선택적 융합 활성화 계층입니다. 자세한 내용은 성능 향상을 위해 융합 연산자 사용을 참조하세요.
가용성
이 연산자는 에서 DML_FEATURE_LEVEL_1_0
도입되었습니다.
텐서 제약 조건
- ATensor, BTensor, CTensor 및 OutputTensor 에는 동일한 DataType 및 DimensionCount가 있어야 합니다.
- CTensor 및 OutputTensor 의 크기는 같아야 합니다.
텐서 지원
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 |