Conv3D Tiling Instructions

Ascend C provides a group of Conv3D Tiling APIs for you to obtain the tiling parameters required for kernel computation of the Conv3D forward operator. You only need to input the Position, Format, DType data type, and related parameters of Input, Weight, Bias, and Output, and call the API to obtain the related parameters in the TConv3DApiTiling structure of Init.

The Conv3D Tiling API provides a single-core Tiling interface for Conv3D single-core computation scenario. The process of obtaining tiling parameters is as follows:

  1. Create a single-core tiling object.
  2. Set the parameter type and shape information of Input, Weight, Bias, and Output. If parameters Padding, Stride, and Dilation exist, set them by calling SetPadding, SetStride, and SetDilation.
  3. Call the GetTiling API to obtain the tiling information.
The following is an example of using the Conv3D Tiling API to obtain Tiling parameters:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Instantiate the Conv3D API.
auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo());
Conv3dTilingApi::Conv3dTiling conv3dApiTiling(ascendcPlatform);
// Set the original input and output specifications, single-core specifications, and parameters.
conv3dApiTiling.SetGroups(groups);
conv3dApiTiling.SetOrgWeightShape(cout, kd, kh, kw);
conv3dApiTiling.SetOrgInputShape(cin, di, hi, wi);
conv3dApiTiling.SetPadding(padh, padt, padu, padd, padl, padr);
conv3dApiTiling.SetDilation(dilationH, dilationW, dilationD);
conv3dApiTiling.SetStride(strideH, strideW, strideD);
conv3dApiTiling.SetSingleWeightShape(cin, kd, kh, kw);
conv3dApiTiling.SetSingleOutputShape(singleCoreCo, singleCoreDo, singleCoreMo);
// Set the input and output types.
conv3dApiTiling.SetInputType(TPosition::GM, inputFormat, inputDtype);
conv3dApiTiling.SetWeightType(TPosition::GM, weightFormat, weightDtype);
conv3dApiTiling.SetOutputType(TPosition::CO1, outputFormat, outputDtype);
if (biasFlag) {
   conv3dApiTiling.SetBiasType(TPosition::GM, biasFormat, biasDtype);
}
// Call the GetTiling API to obtain the intra-core tiling policy. If -1 is returned, the tiling fails to be obtained.
if (conv3dApiTiling.GetTiling(tilingData.conv3dApiTilingData) == -1) {
   return false;
}

Header File to Be Included

1
#include "lib/conv/conv3d/conv3d_tiling.h"