GET_TILING_DATA_WITH_STRUCT

Supported Products

Product

Supported/Unsupported

Atlas A3 training products/Atlas A3 inference products

Atlas A2 training products/Atlas A2 inference products

Atlas 200I/500 A2 inference products

Atlas inference product's AI Core

Atlas inference product's Vector Core

Atlas training products

x

Functions

Specifies a structure name to obtain the specified tiling information and fills the information in the corresponding tiling structure. This function is compiled in macro expansion mode. The difference between GET_TILING_DATA and this API is that GET_TILING_DATA can obtain only the structures registered by default. This API can obtain the corresponding structure based on the specified structure name. This API is used when different structures are registered based on different tiling keys.

Prototype

1
GET_TILING_DATA_WITH_STRUCT(struct_name, tiling_data, tiling_arg)

Parameters

Parameter

Input/Output

Description

struct_name

Input

Name of the specified structure.

tiling_data

Output

Returns the specified Tiling structure variable.

tiling_arg

Input

Tiling parameter input by the entrypoint function of the operator.

Constraints

  • This function needs to be used in the operator kernel code, and the type of tiling_data does not need to be declared.
  • Currently, the kernel launch project is not supported.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
extern "C" __global__ __aicore__ void add_custom(__gm__ uint8_t *x, __gm__ uint8_t *y, __gm__ uint8_t *z, __gm__ uint8_t *tiling)
{
    KernelAdd op;
    if (TILING_KEY_IS(1)) {
        GET_TILING_DATA_WITH_STRUCT(Add_Struct_Special, tilingData, tiling); // Use the specified structure registered by the operator.
	op.Init(x, y, z, tilingData.totalLengthSpecial, tilingData.tileNumSpecial);
    } else {
        GET_TILING_DATA(tilingData, tiling);   // Use the default structures registered by the operator.
	op.Init(x, y, z, tilingData.totalLength, tilingData.tileNum);
    }
    if (TILING_KEY_IS(1)) {
        op.Process();
    }  else  if (TILING_KEY_IS(2)) {
        op.Process();
    } else  if (TILING_KEY_IS(3)) {
        op.Process();
    }
}