8. mcdnn_backend

本章介绍了mcDNN中引入的 mcdnnBackend API的当前实现行为。 用户可以指定计算用例,为其设置执行计划,并通过多个描述符执行计算。 具有属性的描述符的典型使用模式由以下API调用序列组成:

  1. mcdnnBackendCreateDescriptor()创建指定类型的描述符。

  2. mcdnnBackendSetAttribute()为描述符设置可设置属性的值。必须在下一步之前设置所有必需的属性。

  3. mcdnnBackendFinalize()终结描述符。

  4. mcdnnBackendGetAttribute()从终结的描述符中获取属性值。

枚举类型mcdnnBackendDescriptorType_t枚举mcDNN后端描述符有效类型的列表。枚举类型mcdnnBackendAttributeName_t枚举有效属性的列表。mcdnnBackendDescriptorType_t中的每个描述符类型都具有mcdnnBackendAttributeName_t有效属性值的不相交子集。每个描述符类型及其属性的完整描述,请参见后端描述符类型。

8.1. 数据类型参考

以下为mcDNN后端API中的数据类型参考。

8.1.1. 枚举类型

以下为mcDNN后端API的枚举类型。

8.1.1.1. mcdnnBackendAttributeName_t

mcdnnBackendAttributeName_t是一种枚举类型,表示可以使用mcdnnBackendSetAttribute()和mcdnnBackendGetAttribute()函数设置或获取的后端描述符属性。 属性的名称前缀标识其所属的后端描述符。

typedef enum {
    MCDNN_ATTR_POINTWISE_MODE                  = 0,
    MCDNN_ATTR_POINTWISE_MATH_PREC             = 1,
    MCDNN_ATTR_POINTWISE_NAN_PROPAGATION       = 2,
    MCDNN_ATTR_POINTWISE_RELU_LOWER_CLIP       = 3,
    MCDNN_ATTR_POINTWISE_RELU_UPPER_CLIP       = 4,
    MCDNN_ATTR_POINTWISE_RELU_LOWER_CLIP_SLOPE = 5,
    MCDNN_ATTR_POINTWISE_ELU_ALPHA             = 6,
    MCDNN_ATTR_POINTWISE_SOFTPLUS_BETA         = 7,
    MCDNN_ATTR_POINTWISE_SWISH_BETA            = 8,
    MCDNN_ATTR_POINTWISE_AXIS                  = 9,

    MCDNN_ATTR_CONVOLUTION_COMP_TYPE      = 100,
    MCDNN_ATTR_CONVOLUTION_CONV_MODE      = 101,
    MCDNN_ATTR_CONVOLUTION_DILATIONS      = 102,
    MCDNN_ATTR_CONVOLUTION_FILTER_STRIDES = 103,
    MCDNN_ATTR_CONVOLUTION_POST_PADDINGS  = 104,
    MCDNN_ATTR_CONVOLUTION_PRE_PADDINGS   = 105,
    MCDNN_ATTR_CONVOLUTION_SPATIAL_DIMS   = 106,

    MCDNN_ATTR_ENGINEHEUR_MODE            = 200,
    MCDNN_ATTR_ENGINEHEUR_OPERATION_GRAPH = 201,
    MCDNN_ATTR_ENGINEHEUR_RESULTS         = 202,

    MCDNN_ATTR_ENGINECFG_ENGINE            = 300,
    MCDNN_ATTR_ENGINECFG_INTERMEDIATE_INFO = 301,
    MCDNN_ATTR_ENGINECFG_KNOB_CHOICES      = 302,

    MCDNN_ATTR_EXECUTION_PLAN_HANDLE                     = 400,
    MCDNN_ATTR_EXECUTION_PLAN_ENGINE_CONFIG              = 401,
    MCDNN_ATTR_EXECUTION_PLAN_WORKSPACE_SIZE             = 402,
    MCDNN_ATTR_EXECUTION_PLAN_COMPUTED_INTERMEDIATE_UIDS = 403,
    MCDNN_ATTR_EXECUTION_PLAN_RUN_ONLY_INTERMEDIATE_UIDS = 404,

    MCDNN_ATTR_INTERMEDIATE_INFO_UNIQUE_ID            = 500,
    MCDNN_ATTR_INTERMEDIATE_INFO_SIZE                 = 501,
    MCDNN_ATTR_INTERMEDIATE_INFO_DEPENDENT_DATA_UIDS  = 502,
    MCDNN_ATTR_INTERMEDIATE_INFO_DEPENDENT_ATTRIBUTES = 503,

    MCDNN_ATTR_KNOB_CHOICE_KNOB_TYPE  = 600,
    MCDNN_ATTR_KNOB_CHOICE_KNOB_VALUE = 601,

    MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_ALPHA        = 700,
    MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_BETA         = 701,
    MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_CONV_DESC    = 702,
    MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_W            = 703,
    MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_X            = 704,
    MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_Y            = 705,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_ALPHA       = 706,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_BETA        = 707,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_CONV_DESC   = 708,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_W           = 709,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_DX          = 710,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_DY          = 711,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_ALPHA     = 712,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_BETA      = 713,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_CONV_DESC = 714,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_DW        = 715,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_X         = 716,
    MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_DY        = 717,
    MCDNN_ATTR_OPERATION_POINTWISE_PW_DESCRIPTOR          = 750,
    MCDNN_ATTR_OPERATION_POINTWISE_XDESC                  = 751,
    MCDNN_ATTR_OPERATION_POINTWISE_BDESC                  = 752,
    MCDNN_ATTR_OPERATION_POINTWISE_YDESC                  = 753,
    MCDNN_ATTR_OPERATION_POINTWISE_ALPHA1                 = 754,
    MCDNN_ATTR_OPERATION_POINTWISE_ALPHA2                 = 755,
    MCDNN_ATTR_OPERATION_POINTWISE_DXDESC                 = 756,
    MCDNN_ATTR_OPERATION_POINTWISE_DYDESC                 = 757,
    MCDNN_ATTR_OPERATION_POINTWISE_TDESC                  = 758,

    MCDNN_ATTR_OPERATION_GENSTATS_MODE                    = 770,
    MCDNN_ATTR_OPERATION_GENSTATS_MATH_PREC               = 771,
    MCDNN_ATTR_OPERATION_GENSTATS_XDESC                   = 772,
    MCDNN_ATTR_OPERATION_GENSTATS_SUMDESC                 = 773,
    MCDNN_ATTR_OPERATION_GENSTATS_SQSUMDESC               = 774,

    MCDNN_ATTR_OPERATION_BN_FINALIZE_STATS_MODE                = 780,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_MATH_PREC                 = 781,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_Y_SUM_DESC                = 782,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_Y_SQ_SUM_DESC             = 783,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_SCALE_DESC                = 784,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_BIAS_DESC                 = 785,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_PREV_RUNNING_MEAN_DESC    = 786,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_PREV_RUNNING_VAR_DESC     = 787,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_UPDATED_RUNNING_MEAN_DESC = 788,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_UPDATED_RUNNING_VAR_DESC  = 789,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_SAVED_MEAN_DESC           = 790,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_SAVED_INV_STD_DESC        = 791,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_EQ_SCALE_DESC             = 792,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_EQ_BIAS_DESC              = 793,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_ACCUM_COUNT_DESC          = 794,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_EPSILON_DESC              = 795,
    MCDNN_ATTR_OPERATION_BN_FINALIZE_EXP_AVERATE_FACTOR_DESC   = 796,

    MCDNN_ATTR_OPERATIONGRAPH_HANDLE              = 800,
    MCDNN_ATTR_OPERATIONGRAPH_OPS                 = 801,
    MCDNN_ATTR_OPERATIONGRAPH_ENGINE_GLOBAL_COUNT = 802,

    MCDNN_ATTR_TENSOR_BYTE_ALIGNMENT       = 900,
    MCDNN_ATTR_TENSOR_DATA_TYPE            = 901,
    MCDNN_ATTR_TENSOR_DIMENSIONS           = 902,
    MCDNN_ATTR_TENSOR_STRIDES              = 903,
    MCDNN_ATTR_TENSOR_VECTOR_COUNT         = 904,
    MCDNN_ATTR_TENSOR_VECTORIZED_DIMENSION = 905,
    MCDNN_ATTR_TENSOR_UNIQUE_ID            = 906,
    MCDNN_ATTR_TENSOR_IS_VIRTUAL           = 907,
    MCDNN_ATTR_TENSOR_IS_BY_VALUE          = 908,
    MCDNN_ATTR_TENSOR_REORDERING_MODE      = 909,

    MCDNN_ATTR_VARIANT_PACK_UNIQUE_IDS    = 1000,
    MCDNN_ATTR_VARIANT_PACK_DATA_POINTERS = 1001,
    MCDNN_ATTR_VARIANT_PACK_INTERMEDIATES = 1002,
    MCDNN_ATTR_VARIANT_PACK_WORKSPACE     = 1003,

    MCDNN_ATTR_LAYOUT_INFO_TENSOR_UID = 1100,
    MCDNN_ATTR_LAYOUT_INFO_TYPES      = 1101,

    MCDNN_ATTR_KNOB_INFO_TYPE          = 1200,
    MCDNN_ATTR_KNOB_INFO_MAXIMUM_VALUE = 1201,
    MCDNN_ATTR_KNOB_INFO_MINIMUM_VALUE = 1202,
    MCDNN_ATTR_KNOB_INFO_STRIDE        = 1203,

    MCDNN_ATTR_ENGINE_OPERATION_GRAPH = 1300,
    MCDNN_ATTR_ENGINE_GLOBAL_INDEX    = 1301,
    MCDNN_ATTR_ENGINE_KNOB_INFO       = 1302,
    MCDNN_ATTR_ENGINE_NUMERICAL_NOTE  = 1303,
    MCDNN_ATTR_ENGINE_LAYOUT_INFO     = 1304,
    MCDNN_ATTR_ENGINE_BEHAVIOR_NOTE   = 1305,

    MCDNN_ATTR_MATMUL_COMP_TYPE       = 1500,

    MCDNN_ATTR_OPERATION_MATMUL_ADESC                           = 1520,
    MCDNN_ATTR_OPERATION_MATMUL_BDESC                           = 1521,
    MCDNN_ATTR_OPERATION_MATMUL_CDESC                           = 1522,
    MCDNN_ATTR_OPERATION_MATMUL_DESC                            = 1523,
    MCDNN_ATTR_OPERATION_MATMUL_IRREGULARLY_STRIDED_BATCH_COUNT = 1524,
    MCDNN_ATTR_OPERATION_MATMUL_GEMM_M_OVERRIDE_DESC            = 1525,
    MCDNN_ATTR_OPERATION_MATMUL_GEMM_N_OVERRIDE_DESC            = 1526,
    MCDNN_ATTR_OPERATION_MATMUL_GEMM_K_OVERRIDE_DESC            = 1527,


    MCDNN_ATTR_REDUCTION_OPERATOR  = 1600,
    MCDNN_ATTR_REDUCTION_COMP_TYPE = 1601,

    MCDNN_ATTR_OPERATION_REDUCTION_XDESC = 1610,
    MCDNN_ATTR_OPERATION_REDUCTION_YDESC = 1611,
    MCDNN_ATTR_OPERATION_REDUCTION_DESC  = 1612,

    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_MATH_PREC        = 1620,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_MEAN_DESC        = 1621,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_INVSTD_DESC      = 1622,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_BN_SCALE_DESC    = 1623,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_X_DESC           = 1624,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_DY_DESC          = 1625,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_DBN_SCALE_DESC   = 1626,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_DBN_BIAS_DESC    = 1627,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_EQ_DY_SCALE_DESC = 1628,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_EQ_X_SCALE_DESC  = 1629,
    MCDNN_ATTR_OPERATION_BN_BWD_WEIGHTS_EQ_BIAS          = 1630,

    MCDNN_ATTR_RESAMPLE_MODE            = 1700,
    MCDNN_ATTR_RESAMPLE_COMP_TYPE       = 1701,
    MCDNN_ATTR_RESAMPLE_SPATIAL_DIMS    = 1702,
    MCDNN_ATTR_RESAMPLE_POST_PADDINGS   = 1703,
    MCDNN_ATTR_RESAMPLE_PRE_PADDINGS    = 1704,
    MCDNN_ATTR_RESAMPLE_STRIDES         = 1705,
    MCDNN_ATTR_RESAMPLE_WINDOW_DIMS     = 1706,
    MCDNN_ATTR_RESAMPLE_NAN_PROPAGATION = 1707,
    MCDNN_ATTR_RESAMPLE_PADDING_MODE    = 1708,

    MCDNN_ATTR_OPERATION_RESAMPLE_FWD_XDESC   = 1710,
    MCDNN_ATTR_OPERATION_RESAMPLE_FWD_YDESC   = 1711,
    MCDNN_ATTR_OPERATION_RESAMPLE_FWD_IDXDESC = 1712,
    MCDNN_ATTR_OPERATION_RESAMPLE_FWD_ALPHA   = 1713,
    MCDNN_ATTR_OPERATION_RESAMPLE_FWD_BETA    = 1714,
    MCDNN_ATTR_OPERATION_RESAMPLE_FWD_DESC    = 1716,

    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_DXDESC  = 1720,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_DYDESC  = 1721,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_IDXDESC = 1722,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_ALPHA   = 1723,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_BETA    = 1724,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_DESC    = 1725,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_XDESC   = 1726,
    MCDNN_ATTR_OPERATION_RESAMPLE_BWD_YDESC   = 1727,

    MCDNN_ATTR_OPERATION_CONCAT_AXIS          = 1800,
    MCDNN_ATTR_OPERATION_CONCAT_INPUT_DESCS   = 1801,
    MCDNN_ATTR_OPERATION_CONCAT_INPLACE_INDEX = 1802,
    MCDNN_ATTR_OPERATION_CONCAT_OUTPUT_DESC   = 1803,

    MCDNN_ATTR_OPERATION_SIGNAL_MODE     = 1900,
    MCDNN_ATTR_OPERATION_SIGNAL_FLAGDESC = 1901,
    MCDNN_ATTR_OPERATION_SIGNAL_VALUE    = 1902,
    MCDNN_ATTR_OPERATION_SIGNAL_XDESC    = 1903,
    MCDNN_ATTR_OPERATION_SIGNAL_YDESC    = 1904,

    MCDNN_ATTR_OPERATION_NORM_FWD_MODE                     = 2000,
    MCDNN_ATTR_OPERATION_NORM_FWD_PHASE                    = 2001,
    MCDNN_ATTR_OPERATION_NORM_FWD_XDESC                    = 2002,
    MCDNN_ATTR_OPERATION_NORM_FWD_MEAN_DESC                = 2003,
    MCDNN_ATTR_OPERATION_NORM_FWD_INV_VARIANCE_DESC        = 2004,
    MCDNN_ATTR_OPERATION_NORM_FWD_SCALE_DESC               = 2005,
    MCDNN_ATTR_OPERATION_NORM_FWD_BIAS_DESC                = 2006,
    MCDNN_ATTR_OPERATION_NORM_FWD_EPSILON_DESC             = 2007,
    MCDNN_ATTR_OPERATION_NORM_FWD_EXP_AVG_FACTOR_DESC      = 2008,
    MCDNN_ATTR_OPERATION_NORM_FWD_INPUT_RUNNING_MEAN_DESC  = 2009,
    MCDNN_ATTR_OPERATION_NORM_FWD_INPUT_RUNNING_VAR_DESC   = 2010,
    MCDNN_ATTR_OPERATION_NORM_FWD_OUTPUT_RUNNING_MEAN_DESC = 2011,
    MCDNN_ATTR_OPERATION_NORM_FWD_OUTPUT_RUNNING_VAR_DESC  = 2012,
    MCDNN_ATTR_OPERATION_NORM_FWD_YDESC                    = 2013,
    MCDNN_ATTR_OPERATION_NORM_FWD_PEER_STAT_DESCS          = 2014,

    MCDNN_ATTR_OPERATION_NORM_BWD_MODE              = 2100,
    MCDNN_ATTR_OPERATION_NORM_BWD_XDESC             = 2101,
    MCDNN_ATTR_OPERATION_NORM_BWD_MEAN_DESC         = 2102,
    MCDNN_ATTR_OPERATION_NORM_BWD_INV_VARIANCE_DESC = 2103,
    MCDNN_ATTR_OPERATION_NORM_BWD_DYDESC            = 2104,
    MCDNN_ATTR_OPERATION_NORM_BWD_SCALE_DESC        = 2105,
    MCDNN_ATTR_OPERATION_NORM_BWD_EPSILON_DESC      = 2106,
    MCDNN_ATTR_OPERATION_NORM_BWD_DSCALE_DESC       = 2107,
    MCDNN_ATTR_OPERATION_NORM_BWD_DBIAS_DESC        = 2108,
    MCDNN_ATTR_OPERATION_NORM_BWD_DXDESC            = 2109,
    MCDNN_ATTR_OPERATION_NORM_BWD_PEER_STAT_DESCS   = 2110,

    MCDNN_ATTR_OPERATION_RESHAPE_XDESC = 2200,
    MCDNN_ATTR_OPERATION_RESHAPE_YDESC = 2201,

    MCDNN_ATTR_RNG_DISTRIBUTION                   = 2300,
    MCDNN_ATTR_RNG_NORMAL_DIST_MEAN               = 2301,
    MCDNN_ATTR_RNG_NORMAL_DIST_STANDARD_DEVIATION = 2302,
    MCDNN_ATTR_RNG_UNIFORM_DIST_MAXIMUM           = 2303,
    MCDNN_ATTR_RNG_UNIFORM_DIST_MINIMUM           = 2304,
    MCDNN_ATTR_RNG_BERNOULLI_DIST_PROBABILITY     = 2305,

    MCDNN_ATTR_OPERATION_RNG_YDESC       = 2310,
    MCDNN_ATTR_OPERATION_RNG_SEED        = 2311,
    MCDNN_ATTR_OPERATION_RNG_DESC        = 2312,
    MCDNN_ATTR_OPERATION_RNG_OFFSET_DESC = 2313,

} mcdnnBackendAttributeName_t;

8.1.1.2. mcdnnBackendAttributeType_t

枚举类型mcdnnBackendAttributeType_t指定mcDNN后端描述符属性的数据类型。它用于指定mcdnnBackendSetAttribute()和mcdnnBackendGetAttribute()的void *arrayOfElements参数所指向的数据类型。

typedef enum{
    MCDNN_TYPE_HANDLE = 0,
    MCDNN_TYPE_DATA_TYPE,
    MCDNN_TYPE_BOOLEAN,
    MCDNN_TYPE_INT64,
    MCDNN_TYPE_FLOAT,
    MCDNN_TYPE_DOUBLE,
    MCDNN_TYPE_VOID_PTR,
    MCDNN_TYPE_CONVOLUTION_MODE,
    MCDNN_TYPE_HEUR_MODE,
    MCDNN_TYPE_KNOB_TYPE,
    MCDNN_TYPE_NAN_PROPOGATION,
    MCDNN_TYPE_NUMERICAL_NOTE,
    MCDNN_TYPE_LAYOUT_TYPE,
    MCDNN_TYPE_ATTRIB_NAME,
    MCDNN_TYPE_POINTWISE_MODE,
    MCDNN_TYPE_BACKEND_DESCRIPTOR,
    MCDNN_TYPE_GENSTATS_MODE,
    MCDNN_TYPE_BN_FINALIZE_STATS_MODE,
    MCDNN_TYPE_REDUCTION_OPERATOR_TYPE,
    MCDNN_TYPE_BEHAVIOR_NOTE,
    MCDNN_TYPE_TENSOR_REORDERING_MODE,
    MCDNN_TYPE_RESAMPLE_MODE,
    MCDNN_TYPE_PADDING_MODE,
    MCDNN_TYPE_INT32,
    MCDNN_TYPE_CHAR,
    MCDNN_TYPE_SIGNAL_MODE,
    MCDNN_TYPE_FRACTION,
    MCDNN_TYPE_NORM_MODE,
    MCDNN_TYPE_NORM_FWD_PHASE,
    MCDNN_TYPE_RNG_DISTRIBUTION
} mcdnnBackendAttributeType_t;

mcdnnBackendAttributeType_t的属性类型

mcdnnBackendAttributeType_t

属性类型

MCDNN_TYPE_HANDLE

mcdnnHandle_t

MCDNN_TYPE_DATA_TYPE

mcdnnDataType_t

MCDNN_TYPE_BOOLEAN

bool

MCDNN_TYPE_INT64

int64_t

MCDNN_TYPE_FLOAT

float

MCDNN_TYPE_DOUBLE

double

MCDNN_TYPE_VOID_PTR

void *

MCDNN_TYPE_CONVOLUTION_MODE

mcdnnConvolutionMode_t

MCDNN_TYPE_HEUR_MODE

mcdnnBackendHeurMode_t

MCDNN_TYPE_KNOB_TYPE

mcdnnBackendKnobType_t

MCDNN_TYPE_NAN_PROPOGATION

mcdnnNanPropagation_t

MCDNN_TYPE_NUMERICAL_NOTE

mcdnnBackendNumericalNote_t

MCDNN_TYPE_LAYOUT_TYPE

mcdnnBackendLayoutType_t

MCDNN_TYPE_ATTRIB_NAME

mcdnnBackendAttributeName_t

MCDNN_TYPE_POINTWISE_MODE

mcdnnPointwiseMode_t

MC DNN_TYPE_BACKEND_DESCRIPTOR

mcdnnBackendDescriptor_t

MCDNN_TYPE_GENSTATS_MODE

mcdnnGenStatsMode_t

MCD NN_TYPE_BN_FINALIZE_STATS_MODE

mcdnnBnFinalizeStats Mode_t

MCDN N_TYPE_REDUCTION_OPERATOR_TYPE

mcdnnReduc eTensorOp_t

MCDNN_TYPE_BEHAVIOR_NOTE

mcdnnBackendBehaviorNote_t

MCD NN_TYPE_TENSOR_REORDERING_MODE

mcdnnBackendTenso rReordering_t

MCDNN_TYPE_RESAMPLE_MODE

mcdnnResampleMode_t

MCDNN_TYPE_PADDING_MODE

mcdnnPaddingMode_t

MCDNN_TYPE_INT32

int32_t

MCDNN_TYPE_CHAR

char

8.1.1.3. mcdnnBackendBehaviorNote_t

mcdnnBackendBehaviorNote_t是一种枚举类型,用于表示引擎的可查询行为注释。用户可以使用mcdnnBackendGetAttribute()函数从MCDNN_BACKEND_ENGINE_DESC查询一系列行为注释。

typedef enum{
    MCDNN_BEHAVIOR_NOTE_RUNTIME_COMPILATION = 0,
    MCDNN_BEHAVIOR_NOTE_REQUIRES_FILTER_INT8x32_REORDER = 1,
    MCDNN_BEHAVIOR_NOTE_REQUIRES_BIAS_INT8x32_REORDER = 2,
    MCDNN_BEHAVIOR_NOTE_TYPE_COUNT,
} mcdnnBackendBehaviorNote_t;

8.1.1.4. mcdnnBackendDescriptorType_t

mcdnnBackendDescriptorType_t是一种枚举类型,用于表示描述符。用户可以使用mcdnnBackendCreateDescriptor()函数创建。

typedef enum{
    MCDNN_BACKEND_POINTWISE_DESCRIPTOR = 0,
    MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR,
    MCDNN_BACKEND_ENGINE_DESCRIPTOR,
    MCDNN_BACKEND_ENGINECFG_DESCRIPTOR,
    MCDNN_BACKEND_ENGINEHEUR_DESCRIPTOR,
    MCDNN_BACKEND_EXECUTION_PLAN_DESCRIPTOR,
    MCDNN_BACKEND_INTERMEDIATE_INFO_DESCRIPTOR,
    MCDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR,
    MCDNN_BACKEND_KNOB_INFO_DESCRIPTOR,
    MCDNN_BACKEND_LAYOUT_INFO_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_CONVOLUTION_FORWARD_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD_FILTER_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD_DATA_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_POINTWISE_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_GEN_STATS_DESCRIPTOR,
    MCDNN_BACKEND_OPERATIONGRAPH_DESCRIPTOR,
    MCDNN_BACKEND_VARIANT_PACK_DESCRIPTOR,
    MCDNN_BACKEND_TENSOR_DESCRIPTOR,
    MCDNN_BACKEND_MATMUL_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_BN_FINALIZE_STATISTICS_DESCRIPTOR,
    MCDNN_BACKEND_REDUCTION_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_REDUCTION_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_BN_BWD_WEIGHTS_DESCRIPTOR,
    MCDNN_BACKEND_RESAMPLE_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_RESAMPLE_FWD_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_RESAMPLE_BWD_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_CONCAT_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_SIGNAL_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR,
    MCDNN_BACKEND_OPERATION_NORM_BACKWARD_DESCRIPTOR,
} mcdnnBackendDescriptorType_t;

8.1.1.5. mcdnnBackendHeurMode_t

mcdnnBackendHeurMode_t是一种枚举类型,用于表示MCDNN_BACKEND_ENGINEHEUR_DESCRIPTOR的操作模式。

typedef enum{
    MCDNN_HEUR_MODE_INSTANT  = 0,
    MCDNN_HEUR_MODE_B        = 1,
    MCDNN_HEUR_MODE_FALLBACK = 2,
    MCDNN_HEUR_MODE_A        = 3
} mcdnnBackendHeurMode_t;

MCDNN_HEUR_MODE_A & MCDNN_HEUR_MODE_INSTANT

MCDNN_HEUR_MODE_A提供与MCDNN_HEUR_MODE_INSTANT完全相同的功能。此重命名的目的是更好地匹配MCDNN_HEUR_MODE_B的命名。将MCDNN_HEUR_MODE_INSTANT的视为已弃用;应使用MCDNN_HEUR_MODE_A。

MCDNN_HEUR_MODE_A利用启发式决策树(heuristic decision tree),与MCDNN_HEUR_MODE_B相比,它在CPU上提供了最佳推理时间。

MCDNN_HEUR_MODE_A和MCDNN_HEUR_MODE_INSTANT支持以下操作节点或操作图:

  • ConvolutionFwd

  • ConvlutionBwFilter

  • ConvolutionBwData

  • ConvBNfprop

  • ConvBNwgrad

  • ConvBiasAct

  • ConvScaleBiasAct

  • DgradDreluBNBwdWeight

  • 运行时融合引擎支持的模式

不支持所有其他操作图。

MCDNN_HEUR_MODE_B

与MCDNN_HEUR_MODE_INSTANT相比,可以利用基于启发式的神经网络来提高泛化性能(Generalization Performance)。在使用神经网络的情况下,与MCDNN_HEUR_MODE_INSTANT相比,CPU上的推理时间将增加10-100倍。以下情况都不支持这些神经网络启发式:

  • 3D卷积

  • 分组卷积(groupCount大于1)

  • 空洞卷积(任意空间维度的任意扩张大于1)

此外,只有在曦云系列GPU上运行mcDNN时,x86平台才会启用神经网络。如果神经网络不受支持,MCDNN_HEUR_MODE_B也将回退到MCDNN_HEUR_MODE_INSTANT。 如果MCDNN_HEUR_MODE_B的开销将会降低总体网络性能,则MCDNN_HEUR_MODE_B将回退到MCDNN_HEUR_MODE_INSTANT。

MCDNN_HEUR_MODE_FALLBACK

此启发式模式旨在查找可提供功能支持的回退选项(不期望提供最佳GPU性能)。

8.1.1.6. mcdnnBackendKnobType_t

mcdnnBackendKnobType_t是一种枚举类型,用于表示性能旋钮(performance knob)的类型。性能旋钮是引擎的运行时设置,它会影响引擎的性能。用户可以使用mcdnnBackendGetAttribute()函数从MCDNN_BACKEND_ENGINE_DESCRIPTOR查询一系列性能旋钮及它们的有效值范围。用户可以使用带有MCDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR的mcdnnBackendSetAttribute()函数对每个旋钮进行设置。

typedef enum{
    MCDNN_KNOB_TYPE_SPLIT_K          = 0,
    MCDNN_KNOB_TYPE_SWIZZLE          = 1,
    MCDNN_KNOB_TYPE_TILE_SIZE        = 2,
    MCDNN_KNOB_TYPE_USE_TEX          = 3,
    MCDNN_KNOB_TYPE_EDGE             = 4,
    MCDNN_KNOB_TYPE_KBLOCK           = 5,
    MCDNN_KNOB_TYPE_LDGA             = 6,
    MCDNN_KNOB_TYPE_LDGB             = 7,
    MCDNN_KNOB_TYPE_CHUNK_K          = 8,
    MCDNN_KNOB_TYPE_SPLIT_H          = 9,
    MCDNN_KNOB_TYPE_WINO_TILE        = 10,
    MCDNN_KNOB_TYPE_MULTIPLY         = 11,
    MCDNN_KNOB_TYPE_SPLIT_K_BUF      = 12,
    MCDNN_KNOB_TYPE_TILEK            = 13,
    MCDNN_KNOB_TYPE_STAGES           = 14,
    MCDNN_KNOB_TYPE_REDUCTION_MODE   = 15,
    MCDNN_KNOB_TYPE_CTA_SPLIT_K_MODE = 16,
    MCDNN_KNOB_TYPE_SPLIT_K_SLC      = 17,
    MCDNN_KNOB_TYPE_IDX_MODE         = 18,
    MCDNN_KNOB_TYPE_SLICED           = 19,
    MCDNN_KNOB_TYPE_SPLIT_RS         = 20,
    MCDNN_KNOB_TYPE_SINGLEBUFFER     = 21,
    MCDNN_KNOB_TYPE_LDGC             = 22,
    MCDNN_KNOB_TYPE_SPECFILT         = 23,
    MCDNN_KNOB_TYPE_KERNEL_CFG       = 24,
    MCDNN_KNOB_TYPE_WORKSPACE        = 25,

    MCDNN_KNOB_TYPE_COUNTS = 26,
} mcdnnBackendKnobType_t;

8.1.1.7. mcdnnBackendLayoutType_t

mcdnnBackendLayoutType_t是一种枚举类型,用于表示引擎的可查询布局要求。 用户可以使用mcdnnBackendGetAttribute()函数从MCDNN_BACKEND_ENGINE_DESC描述符中查询布局要求。

typedef enum{
    MCDNN_LAYOUT_TYPE_PREFERRED_NCHW   = 0,
    MCDNN_LAYOUT_TYPE_PREFERRED_NHWC   = 1,
    MCDNN_LAYOUT_TYPE_PREFERRED_PAD4CK = 2,
    MCDNN_LAYOUT_TYPE_PREFERRED_PAD8CK = 3,
    MCDNN_LAYOUT_TYPE_COUNT            = 4,
} mcdnnBackendLayoutType_t;

8.1.1.8. mcdnnBackendNormFwdPhase_t

mcdnnBackendNormFwdPhase_t是一种枚举类型,用于区分归一化前向操作的推理和训练阶段。

typedef enum{
    MCDNN_NORM_FWD_INFERENCE = 0,
    MCDNN_NORM_FWD_TRAINING  = 1,
} mcdnnBackendNormFwdPhase_t;

8.1.1.9. mcdnnBackendNormMode_t

mcdnnBackendNormMode_t是一种枚举类型,用于表示后端归一化前向和反向操作中的归一化模式。

以下供参考:

  • 层归一化(Layer Normalization,LN)的定义,可参见Layer Normalization。

  • 实例归一化(Instance Normalization,IN)的定义,可参见Instance Normalization: The Missing Components for Fast Stylization。

  • 批量归一化的定义,可参见Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift。

目前暂不支持MCDNN_GROUP_NORM。如果尝试使用它,mcDNN将返回MCDNN_STATUS_INTERNAL_ERROR错误。

typedef enum{
    MCDNN_LAYER_NORM    = 0,
    MCDNN_INSTANCE_NORM = 1,
    MCDNN_BATCH_NORM    = 2,
    MCDNN_GROUP_NORM    = 3,
} mcdnnBackendNormMode_t;

8.1.1.10. mcdnnBackendNumericalNote_t

mcdnnBackendNumericalNot_t是一种枚举类型,用于表示引擎的可查询数值属性。用户可以使用mcdnnBackendGetAttribute()函数从MCDNN_BACKEND_ENGINE_DESC查询一系列数值注释。

typedef enum{
    MCDNN_NUMERICAL_NOTE_TENSOR_CORE = 0,
    MCDNN_NUMERICAL_NOTE_DOWN_CONVERT_INPUTS,
    MCDNN_NUMERICAL_NOTE_REDUCED_PRECISION_REDUCTION,
    MCDNN_NUMERICAL_NOTE_FFT,
    MCDNN_NUMERICAL_NOTE_NONDETERMINISTIC,
    MCDNN_NUMERICAL_NOTE_WINOGRAD,
    MCDNN_NUMERICAL_NOTE_WINOGRAD_TILE_4x4,
    MCDNN_NUMERICAL_NOTE_WINOGRAD_TILE_6x6,
    MCDNN_NUMERICAL_NOTE_WINOGRAD_TILE_13x13,
    MCDNN_NUMERICAL_NOTE_TYPE_COUNT,
} mcdnnBackendNumericalNote_t;

8.1.1.11. mcdnnBackendTensorReordering_t

mcdnnBackendTensorReordering_t是一种枚举类型,用来表示张量描述符的张量重排序属性。用户可以通过mcdnnBackendSetAttribute()和mcdnnBackendGetAttribute()函数在MCDNN_BACKEND_TENSOR_DESCRIPTOR中获取和设置该属性。

typedef enum{
    MCDNN_TENSOR_REORDERING_NONE    = 0,
    MCDNN_TENSOR_REORDERING_INT8x32 = 1,
    MCDNN_TENSOR_REORDERING_F16x16  = 2,
} mcdnnBackendTensorReordering_t;

8.1.1.12. mcdnnBnFinalizeStatsMode_t

mcdnnBnFinalizeStatsMode_t是一种枚举类型,用于暴露不同的数学运算模式,这些模式是将BN统计数据和训练的scale和bias转换为等效scale和bias,以便在下一个归一阶段应用于推理和训练用例。

typedef enum{
    MCDNN_BN_FINALIZE_STATISTICS_TRAINING  = 0,
    MCDNN_BN_FINALIZE_STATISTICS_INFERENCE = 1,
} mcdnnBnFinalizeStatsMode_t;

mcdnnBnFinalizeStatsMode_t的BN统计

BN统计模式

说明

MCDNN_BN_FINALIZE_STATISTICS _TRAINING

从 ySum、ySqSum 和已学习的 scale、bias 计算等效scale和bias

(可选) 更新移动统计数据并生成保存的 统计数据,以实现与 mcdnnBatchNormaliza tionBackward(),mcdnnBatchNormalization BackwardEx() 或 mcdnnNormalization Backward() 的互操作性

MCDNN_BN_FINALIZE_STATISTICS _INFERENCE

从已学习的移动统计数据和已学习 scale、 bias,计算等效scale和bias

8.1.1.13. mcdnnFraction_t

mcdnnFraction_t是允许用户定义int64_t的结构。

typedef enum{
    int64_t numerator;
    int64_t denominator;
} mcdnnFraction_t;

8.1.1.14. mcdnnGenStatsMode_t

mcdnnGenStatsMode_t是一种枚举类型,用于表示后端统计信息生成操作中的统计信息模式。

MCDNN_GENSTATS_SUM_SQSUM

在这种模式下,会计算并写出输入张量沿指定维度的和与平方和。 当前每个通道对归约维度的支持受限,但可根据请求添加额外支持。

8.1.1.15. mcdnnPaddingMode_t

mcdnnPaddingMode_t是一种枚举类型,用于表示后端重采样操作中的填充模式。

typedef enum{
    MCDNN_ZERO_PAD     = 0,
    MCDNN_NEG_INF_PAD  = 1,
    MCDNN_EDGE_VAL_PAD = 2,
} mcdnnPaddingMode_t ;

8.1.1.16. mcdnnPointwiseMode_t

mcdnnPointwiseMode_t是一种枚举类型,用于表示后端逐点运算(pointwise operation)描述符中描述的逐点数学运算。

MCDNN_POINTWISE_ADD

在此模式下,计算两个张量之间的逐点相加(pointwise addition)。

MCDNN_POINTWISE_ADD_SQUARE

在此模式下,计算第一张量与第二张量平方的逐点相加。

MCDNN_POINTWISE_DIV

在此模式下,计算第一张量被第二张量逐点真除(true division)。

MCDNN_POINTWISE_MAX

在此模式下,获取两个张量之间的逐点最大值(pointwise maximum)。

MCDNN_POINTWISE_MIN

在此模式下,获取两个张量之间的逐点最小值(pointwise minimum)。

MCDNN_POINTWISE_MOD

在此模式下,计算第一张量除以第二张量后的逐点浮点余数。

MCDNN_POINTWISE_MUL

在此模式下,计算两个张量之间的逐点相乘(pointwise multiplication)。

MCDNN_POINTWISE_POW

在此模式下,计算从第一张量到第二张量的幂的逐点值。

MCDNN_POINTWISE_SUB

在此模式下,计算两个张量之间的逐点相减(pointwise subtraction)。

MCDNN_POINTWISE_ABS

在此模式下,计算输入张量的逐点绝对值。

MCDNN_POINTWISE_CEIL

在此模式下,计算输入张量的逐点ceiling。

MCDNN_POINTWISE_COS

在此模式下,计算输入张量的逐点三角余弦(cosine)。

MCDNN_POINTWISE_EXP

在此模式下,计算输入张量的逐点指数。

MCDNN_POINTWISE_FLOOR

在此模式下,计算输入张量的逐点floor。

MCDNN_POINTWISE_LOG

在此模式下,计算输入张量的逐点自然对数。

MCDNN_POINTWISE_NEG

在此模式下,计算输入张量的逐点负值。

MCDNN_POINTWISE_RSQRT

在此模式下,计算输入张量平方根的逐点倒数。

MCDNN_POINTWISE_SIN

在此模式下,计算输入张量的逐点三角正弦(sine)。

MCDNN_POINTWISE_SQRT

在此模式下,计算输入张量的逐点平方根。

MCDNN_POINTWISE_TAN

在此模式下,计算输入张量的逐点三角正切(tangent)。

MCDNN_POINTWISE_ERF

在此模式下,计算逐点Error函数。

MCDNN_POINTWISE_IDENTITY

在此模式下,不执行任何计算。与其他逐点模式一样,此模式通过将输入张量的数据类型指定为一种类型,将输出张量的数据类型指定为另一种类型,来提供隐式转换。

MCDNN_POINTWISE_RELU_FWD

在此模式下,计算输入张量的逐点ReLU激活函数。

MCDNN_POINTWISE_TANH_FWD

在此模式下,计算输入张量的逐点tanh激活函数。

MCDNN_POINTWISE_SIGMOID_FWD

在此模式下,计算输入张量的逐点sigmoid激活函数。

MCDNN_POINTWISE_ELU_FWD

在此模式下,计算输入张量的逐点指数线性(Exponential Linear Unit,ELU)激活函数。

MCDNN_POINTWISE_GELU_FWD

在此模式下,计算输入张量的逐点高斯误差线性(Gaussian Error Linear Unit,GELU)激活函数。

MCDNN_POINTWISE_SOFTPLUS_FWD

在此模式下,计算输入张量的逐点softplus激活函数。

MCDNN_POINTWISE_SWISH_FWD

在此模式下,计算输入张量的逐点swish激活函数。

MCDNN_POINTWISE_GELU_APPROX_TANH_FWD

在此模式下,计算输入张量GELU激活函数的逐点tanh逼近(pointwise tanh approximation)。

有关详细信息,请参见GAUSSIAN ERROR LINEAR UNIT (GELUS) 。

MCDNN_POINTWISE_RELU_BWD

在此模式下,计算输入张量ReLU激活函数的逐点一阶导数。

MCDNN_POINTWISE_TANH_BWD

在此模式下,计算输入张量tanh激活函数的逐点一阶导数。

MCDNN_POINTWISE_SIGMOID_BWD

在此模式下,计算输入张量sigmoid激活函数的逐点一阶导数。

MCDNN_POINTWISE_ELU_BWD

在此模式下,计算输入张量ELU激活函数的逐点一阶导数。

MCDNN_POINTWISE_GELU_BWD

在此模式下,计算输入张量GELU激活函数的逐点一阶导数。

MCDNN_POINTWISE_SOFTPLUS_BWD

在此模式下,计算输入张量softplus激活函数的逐点一阶导数。

MCDNN_POINTWISE_SWISH_BWD

在此模式下,计算输入张量swish激活函数的逐点一阶导数。

MCDNN_POINTWISE_GELU_APPROX_TANH_BWD

在此模式下,计算输入张量GELU激活函数的tanh逼近的逐点一阶导数。

MCDNN_POINTWISE_CMP_EQ

在此模式下,计算第一个张量(与第二个张量相等)的逐点真假值(truth value)。

MCDNN_POINTWISE_CMP_NEQ

在此模式下,计算第一个张量(与第二个张量不相等)的逐点真假值。

MCDNN_POINTWISE_CMP_GT

在此模式下,计算第一个张量(大于第二个张量)的逐点真假值。

MCDNN_POINTWISE_CMP_GE

在此模式下,计算第一个张量(大于等于第二个张量)的逐点真假值。

MCDNN_POINTWISE_CMP_LT

在此模式下,计算第一个张量(小于第二个张量)的逐点真假值。

MCDNN_POINTWISE_CMP_LE

在此模式下,计算第一个张量(小于等于第二个张量)的逐点真假值。

MCDNN_POINTWISE_LOGICAL_AND

在此模式下,计算第一个张量logical AND第二个张量的逐点真假值。

MCDNN_POINTWISE_LOGICAL_OR

在此模式下,计算第一个张量logical OR第二个张量的逐点真假值。

MCDNN_POINTWISE_LOGICAL_NOT

在此模式下,计算输入张量logical NOT的逐点真假值。

MCDNN_POINTWISE_GEN_INDEX

在此模式中,输入张量的逐点索引值沿给定轴生成。

MCDNN_POINTWISE_BINARY_SELECT

在此模式下,根据给定的谓词(predicate)张量在两个输入张量中选择逐点值。

8.1.1.17. mcdnnResampleMode_t

mcdnnResampleMode_t是一种枚举类型,用于表示后端重采样操作中的重采样模式。

typedef enum{
    MCDNN_RESAMPLE_NEAREST                 = 0,
    MCDNN_RESAMPLE_BILINEAR                = 1,
    MCDNN_RESAMPLE_AVGPOOL                 = 2,
    MCDNN_RESAMPLE_AVGPOOL_INCLUDE_PADDING = 2,
    MCDNN_RESAMPLE_AVGPOOL_EXCLUDE_PADDING = 4,
    MCDNN_RESAMPLE_MAXPOOL                 = 3,
} mcdnnResampleMode_t;

8.1.1.18. mcdnnRngDistribution_t

mcdnnRngDistribution_t是一种枚举类型,用于表示要在后端Rng(随机数生成器)操作中使用的分布。

typedef enum{
    MCDNN_RNG_DISTRIBUTION_BERNOULLI,
    MCDNN_RNG_DISTRIBUTION_UNIFORM,
    MCDNN_RNG_DISTRIBUTION_NORMAL,
} mcdnnRngDistribution_t;

MCDNN_RNG_DISTRIBUTION_BERNOULLI

在此模式下,伯努利(Bernoulli)分布用于生成随机数。MCDNN_ATTR_RNG_BERNOULLI_DIST_PROBABILITY属性可用于指定生成1的概率。

MCDNN_RNG_DISTRIBUTION_UNIFORM

在此模式下,正态分布用于生成随机数。

MMCDNN_ATTR_RNG_NORMAL_DIST_MEAN和MCDNN_ATTR_RNG_NORMAL_DIST_STANDARD_DEVIATION属性可用于指定随机数生成器的均值和标准偏差。

8.1.1.19. mcdnnSignalMode_t

mcdnnSignalMode_t是一种枚举类型,用于表示后端信号操作中的信令模式。

typedef enum{
    MCDNN_SIGNAL_SET  = 0,
    MCDNN_SIGNAL_WAIT = 1,
} mcdnnSignalMode_t;

MCDNN_SIGNAL_SET

在此模式下,flag变量使用提供的信号值以原子方式进行更新。

MCDNN_SIGNAL_WAIT

在此模式下,操作将阻塞,直到flag变量与提供的信号值相等。

8.1.1.20. mcdnnBackendDescriptor_t

mcdnnBackendDescriptor_t是一个typedef void指针,指向一个不透明描述符结构。它所指向的结构类型由mcdnnBackendCreateDescriptor()为不透明结构分配内存时使用的参数决定。

描述符的属性可以使用mcdnnBackendSetAttribute()进行设置。设置完描述符的所有必需属性后,可以使用mcdnnBackendFinalize()终结该描述符。从终结的描述符中,可以使用mcdnnBackendGetAttribute()查询其可查询的属性。最后,可以使用mcdnnBackendDestroyDescriptor()释放为描述符分配的内存。

8.2. API参考

8.2.1. API函数

以下为mcDNN后端API函数。

8.2.1.1. mcdnnBackendCreateDescriptor()

此函数在描述符中为给定的描述符类型分配内存,并分配在描述符所指向的位置。

mcdnnStatus_t mcdnnBackendCreateDescriptor(mcdnnBackendDescriptorType_t descriptorType,
                                           mcdnnBackendDescriptor_t *descriptor)

备注

mcdnnBackendDescriptor_t是指向void * 的指针。

参数

descriptorType

输入。枚举的mcdnnBackendDescriptorType_t之一。

descriptor

输入。指针,指向要创建的mcdnnBackendDescriptor_t实例。

返回值

MCDNN_STATUS_SUCCESS

创建成功。

MCDNN_STATUS_NOT_SUPPORTED

不支持给定类型的描述符创建。

MCDNN_STATUS_ALLOC_FAILED

内存分配失败。

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.1.2. mcdnnBackendDestroyDescriptor()

此函数用于销毁已使用mcdnnBackendCreateDescriptor()创建的mcdnnBackendDescriptor_t实例。

mcdnnStatus_t mcdnnBackendDestroyDescriptor(mcdnnBackendDescriptor_t descriptor)

参数

descriptor

输入。已由mcdnnBackendCreateDescriptor()创建的mcdnnBackendDescriptor_t实例。

返回值

MCDNN_STATUS_SUCCESS

内存销毁成功。

MCDNN_STATUS_ALLOC_FAILED

内存销毁失败。

未定义行为

描述符在Create和Destroy描述符之间被更改。

未定义

在内存释放完成后,描述符所指向的值将为未定义值。

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.1.3. mcdnnBackendExecute()

此函数用于执行VariantPack上给定的引擎配置计划(Engine Configuration Plan),和数据上的最终ExecutionPlan。数据和工作空间封装在VariantPack中。

mcdnnStatus_ mcdnnBackendExecute(mcdnnHandle_t handle,
                                 mcdnnBackendDescriptor_t executionPlan,
                                 mcdnnBackendDescriptor_t varianPack)

参数

executionPlan

输入。指向要销毁的mcDNN句柄的指针。

variantPack

输入。指向终结的VariantPack的指针,包括:

  • 执行计划中所设置操作的每个非虚拟指针的数据指针。

  • 指向全局内存中用户分配的工作空间的指针,其大小至少与从MCDNN_BACKEND_.查询到的相同。

返回值

MCDNN_STATUS_SUCCESS

ExecutionPlan已成功执行。

MCDNN_STATUS_BAD_PARAM

遇到不正确或不一致的值。例如:

  • 所需的数据指针无效。

MCDNN_STATUS_INTERNAL_ERROR

遇到一些内部错误。

MCDNN_STATUS_EXECUTION_FAILED

使用VariantPack执行计划时遇到错误。

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.1.4. mcdnnBackendFinalize()

此函数终结描述符所指向的内存。终结的类型取决于descriptorType参数,具有该参数的描述符是使用mcdnnBackendCreateDescriptor()创建的,或使用mcdnnBackendInitialize()初始化的。

mcdnnStatus_t mcdnnbBackendFinalize(mcdnnBackendDescriptor descriptor)

mcdnnBackendFinalize()还会检查在创建/初始化和终结阶段之间设置的所有属性。 如果成功,mcdnnBackendFinalize()将返回MCDNN_STATUS_SUCCESS,并且描述符的终结状态设置为true。在此状态下,不允许使用mcdnnBackendSetAttribute()设置属性。仅当描述符的终结状态为true时,才允许使用mcdnnBackendGetAttribute()获取属性。

参数

descriptor

输入。要终结的mcdnnBackendDescriptor_t实例。

返回值

MCDNN_STATUS_SUCCESS

描述符已成功终结。

MCDNN_STATUS_BAD_PARAM

遇到无效的描述符属性值或其组合。

MCDNN_STATUS_NOT_SUPPORTED

遇到当前版本mcDNN不支持的描述符属性值或其组合。

MCDNN_STATUS_INTERNAL_ERROR

遇到一些内部错误。

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.1.5. mcdnnBackendGetAttribute()

此函数用于检索描述符属性的值。attributeName是请求的属性名。attributeType是属性类型。requestsedElementCount是要检索的元素数。请求的属性的元素数存储在elementCount中。 检索到的值存储在arrayOfElements中。当属性具有单个值时,arrayOfElements可以是指向输出值的指针。如果描述符已成功终结,则此函数将返回MCDNN_STATUS_NOT_INTIALIZED。

mcdnnStatus_t mcdnnBackendGetAttribute(
    mcdnnBackendDescriptor_t descriptor,
    mcdnnBackendAttributeName_t attributeName,
    mcdnnBackendAttributeType_t attributeType,
    int64_t requestedElementCount,
    int64_t *elementCount,
    void *arrayOfElements);

参数

descriptor

输入。用户要检索其属性的mcdnnBackendDescriptor_t实例。

attributeName

输入。从描述符中获取的属性名称。

attributeType

输入。属性类型。

requestedElementCount

输入。要输出到arrayOfElements的元素数。

elementCount

输入。描述符属性具有的元素数的输出指针。请注意,mcdnnBackendGetAttribute()只会将最少的elementCount和requestedElementCount元素写入arrayOfElements。

arrayOfElements

输入。attributeType数据类型的元素数组。attributeType的数据类型列在mcdnnBackendAttributeType_t映射表中。

返回值

MCDNN_STATUS_SUCCESS

attributeName已成功提供给描述符。

MCDNN_STATUS_BAD_PARAM

遇到一个或多个无效或不一致的参数值。例如:

  • attributeName不是描述符的有效属性。

  • attributeType不是属性的有效类型之一。

MCDNN_STATUS_NOT_INITIALIZED

未使用mcdnnBackendFinalize()成功终结描述符。

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.1.6. mcdnnBackendInitialize()

此函数将大小为sizeInByte的描述符所指向的预分配内存重新用于类型为descriptorType的后端描述符。描述符的终结状态设置为false。

mcdnnStatus_t mcdnnBackendInitialize(
    mcdnnBackendDescriptor_t descriptor,
    mcdnnBackendDescriptorType_t descriptorType,
    size_t sizeInBytes)

参数

descriptor

输入。要初始化的mcdnnBackendDescriptor_t实例。

descriptorType

输入。mcDNN后端描述符类型的枚举值。

sizeInBytes

输入。描述符指向的内存大小。

返回值

MCDNN_STATUS_SUCCESS

内存初始化成功。

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的参数值。例如:

  • 描述符是一个nullptr

  • sizeInBytes小于描述符类型所需的大小

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.1.7. mcdnnBackendSetAttribute()

此函数将描述符的属性值设为作为指针时提供的值。descriptor是要设置的描述符。attributeName是要设置的属性名称。attributeType是属性的类型。arrayOfElements指向属性要设置的值。元素数由elementCount给定。 如果描述符已使用mcdnnBackendFinalize()成功终结,则此函数将返回MCDNN_STATUS_NOT_INTIALIZED。

mcdnnStatus_t mcdnnBackendSetAttribute(
    mcdnnBackendDescriptor_t descriptor,
    mcdnnBackendAttributeName_t attributeName,
    mcdnnBackendAttributeType_t attributeType,
    int64_t elementCount,
    void *arrayOfElements);

参数

descriptor

输入。正在设置其属性的mcdnnBackendDescriptor_t实例。

attributeName

输入。在描述符上所设置属性的名称。

attributeType

输入。属性类型。

elementCount

输入。设置的元素数。

arrayOfElements

输入。数组的起始位置,从中读取值。数组元素的数据类型应是attributeType。attributeType的数据类型列在mcdnnBackendAttributeType_t映射表中。

返回值

MCDNN_STATUS_SUCCESS

描述符中已设置attributeName。

MCDNN_STATUS_NOT_INITIALIZED

描述符所指向的后端描述符已处于终结状态。

MCDNN_STATUS_BAD_PARAM

调用该函数所使用参数的值无效。可能的原因包括:

  • attributeName不是描述符的可设置属性

  • 此attributeName的attributeType不正确。

  • elementCount值无效。

  • arrayOfElements包含对attributeType无效的值。

MCDNN_STATUS_NOT_SUPPORTED

当前版本的mcDNN不支持设置的属性值。

其他返回值取决于使用的参数,如mcDNN后端API中所述。

8.2.2. 后端描述符类型

此部分枚举各种描述符的所有有效属性。

8.2.2.1. MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR, &desc)创建的mcDNN后端卷积描述符,为前向和反向传播的卷积运算符指定参数:计算数据类型、卷积模式、卷积核扩张和步幅、填充。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_CONVOLUTION_):

MCDNN_ATTR_CONVOLUTION_COMP_TYPE

卷积运算符的计算类型。

  • MCDNN_TYPE_DATA_TYPE;一个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_CONV_MODE

卷积或交叉相关模式。

  • MCDNN_TYPE_CONVOLUTION_MODE;一个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_DILATIONS

卷积核扩张。

  • MCDNN_TYPE_INT64;一个或多个,但最多为MCDNN_MAX_DIMS个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_FILTER_STRIDES

卷积核步幅。

  • MCDNN_TYPE_INT64;一个或多个,但最多为MCDNN_MAX_DIMS个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_PRE_PADDINGS

在每个空间维度起始处填充。

  • MCDNN_TYPE_INT64;一个或多个,但最多为MCDNN_MAX_DIMS个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_POST_PADDINGS

在每个空间维度结尾处填充。

  • MCDNN_TYPE_INT64;一个或多个,但最多为MCDNN_MAX_DIMS个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_SPATIAL_DIMS

卷积中的空间维数。

  • MCDNN_TYPE_INT64,一个元素。

  • 必要属性

终结

带有MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

用于设置 MCDNN_ATTR_CONVOLUTION_DILATIONSMCDNN_ATTR_CONVOLUTION_FILTER_STRIDESMCDNN_ATTR_CONVOLUTION_PRE_PADDINGSMCDNN_ATTR_CONVOLUTION_POST_PADDINGS 的elementCount参数,与 MCDNN_ATTR_CONVOLUTION_SPATIAL_DIMS 的设置值不相等。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.2. MCDNN_BACKEND_ENGINE_DESCRIPTOR

使用描述符类型值MCDNN_BACKEND_ENGINE_DESCRIPTOR创建的mcDNN后端引擎描述符,描述用于计算操作图的引擎。引擎是一组具有类似计算和数值属性的内核。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_ENGINE_):

MCDNN_ATTR_ENGINE_OPERATION_GRAPH

要计算的操作图。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_OPERATIONGRAPH_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_ENGINE_GLOBAL_INDEX

引擎的索引。

  • MCDNN_TYPE_INT64;一个元素。

  • 有效值介于0和MCDNN_ATTR_OPERATIONGRAPH_ENGINE_GLOBAL_COUNT - 1之间

  • 必要属性

MCDNN_ATTR_ENGINE_KNOB_INFO

引擎性能旋钮的描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_KNOB_INFO_DESCRIPTOR的一个元素。

  • 只读属性。

MCDNN_ATTR_ENGINE_NUMERICAL_NOTE

引擎的数值属性。

  • MCDNN_TYPE_NUMERICAL_NOTE; zero or more elements.

  • 只读属性。

MCDNN_ATTR_ENGINE_LAYOUT_INFO

引擎的首选张量布局。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_LAYOUT_INFO_DESCRIPTOR的一个元素。

  • 只读属性。

终结

MCDNN_STATUS_SUCCESS

描述符已成功终结。

MCDNN_STATUS_NOT_SUPPORTED

当前版本的mcDNN不支持设置的属性值。例如:

  • MCDNN_ATTR_ENGINE_GLOBAL_INDEX的值不在有效范围内。

MCDNN_STATUS_BAD_PARAM

描述符属性集不一致或无效。例如:

  • 操作图描述符集尚未终结。

8.2.2.3. MCDNN_BACKEND_ENGINECFG_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_ENGINECFG_DESCRIPTOR, &desc)创建的mcDNN后端引擎配置描述符,由引擎描述符和一组旋钮选择描述符组成。用户可以从引擎配置中查询中间信息:可在执行之间重复使用计算中间结果。

属性

MCDNN_ATTR_ENGINECFG_ENGINE

后端引擎。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR:一个元素,类型MCDNN_BACKEND_ENGINE_DESCRIPTOR的后端描述符。

  • 必要属性

MCDNN_ATTR_ENGINECFG_KNOB_CHOICES

引擎调优旋钮和选择。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR:零个或多个元素,类型为MCDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR的后端描述符。

MCDNN_ATTR_ENGINECFG_INTERMEDIATE_INFO

此引擎配置的计算中间信息。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR:一个元素,类型MCDNN_BACKEND_INTERMEDIATE_INFO_DESCRIPTOR的后端描述符。

  • 只读属性。

  • 当前不支持。用于将来实现的占位符。

终结

MCDNN_STATUS_SUCCESS

描述符已成功终结。

MCDNN_STATUS_NOT_SUPPORTED

当前版本的mcDNN不支持设置的属性值。例如:

  • 值旋钮。

8.2.2.4. MCDNN_BACKEND_ENGINEHEUR_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_ENGINEHEUR_DESCRIPTOR, &desc)创建的mcDNN后端引擎启发式描述符,允许用户获取操作图引擎配置描述符,操作图引擎配置描述符根据mcDNN的启发式按性能排序。

属性

MCDNN_ATTR_ENGINEHEUR_OPERATION_GRAPH

启发式结果进行查询的操作图。

MCDNN_TYPE_BACKEND_DESCRIPTOR

一个元素。

  • 必要属性

MCDNN_ATTR_ENGINEHEUR_MODE

查询结果的启发式模式。

  • MCDNN_TYPE_HEUR_MODE;一个元素。

  • 必要属性

MCDNN_ATTR_ENGINEHEUR_RESULTS

启发式查询的结果。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_ENGINECFG_DESCRIPTOR的零个或多个元素。

  • 只读属性。

终结

返回mcdnnBackendFinalize(desc)的值,其中desc是mcDNN后端引擎启发式描述符:

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.5. MCDNN_BACKEND_EXECUTION_PLAN_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_EXECUTION_PLAN_DESCRIPTOR, &desc)创建的mcDNN后端执行计划描述符,允许用户指定执行计划,该计划由mcDNN句柄,引擎配置以及(可选)一组要计算的中间结果组成。

属性

MCDNN_ATTR_EXECUTION_PLAN_HANDLE

mcDNN句柄。

  • MCDNN_TYPE_HANDLE;一个元素。

  • 必要属性

MCDNN_ATTR_EXECUTION_PLAN_ENGINE_CONFIG

要执行的引擎配置。

  • MCDNN_BACKEND_ENGINECFG_DESCRIPTOR;一个元素。

  • 必要属性

MCDNN_ATTR_EXECUTION_PLAN_RUN_ONLY_INTERMEDIATE_UIDS

要计算的中间结果的唯一标识符。

  • MCDNN_TYPE_INT64;零个或多个元素。

  • 可选属性。如果设置此属性,执行计划将只计算指定的中间结果,而不计算引擎配置中操作图上的任何输出张量。

MCDNN_ATTR_EXECUTION_PLAN_COMPUTED_INTERMEDIATE_UIDS

预计算中间结果的唯一标识符。

  • MCDNN_TYPE_INT64;零个或多个元素。

  • 可选属性。如果设置此属性,计划将在执行过程中使用variant pack描述符中每个中间结果的指针。

  • 当前不支持:用于将来实现的占位符。

MCDNN_ATTR_EXECUTION_PLAN_WORKSPACE_SIZE

执行该计划所需的工作空间缓冲区的大小。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_EXECUTION_PLAN_JSON_REPRESENTATION

序列化执行计划的JSON表达形式。序列化和反序列化可以分别通过获取和设置此属性来完成。

  • MCDNN_TYPE_CHAR;许多元素,数量与执行计划的json表达形式的NULL结尾字符串的大小相同。

终结

返回mcdnnBackendFinalize(desc)的值,其中desc是mcDNN后端执行计划描述符:

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.6. MCDNN_BACKEND_INTERMEDIATE_INFO_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_INTERMEDIATE_INFO_DESCRIPTOR, &desc)创建的mcDNN后端中间结果描述符,是一个只读描述符,包含有关执行中间结果的信息。执行中间结果是对设备内存中引擎配置进行的一些中间计算,可在计划执行之间重复使用,以摊销内核。每个中间结果都由唯一的ID标识。用户可以查询中间结果的设备内存大小。 中间结果可以依赖于由张量UID标识的一个或多个张量的数据或操作图的另一个属性的数据。

此描述符是一个只读描述符。用户无法设置此描述符属性或终结此描述符。用户从引擎配置描述符查询终结的描述符。

属性

MCDNN_ATTR_INTERMEDIATE_INFO_UNIQUE_ID

中间结果的唯一标识符。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_INTERMEDIATE_INFO_SIZE

中间结果所需的设备内存大小。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_INTERMEDIATE_INFO_DEPENDENT_DATA_UIDS

中间结果所依赖张量的UID。

  • MCDNN_TYPE_INT64;零个或多个元素。

  • 只读属性。

MCDNN_ATTR_INTERMEDIATE_INFO_DEPENDENT_ATTRIBUTES

用于将来实现的占位符。

终结

用户未终结此描述符。带有后端中间描述符的mcdnnBackendFinalize(desc)返回MCDNN_STATUS_NOT_SUPPORTED。

8.2.2.7. MCDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR, &desc)创建的mcDNN后端旋钮选择描述符,由要设置的旋钮类型和要设置旋钮的值组成。

属性

MCDNN_ATTR_KNOB_CHOICE_KNOB_TYPE

要设置的旋钮类型。

  • MCDNN_TYPE_KNOB_TYPE:一个元素。

  • 必要属性

MCDNN_ATTR_KNOB_CHOICE_KNOB_VALUE

  • MCDNN_TYPE_INT64;一个元素。

  • 必要属性

终结

返回mcdnnBackendFinalize(desc)的值,其中desc是mcDNN后端旋钮选择描述符:

MCDNN_STATUS_SUCCESS

旋钮选择描述符已成功终结。

8.2.2.8. MCDNN_BACKEND_KNOB_INFO_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_INFO_DESCRIPTOR, &desc)创建的mcDNN后端旋钮信息描述符,由引擎性能旋钮的类型和有效值范围组成。有效值范围根据有效值的最小值,最大值和步幅给定。这是一个纯粹的信息描述符类型。不支持设置描述符属性。用户从终结的后端描述符中获取一组终结的描述符,每个旋钮类型对应一个描述符。

属性

MCDNN_ATTR_KNOB_INFO_TYPE

性能旋钮的类型。

  • MCDNN_TYPE_KNOB_TYPE: one element.

  • 只读属性。

MCDNN_ATTR_KNOB_INFO_MAXIMUM_VALUE

此旋钮的最小有效选择值。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_KNOB_INFO_MINIMUM_VALUE

此旋钮的最大有效选择值。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_KNOB_INFO_STRIDE

此旋钮有效选择值的步幅。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

终结

此描述符为只读描述符;它是从mcDNN后端引擎配置描述符中检索和终结的。 用户无法进行设置或终结。

8.2.2.9. MCDNN_BACKEND_LAYOUT_INFO_DESCRIPTOR

mcDNN后端布局信息描述符(使用描述符类型值MCDNN_BACKEND_LAYOUT_INFO_DESCRIPTOR创建),提供有关张量首选布局的信息。

属性

MCDNN_ATTR_LAYOUT_INFO_TENSOR_UID

张量的UID。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_LAYOUT_INFO_TYPES

张量的首选布局。

  • MCDNN_TYPE_LAYOUT_TYPE:0或者多个元素按mcdnnBackendLayoutType_t排列。

  • 只读属性。

终结

此描述符为只读描述符;它是从mcDNN后端引擎配置描述符中检索和终结的。 用户无法对其进行属性设置或终结。

8.2.2.10. MCDNN_BACKEND_MATMUL_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_MATMUL_DESCRIPTOR, &desc)创建的mcDNN后端matmul描述符,指定matmul操作所需的任意元数据。

属性

MCDNN_ATTR_MATMUL_COMP_TYPE

用于matmul操作的计算精度。

  • MCDNN_TYPE_DATA_TYPE;一个元素。

  • 必要属性

终结

返回mcdnnBackendFinalize(desc)的值,其中desc是mcDNN后端matmul描述符:

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.11. MCDNN_BACKEND_OPERATION_CONCAT_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_CONCAT_DESCRIPTOR, &desc)创建的mcDNN后端连接操作描述符,指定一个操作节点,用于沿给定连接轴连接张量的给定向量。

此操作还支持就地模式,其中假定一个输入张量在输出张量中的正确位置,即它们共享相同的设备缓冲区。

属性

mcDNN后端连接操作描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATION_CONCAT_):

MCDNN_ATTR_OPERATION_CONCAT_AXIS

连接的张量维度。

  • 类型: MCDNN_TYPE_INT64

  • 必要属性

MCDNN_ATTR_OPERATION_CONCAT_INPUT_DESCS

输入张量描述符的向量,按该向量中提供的顺序进行连接。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个或多个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONCAT_INPLACE_INDEX

输入张量描述符向量中的输入张量索引,该索引已就地存在于输出张量中。

  • 类型: MCDNN_TYPE_INT64

  • 可选属性。

MCDNN_ATTR_OPERATION_CONCAT_OUTPUT_DESC

描述输入张量连接结果的输出张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

终结

带有MCDNN_BACKEND_OPERATION_CONCAT_DESCRIPTOR()的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 操作中涉及的张量在所有维度中都应具有相同的形状,它们所连接的维度除外。

  • 连接维度中的输出张量形状应等于同一维度中所有输入张量的形状总和。

  • 连接轴应为有效的张量维度。

  • 如果提供就地输入张量索引,其应是输入张量描述符向量中的有效索引。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.12. MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD_DATA_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD _DATA_DESCRIPTOR, &desc)创建的mcDNN后端卷积反向数据操作描述符,指定卷积反向数据的操作节点,以使用卷积核张量w,响应梯度dy,输出缩放比例α和残差相加缩放比例β,来计算输入数据梯度dx。 即公式 \({dx}\ = \ \alpha\ \left( {w*^{¯}{dy}} \right)\ + \beta{dx}\) ,其中 \(*^{¯}\) 表示反向卷积数据运算符。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_):

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_ALPHA

alpha值。

  • MCDNN_TYPE_FLOAT或MCDNN_TYPE_DOUBLE;一个或多个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_BETA

beta值。

  • MCDNN_TYPE_FLOAT或MCDNN_TYPE_DOUBLE;一个或多个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_CONV_DESC

卷积运算符描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_W

卷积卷积核张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_DX

图像梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_DATA_DY

响应梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

终结

在终结卷积操作时,张量DX,W和DY的张量维度将根据MCDNN_BACKEND_OPERATION_CONVOLUTION_FORWARD_DESCRIPTOR中描述的X,W和Y张量维度的相同解释进行绑定。

带有MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD_DATA_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 在卷积运算符下,DX,W和DY张量不构成有效的卷积操作。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.13. MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD_FILTER_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD _FILTER_DESCRIPTOR, &desc)创建的mcDNN后端卷积反向卷积核操作描述符,指定卷积反向卷积核的操作节点,以使用图像张量w,响应梯度dy,输出缩放比例α和残差相加缩放比例β,来计算卷积核梯度dw。 即公式:\({dw}\ = \ \alpha\ \left( {x*^{\sim}{dy}} \right)\ + \beta{dw}\) ,其中 \(*^{\sim}\) 表示反向卷积卷积核运算符。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_):

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_ALPHA

alpha值。

  • MCDNN_TYPE_FLOAT or MCDNN_TYPE_DOUBLE; one or more elements.

  • 必要属性需要在终结前进行设置。

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_BETA

beta值。

  • MCDNN_TYPE_FLOAT或MCDNN_TYPE_DOUBLE;一个或多个元素。

  • 必要属性需要在终结前进行设置。

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_CONV_DESC

卷积运算符描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR的一个元素。

  • 必要属性需要在终结前进行设置。

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_DW

卷积卷积核张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性需要在终结前进行设置。

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_X

图像梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性需要在终结前进行设置。

MCDNN_ATTR_OPERATION_CONVOLUTION_BWD_FILTER_DY

响应梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性需要在终结前进行设置。

终结

在终结卷积操作时,张量X,DW和DY的张量维度将根据MCDNN_BACKEND_OPERATION_CONVOLUTION_FORWARD_DESCRIPTOR中描述的X,W和Y张量维度的相同解释进行绑定。

带有MCDNN_BACKEND_OPERATION_CONVOLUTION_BACKWARD_FILTER_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 在卷积运算符下,X,DW和DY张量不构成有效的卷积操作。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.14. MCDNN_BACKEND_OPERATION_CONVOLUTION_FORWARD_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_CONVOLUTION_FORWARD _DESCRIPTOR, &desc) 创建的mcDNN后端卷积正向操作描述符,指定正向卷积的操作节点,以使用卷积核张量w,输出缩放比例α和残差相加缩放比例β,来卷积计算图像张量x的响应张量y。 即公式 \({dw}\ = \ \alpha\ \left( {{w}*{x}} \right)\ + \beta{y}\) ,其中* 是正向的卷积运算符。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_):

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_ALPHA

alpha值。

  • MCDNN_TYPE_FLOAT或MCDNN_TYPE_DOUBLE;一个或多个元素。

  • 需要在终结前进行设置。

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_BETA

beta值。

  • MCDNN_TYPE_FLOAT或MCDNN_TYPE_DOUBLE;一个或多个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_CONV_DESC

卷积运算符描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_W

卷积卷积核张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_X

图像张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_Y

响应张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_CONVOLUTION_SPATIAL_DIMS

卷积中的空间维数。

  • MCDNN_TYPE_INT64,一个元素。

  • 必要属性

终结

在终结卷积操作时,张量X,W和Y的张量维度将根据以下解释进行绑定:

MCDNN_ATTR_OPERATION_CONVOLUTION_FORWARD_CONV_DESC的MCDNN_ATTR_CONVOLUTION_SPATIAL_DIMS属性是卷积的空间维数。张量X,W和Y的维数必须比空间维数大2或3,具体取决于用户选择如何指定卷积张量。

如果张量维数为空间维数+2:

  • X张量维度和步幅数组为[N,GC,…]

  • W张量维度和步幅数组为[KG,C,…]

  • Y张量维度和步幅数组为[N,GK,…]

其中省略号… 是每个张量空间维度的缩略,G是卷积组数,C和K是每个组的输入和输出特征图数。在这种解释中,假定每个组的内存布局都是压缩的。mcdnnBackendFinalize()声明张量维度和步幅与此解释一致,否则返回MCDNN_STATUS_BAD_PARAM。

如果张量维数为空间维数+3:

  • X张量维度和步幅数组为[N,G,C,…]

  • W张量维度和步幅数组为[G,K,C,…]

  • Y张量维度和步幅数组为[N,G,K,…]

其中省略号… 是每个张量空间维度的缩略,G是卷积组数,C和K是每个组的输入和输出特征图数。在这种解释中,用户可以指定未压缩的组步幅。mcdnnBackendFinalize()声明张量维度和步幅与此解释一致,否则返回MCDNN_STATUS_BAD_PARAM。

带有MCDNN_BACKEND_OPERATION_CONVOLUTION_FORWARD_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 在卷积运算符下,X,W和Y张量不构成有效的卷积操作。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.15. MCDNN_BACKEND_OPERATION_GEN_STATS_DESCRIPTOR

表示会生成每个通道统计信息的操作。 描述符中的MCDNN_ATTR_OPERATION_GENSTATS_MODE属性决定生成特定的统计信息。 目前,MCDNN_ATTR_OPERATION_GENSTATS_MODE仅支持MCDNN_GENSTATS_SUM_SQSUM。 它将生成输入张量x的每个通道元素的总和与平方和。 除C维度外,其他输出维度应都为1。此外,输出的C维应等于输入的C维。 此不透明结构可以使用mcdnnBackendCreateDescriptor() (MCDNN_BACKEND_OPERATION_GEN_STATS_DESCRIPTOR)来创建。

属性

MCDNN_ATTR_OPERATION_GENSTATS_MODE

设置操作的MCDNN_TYPE_GENSTATS_MODE。必要属性。

MCDNN_ATTR_OPERATION_GENSTATS_MATH_PREC

计算的数学精度。必要属性。

MCDNN_ATTR_OPERATION_GENSTATS_XDESC

设置输入张量X的描述符。此属性为必要属性。

MCDNN_ATTR_OPERATION_GENSTATS_SUMDESC

设置输出张量总和的描述符。必要属性。

MCDNN_ATTR_OPERATION_GENSTATS_SQSUMDESC

设置输出张量平方和的描述符。必要属性。

终结

在终结阶段,对属性进行交叉检查,以确保没有冲突。可能会返回以下状态:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 输入和输出张量之间的维数不匹配。

  • 输入/输出张量维度与上述描述不一致。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.16. MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR, &desc)创建的mcDNN后端matmul操作描述符,指定matmul操作节点,通过矩阵A和矩阵B相乘来计算矩阵乘积C,如以下公式所示: C=AB

使用matmul操作时,矩阵至少应为秩-2张量。最后两个维度应对应于M、K或N。前面所有维度均解释为batch维度。 如果batch维度为零,则要求如下:

零Batch维度的MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR

Case

Matrix A

Matrix B

Matrix C

Single matmul

M x K

K x N

M x N

对于单个batch维度,要求以下:

单Batch维度的MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR

Case

Matrix A

Matrix B

Matrix C

Single matmul

1 x M x K

1 x K x N

1 x M x N

Batch matmul

B x M x K

B x K x N

B x M x N

Broadcast A

1 x M x K

B x K x N

Broadcast B

B x M x K

1 x K x N

其中:

  • B表示批大小

  • M是矩阵A的行数

  • K是输入矩阵A的列数(与输入矩阵B的行数相同)

  • N是输入矩阵B的列数

如果矩阵A或B的批大小设置为1,则表示矩阵将在batch matmul中广播。输出矩阵C将为B x M x N的张量。

上述广播规则适用于所有batch维度。具体而言,适用于具有3个batch维度的张量:

3 Batch维度的MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR

Case

Matrix A

Matrix B

Matrix C

Multiple batched matmul

B1 x 1 x B3 x M x K

1 x B2 x B3 x K x N

B1 x B2 x B3 x M x N

具有多个batch维度的功能支持此布局:batch没有以单一步幅进行压缩。这种情况在多头注意力机制中尤其常见。

可以使用张量描述符中的步幅指定给定张量中矩阵元素的寻址。 步幅表示每个张量维度的元素之间的间距。矩阵张量A(B x M x N)具有步幅[BS,MS,NS],它表示实际矩阵元素A[x,y,z]位于为张量A分配的线性内存空间的(A_base_address + x * BS + y * MS + z * NS)中。 目前,必须对最内维度进行压缩,需要MS=1或NS=1。否则,对于如何在张量描述符中指定步幅,没有其他技术限制,因为它应该遵循上述寻址公式和用户指定的步幅。

这种表示为一些常见的用法提供了支持,例如前导维度和矩阵转置,我们将通过以下示例进行解释。

  1. 最常见的情况是一个满载的行主batch矩阵,不考虑任何前导维度和转置。在这种情况下,BS = M*N,MS = N,NS = 1。

  2. 矩阵转置可以通过使用步幅交换内部和外部维度来实现。即:

    • 指定非转置矩阵: BS = M*N, MS = N and NS = 1

    • 指定矩阵转置: BS = M*N, MS = 1 and NS = M

  3. 前导维度是类BLAS API中广泛使用的概念,它描述了2D数组内存分配的内部维度(与概念上的矩阵维度相对)。它在某种程度上类似于步幅,定义了外部维度中元素之间的间距。显示与矩阵内部维度之间差异的最典型用例,是当矩阵仅是已分配内存中数据的一部分时,对子矩阵或对齐内存分配中的矩阵进行寻址。因此,列主矩阵A中的前导维度LDA必须满足LDA >= M,而在行主矩阵A中,它必须满足LDA >= N。要从前导维度概念过渡到使用步幅, 必须满足MS >= N且NS = 1,或MS = 1且NS >= M。请记住,虽然这是一些实际使用案例,但这些不等式不会对可接受的步幅规格施加技术限制。

其他常用的GEMM功能,如alpha/beta输出混合,也可以使用matmul操作和其他逐点操作来实现。

属性

mcDNN后端matmul描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATION_MATMUL_):

MCDNN_ATTR_OPERATION_MATMUL_ADESC

矩阵A描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_MATMUL_BDESC

矩阵B描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_MATMUL_CDESC

矩阵C描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_MATMUL_IRREGULARLY_STRIDED_BATCH_COUNT

要在矩阵的batch中执行的matmul操作数。 Default = 1.

  • MCDNN_TYPE_INT64;一个元素。

  • 默认值为1。

MCDNN_ATTR_OPERATION_MATMUL_GEMM_M_OVERRIDE_DESC

gemm_m_override张量描述符。允许通过此张量覆盖batch矩阵乘法的M维。仅在运行时融合引擎中记录的运行时融合引擎的模式6中受支持。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_MATMUL_GEMM_N_OVERRIDE_DESC

gemm_n_override张量描述符。允许通过此张量覆盖batch矩阵乘法的N维。仅在运行时融合引擎中记录的运行时融合引擎的模式6中受支持。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR; one element of descriptor type MCDNN_BACKEND_TENSOR_DESCRIPTOR.

  • 可选属性。

MCDNN_ATTR_OPERATION_MATMUL_GEMM_K_OVERRIDE_DESC

gemm_k_override张量描述符。支持通过此张量覆盖batch矩阵乘法的K维。仅在运行时融合引擎中记录的运行时融合引擎的模式6中受支持。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_MATMUL_DESC

matmul操作描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_MATMUL_DESCRIPTOR的一个元素。

  • 必要属性

终结

在matmul操作的终结过程中,将检查矩阵A,B和C的张量维度,以确保满足矩阵乘法的要求:

带有MCDNN_BACKEND_OPERATION_MATMUL_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_NOT_SUPPORTED

遇到不支持的属性值。可能的原因包括:

  • 不是所有的矩阵A,B和C都至少是秩-2张量。

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • MCDNN_ATTR_OPERATION_MATMUL_IRREGULARLY_STRIDED_BATCH_COUNT的指定值为负。

  • MCDNN_ATTR_OPERATION_MATMUL_IRREGULARLY_STRIDED_BATCH_COUNT和矩阵A,B和C的一个或多个批大小不等于1。即有一个冲突,指定了不规则的和规则的跨步批处理矩阵乘法(strided batched matrix multiplication),这是一个无效用例。

  • 矩阵A,B和C的维度不满足矩阵乘法的要求。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.17. MCDNN_BACKEND_OPERATION_NORM_BACKWARD_DESCRI PTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_NORM_BACKWARD_ DESCRIPTOR, &desc)创建的mcDNN后端反向归一化操作,指定一个用于反向归一化的节点,该节点将用于输入梯度张量dY,输出梯度张量dX、权重梯度dScale和dBias。使用MCDNN_ATTR_OPERATION_NORM_BWD_MODE属性设置归一化模式。

备注

在mcDNN中,对该操作的支持仅限于实验性多GPU批量归一化后端模式,并具有一组功能限制。在将来的版本中,将扩展以支持不同的模式。

属性

MCDNN_ATTR_OPERATION_NORM_BWD_MODE

为反向归一化操作选择归一化模式。

  • MCDNN_TYPE_NORM_MODE;一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_XDESC

输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_MEAN_DESC

保存的均值输入张量描述符,用于在训练阶段正向计算期间重复使用计算的均值。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_BWD_INV_VARIANCE_DESC

保存的逆方差输入张量描述符,用于在训练阶段正向计算期间重复使用计算的均值。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_BWD_DYDESC

梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_BWD_DYDESC

梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_SCALE_DESC

归一化scale描述符。请注意,反向传递不需要bias描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_EPSILON_DESC

epsilon值的标量输入张量描述符。仅当保存的均值和方差未作为输入传递到操作时,才需要epsilon值。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_BWD_DSCALE_DESC

scale梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_DBIAS_DESC

bias梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_DXDESC

输入梯度张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_BWD_PEER_STAT_DESCS

多GPU归一化中使用的通信缓冲区的张量描述符向量。通常,为节点中的每个GPU提供一个缓冲区。这是一个可选属性,仅用于多GPU张量统计数据归约。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个或多个元素。

  • 可选属性。

终结

在终结阶段,对属性进行检查,以确保没有冲突。

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 梯度张量dY,dX和输入张量X的维度不匹配。

  • 均值,scale和inv_variance张量的通道计数C不匹配。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.18. MCDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRI PTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_NORM_FORWARD_ DESCRIPTOR, &desc)创建的mcDNN后端正向归一化操作,指定一个用于正向归一化的节点,该节点将用于输入张量X,并生成归一化输出张量Y,其归一化模式通过MCDNN_ATTR_OPERATION_NORM_FWD_MODE属性设置。该操作支持可选的运行统计计算,并允许存储计算的均值和方差,以便根据MCDNN_ATTR_OPERATION_NORM_FWD_PHASE属性的设置在反向计算中重用。

备注

在mcDNN中,对该操作的支持仅限于实验性多GPU批量归一化后端模式,并具有一组功能限制。在将来的版本中,将扩展以支持不同的模式。

属性

MCDNN_ATTR_OPERATION_NORM_FWD_MODE

为正向归一化操作选择归一化模式。

  • MCDNN_TYPE_NORM_MODE;一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_PHASE

为正向归一化操作选择训练或推理阶段。

  • MCDNN_TYPE_NORM_FWD_PHASE;一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_XDESC

输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_MEAN_DESC

推理阶段的预估均值输入张量描述符和训练阶段的计算均值输出张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_INV_VARIANCE_DESC

推理阶段的预估逆方差输入张量描述符和训练阶段的计算逆方差输出张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_SCALE_DESC

归一化scale输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_BIAS_DESC

归一化bias输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_EPSILON_DESC

归一化计算中使用的epsilon值的标量输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_EXP_AVG_FACTOR_DESC

运行统计计算时使用的指数平均系数值的标量输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_INPUT_RUNNING_MEAN_DESC

训练阶段中运行统计计算的输入运行均值张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_INPUT_RUNNING_VAR_DESC

训练阶段中运行统计计算的输入运行方差张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_OUTPUT_RUNNING_MEAN_DESC

训练阶段中运行统计计算的输出运行均值张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_OUTPUT_RUNNING_VAR_DESC

训练阶段中运行统计计算的输出运行方差张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_NORM_FWD_YDESC

归一化操作输出的张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_NORM_FWD_PEER_STAT_DESCS

多GPU归一化中使用的通信缓冲区的张量描述符向量。通常,为节点中的每个GPU提供一个缓冲区。这是一个可选属性,仅用于多GPU张量统计数据归约。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个或多个元素。

  • 可选属性。

终结

在终结阶段,对属性进行检查,以确保没有冲突。

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 输出张量维度与输入张量维度不匹配。

  • 均值,scale,bias和inv_variance张量的通道计数C不匹配。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.19. MCDNN_BACKEND_OPERATION_POINTWISE_DESCRIPTOR

表示根据操作类型实现公式 \(Y\ = \ {op}\ \left( {{alpha1}\ *\ X} \right)\)\(\ Y\ = \ {op}\ \left( {{alpha1}\ *\ X,\ {alpha2}\ *\ B} \right)\) 的逐点操作。 上述op()表示的实际操作类型取决于描述符中的MCDNN_ATTR_OPERATION_POINTWISE_PW_DESCRIPTOR属性。 此操作描述符支持单输入单输出操作。

有关支持的操作列表,请参见mcdnnPointwiseMode_t。

对于双输入逐点操作,当其中一个张量的维度为1而其他张量的相应维度不为1时,执行广播。

对于三输入单输出逐点操作,不支持在任何张量中广播。

此不透明结构可以使用mcdnnBackendCreateDescriptor()

(MCDNN_BACKEND_OPERATION_POINTWISE_DESCRIPTOR)来创建。

属性

MCDNN_ATTR_OPERATION_POINTWISE_PW_DESCRIPTOR

设置描述符,该描述符包含逐点操作的数学设置。必要属性。

MCDNN_ATTR_OPERATION_POINTWISE_XDESC

设置输入张量x的描述符。逐点数学函数或激活正向传播计算需要此属性。

MCDNN_ATTR_OPERATION_POINTWISE_BDESC

如果操作需要2个输入,例如加或乘,此属性将设置第二个输入张量β。如果操作只需要1个输入,则此字段不应设置和使用。

MCDNN_ATTR_OPERATION_POINTWISE_YDESC

设置输出张量T的描述符。逐点数学函数或激活正向传播计算需要此属性。

MCDNN_ATTR_OPERATION_POINTWISE_TDESC

设置张量T的描述符。MCDNN_ATTR_POINTWISE_MODE设置为MCDNN_POINTWISE_BINARY_SELECT时需要此属性,并作为完成选择所基于的掩码。

MCDNN_ATTR_OPERATION_POINTWISE_ALPHA1

设置公式中的标量alpha1值。可以是float或half。此属性是可选的,如果未设置,则默认值为1.0。

MCDNN_ATTR_OPERATION_POINTWISE_ALPHA2

如果操作需要2个输入,例如加或乘,此属性将设置公式中的标量alpha2值。可以是float或half。此属性是可选的,如果未设置,则默认值为1.0。如果操作只需要1个输入,则此字段不应设置和使用。

MCDNN_ATTR_OPERATION_POINTWISE_DXDESC

设置输出张量dX的描述符。逐点激活反向传播计算需要此属性。

MCDNN_ATTR_OPERATION_POINTWISE_DYDESC

设置输入张量dY的描述符。逐点激活反向传播计算需要此属性。

终结

在终结阶段,对属性进行交叉检查,以确保没有冲突。可能会返回以下状态:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 输入和输出张量之间的维数不匹配。

  • 输入/输出张量维度与上述描述的自动广播规则不一致。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.20. MCDNN_BACKEND_OPERATION_REDUCTION_DESCRIPTOR

mcDNN后端归约操作描述符表示一个操作节点,该操作节点在一个或多个维度中实现输入张量X的归约值,以获取输出张量Y。用于归约张量值的数学运算和计算数据类型通过MCDNN_ATTR_OPERATION_REDUCTION_DESC指定。

可以使用以下内容创建此操作描述符

mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_REDUCTION_DESCRIPTOR, &desc);

输出张量Y的大小应与输入张量X的大小相同,但大小为1的维度除外。

属性

mcDNN后端归约描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATION_REDUCTION_):

MCDNN_ATTR_OPERATION_REDUCTION_XDESC

矩阵X描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_REDUCTION_YDESC

矩阵Y描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_REDUCTION_DESC

归约操作描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_REDUCTION_DESCRIPTOR的一个元素。

  • 必要属性

终结

在归约操作的终结过程中,将检查张量X和Y的维度,以确保满足归约操作的要求。

带有MCDNN_BACKEND_OPERATION_REDUCTION_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 张量X和Y的维度不满足归约操作的要求。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.21. MCDNN_BACKEND_OPERATION_RESAMPLE_BWD_DESCRI PTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_RESAMPLE_BWD_ DESCRIPTOR, &desc)创建的mcDNN后端重采样反向操作描述符,指定一个操作节点,用于反向重采样。 根据MCDNN_ATTR_RESAMPLE_MODE进行反向重采样,从输出张量梯度dy计算输入张量梯度dx,输出缩放比例为α,残差相加缩放比例为β。

属性

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_DESC

包含操作元数据的重采样操作描述符(MCDNN_BACKEND_RESAMPLE_DESCRIPTOR)实例。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_RESAMPLE_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_DXDESC

输入张量梯度描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_DYDESC

输出张量梯度描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_IDXDESC

张量,包含要在backprop中使用的maxpool或最近邻重采样索引。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_ALPHA

设置混合中使用的alpha参数。

  • MCDNN_TYPE_DOUBLE or MCDNN_TYPE_FLOAT; one element.

  • 可选属性。

  • 默认值为1.0。

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_BETA

设置混合中使用的beta参数。

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 可选属性。

  • 默认值为0.0。

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_XDESC

输入张量X描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

  • NCHW布局所需。

MCDNN_ATTR_OPERATION_RESAMPLE_BWD_YDESC

输入张量Y描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

  • NCHW布局所需。

终结

在终结阶段,对属性进行交叉检查,以确保没有冲突。可能会返回以下状态:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 基于填充和步幅计算的输出形状与给定的输出张量维度不匹配。

  • YDESC和IDXDESC(如果提供)的形状不匹配。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.22. MCDNN_BACKEND_OPERATION_RESAMPLE_FWD_DESCRI PTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_RESAMPLE_FWD_ DESCRIPTOR, &desc)创建的mcDNN后端重采样正向操作描述符,指定一个操作节点,用于正向重采样。根据MCDNN_ATTR_RESAMPLE_MODE进行重采样,计算图像张量x的输出张量y,输出缩放比例为α,残差相加缩放比例为β。

属性

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_DESC

包含操作元数据的重采样操作描述符(MCDNN_BACKEND_RESAMPLE_DESCRIPTOR)实例。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_RESAMPLE_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_XDESC

输入张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_YDESC

输出张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_IDXDESC

张量,包含要在backprop中使用的maxpool或最近邻重采样索引。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性(主要用于涉及训练的用例)。

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_ALPHA

设置混合中使用的alpha参数。

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 可选属性。

  • 默认值为1.0。

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_BETA

设置混合中使用的beta参数。

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 可选属性。

  • 默认值为0.0。

终结

在终结阶段,对属性进行交叉检查,以确保没有冲突。可能会返回以下状态:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。可能的原因包括:

  • 基于填充和步幅计算的输出形状与给定的输出张量维度不匹配。

  • YDESC和IDXDESC(如果提供)的形状不匹配。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.23. MCDNN_BACKEND_OPERATION_RNG_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_RNG_DESCRIPTOR, &desc创建的mcDNN后端Rng操作描述符,指定一个操作节点,用于根据Rng描述符中指定的概率分布使用随机数生成张量。

随机数是使用Philox随机数生成器(RNG)生成的,如Pytorch中所述。Philox对象携带一个种子值,一个用于开始生成的子序列,以及子序列的偏移。可以使用属性设置种子和偏移。子序列在内部设置,以确保独立的随机数。

属性

MCDNN_ATTR_OPERATION_RNG_DESC

包含操作元数据的Rng描述符(MCDNN_BACKEND_RNG_DESCRIPTOR)实例。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_RNG_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RNG_YDESC

输出张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_RNG_SEED

为创建Y张量的随机数生成器设置种子。它可以是一个主机INT64值,或是一个绑定到设备的一个值上的后端描述符。仅支持所有维度和步幅都设置为1的张量。

  • MCDNN_TYPE_INT64;MCDNN_TYPE_BACKEND_DESCRIPTOR的一个元素;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

  • 默认值为0。

MCDNN_ATTR_OPERATION_RNG_OFFSET_DESC

RNG Philox对象中使用的偏移的张量描述符。仅支持所有维度和步幅都设置为1的张量。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

终结

在终结阶段,对属性进行交叉检查,以确保没有冲突。可能会返回以下状态:

MCDNN_STATUS_BAD_PARAM

没有将MCDNN_ATTR_OPERATION_RNG_OFFSET_DESC或MCDNN_ATTR_OPERATION_RNG_SEED的所有维度和步幅设置为1。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.24. MCDNN_BACKEND_OPERATION_SIGNAL_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_OPERATION_SIGNAL_DESCRIPTOR, &desc)创建的mcDNN后端信号操作描述符,指定一个操作节点,用于更新或等待一个标记变量。信令操作可用于mcDNN操作图之间的通信,即使是另一个GPU中的操作图。

此操作要连接到图形中的其他节点,还有一个透传输入张量,不在此张量上执行操作,仅将其传递到输出张量。 这种强制的透传输入张量有助于确定应在哪个前驱节点之后执行信号操作。可选的输出张量有助于确定应在哪个后继节点之前完成信号操作执行。 对于作为输出张量的非虚拟张量,也保证在操作更新信号值之前,张量的所有写入都已发生。

属性

MCDNN_ATTR_OPERATION_SIGNAL_MODE

要使用的信令模式。

  • MCDNN_TYPE_SIGNAL_MODE;

  • 必要属性

MCDNN_ATTR_OPERATION_SIGNAL_FLAGDESC

标记张量描述符。

MCDNN_ATTR_OPERATION_RESAMPLE_FWD_YDESC

输出张量描述符。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_SIGNAL_VALUE

用于比较或更新flag变量的标量值。

  • MCDNN_TYPE_INT64

  • 必要属性

MCDNN_ATTR_OPERATION_SIGNAL_XDESC

一个透传输入张量,用于将此信号操作连接到图形中的其他节点。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 必要属性

MCDNN_ATTR_OPERATION_SIGNAL_YDESC

透传输入张量的输出张量。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_TENSOR_DESCRIPTOR的一个元素。

  • 可选属性。

终结

在终结阶段,对属性进行交叉检查,以确保没有冲突。可能会返回以下状态:

MCDNN_STATUS_BAD_PARAM

遇到无效或不一致的属性值。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.25. MCDNN_BACKEND_OPERATIONGRAPH_DESCRIPTOR

使用描述符类型MCDNN_BACKEND_OPERATIONGRAPH_DESCRIPTOR创建的mcDNN后端操作图描述符,描述一个操作图,即通过虚拟张量连接的一个或多个操作的小型网络。操作图定义用户想要计算的用例或数学表达式。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_OPERATIONGRAPH_):

MCDNN_ATTR_OPERATIONGRAPH_HANDLE

mcDNN句柄。

  • MCDNN_TYPE_HANDLE;一个元素。

  • 必要属性

MCDNN_ATTR_OPERATIONGRAPH_OPS

形成操作图的操作节点。

  • MCDNN_TYPE_BACKEND_DESCRIPTOR;描述符类型MCDNN_BACKEND_OPERATION_*_DESCRIPTOR()的一个或多个元素。

  • 必要属性

MCDNN_ATTR_OPERATIONGRAPH_ENGINE_GLOBAL_COUNT

支持操作图的引擎数。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性。

MCDNN_ATTR_OPERATIONGRAPH_ENGINE_SUPPORTED_COUNT

支持操作图的引擎数。

  • MCDNN_TYPE_INT64;一个元素。

  • 只读属性;仅为占位符:当前不支持。

终结

MCDNN_STATUS_BAD_PARAM

遇到无效的属性值。例如:

  • MCDNN_ATTR_OPERATIONGRAPH_OPS中的一个后端描述符尚未终结。

  • MCDNN_ATTR_OPERATIONGRAPH_HANDLE值不是一个有效的mcDNN句柄。

MCDNN_STATUS_NOT_SUPPORTED

遇到不支持的属性值。例如:

  • 不支持属性MCDNN_ATTR_OPERATIONGRAPH_OPS的操作组合。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.26. MCDNN_BACKEND_POINTWISE_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_POINTWISE_DESCRIPTOR, &desc)创建的mcDNN后端逐点描述符,指定逐点运算符的参数,例如模式,数学精度,NaN传播等。

属性

mcDNN后端卷积描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_POINTWISE_):

MCDNN_ATTR_POINTWISE_MODE

逐点操作的模式。

  • MCDNN_TYPE_POINTWISE_MODE;一个元素。

  • 必要属性

MCDNN_ATTR_POINTWISE_MATH_PREC

计算的数学精度。

  • MCDNN_TYPE_DATA_TYPE;一个元素。

  • 必要属性

MCDNN_ATTR_POINTWISE_NAN_PROPAGATION

指定NaN传播的方式。

  • MCDNN_TYPE_NAN_PROPOGATION;一个元素。

  • 仅基于比较的逐点模式(如ReLU)需要。

  • 当前仅支持枚举值MCDNN_PROPAGATE_NAN。

  • 默认值: MCDNN_NOT_PROPAGATE_NAN.

MCDNN_ATTR_POINTWISE_RELU_LOWER_CLIP

设置ReLU的下限裁剪值。(value < lower_clip) value = lower_clip + lower_clip_slope * (value - lower_clip);

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 默认值: 0.0f.

MCDNN_ATTR_POINTWISE_RELU_UPPER_CLIP

设置Relu的上限裁剪值。(value > upper_clip) value = upper_clip;

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 默认值:最大数值限制。

MCDNN_ATTR_POINTWISE_RELU_LOWER_CLIP_SLOPE

设置ReLU的下限裁剪斜率值。(value < lower_clip) value = lower_clip + lower_clip_slope * (value - lower_clip);

  • MCDNN_TYPE_DOUBLE / MCDNN_TYPE_FLOAT; one element.

  • 默认值: 0.0f.

MCDNN_ATTR_POINTWISE_ELU_ALPHA

设置ELU的alpha值。(value < 0.0) value = alpha * (e^value - 1.0);

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 默认值: 1.0f.

MCDNN_ATTR_POINTWISE_SOFTPLUS_BETA

设置softplus的beta值。value = log (1 + e^(beta * value)) / beta

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 默认值: 1.0f

MCDNN_ATTR_POINTWISE_SWISH_BETA

设置swish的beta值。value = value / (1 + e^(-beta * value))

  • MCDNN_TYPE_DOUBLE或MCDNN_TYPE_FLOAT;一个元素。

  • 默认值: 1.0f.

MCDNN_ATTR_POINTWISE_AXIS

设置GEN_INDEX的轴值。将为此轴生成索引。

  • MCDNN_TYPE_INT64;一个元素。

  • 默认值: -1.

  • 需要介于[0,input_dim_size-1]之间。例如,如果输入维度为[N,C,H,W],则轴可以设置为[0,3]中的任意值。

终结

带有MCDNN_BACKEND_POINTWISE_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.27. MCDNN_BACKEND_REDUCTION_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_REDUCTION_DESCRIPTOR, &desc)创建的mcDNN后端归约描述符,指定归约操作所需的任意元数据,包括数学运算和计算数据类型。

属性

MCDNN_ATTR_REDUCTION_OPERATOR

用于归约操作的数学运算。

  • MCDNN_TYPE_REDUCTION_OPERATOR_TYPE;一个元素。

  • 必要属性

MCDNN_ATTR_REDUCTION_COMP_TYPE

用于归约操作的计算精度。

  • MCDNN_TYPE_DATA_TYPE;一个元素。

  • 必要属性

终结

返回mcdnnBackendFinalize(desc)的值,其中desc是MCDNN_BACKEND_REDUCTION_DESCRIPTOR:

MCDNN_STATUS_NOT_SUPPORTED

遇到不支持的属性值。可能的原因包括:

  • MCDNN_ATTR_REDUCTION_OPERATOR不可以设置为

MCDNN_REDUCE_TENSOR_ADD, MCDNN_REDUCE_TENSOR_MUL, MCDNN_REDUCE_TENSOR_MIN,MCDNN_REDUCE_TENSOR_MAX

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.28. MCDNN_BACKEND_RESAMPLE_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_RESAMPLE_DESCRIPTOR, &desc)创建的mcDNN后端重采样描述符,指定正向和反向传播中重采样操作(上采样或下采样)的参数。

属性

MCDNN_ATTR_RESAMPLE_MODE

指定重采样模式,例如,平均池,最近邻等。

  • MCDNN_TYPE_RESAMPLE_MODE;一个元素。

  • 默认值为MCDNN_RESAMPLE_NEAREST。

MCDNN_ATTR_RESAMPLE_COMP_TYPE

重采样运算符的计算数据类型。

  • MCDNN_TYPE_DATA_TYPE;一个元素。

  • 默认值为MCDNN_DATA_FLOAT。

MCDNN_ATTR_RESAMPLE_NAN_PROPAGATION

指定NaN传播的方式。

  • MCDNN_TYPE_NAN_PROPAGATION;一个元素。

  • 默认值为MCDNN_NOT_PROPAGATE_NAN。

MCDNN_ATTR_RESAMPLE_SPATIAL_DIMS

指定要执行重采样的空间维数。

  • MCDNN_TYPE_INT64;一个元素。

  • 必要属性

MCDNN_ATTR_RESAMPLE_PADDING_MODE

指定用于填充的值。

  • MCDNN_TYPE_PADDING_MODE;一个元素。

  • 默认值为MCDNN_ZERO_PAD。

MCDNN_ATTR_RESAMPLE_STRIDES

内核/卷积核的每个维度的步幅。

  • MCDNN_TYPE_INT64或MCDNN_TYPE_FRACTION;至多为MCDNN_MAX_DIMS - 2.

  • 必要属性

MCDNN_ATTR_RESAMPLE_PRE_PADDINGS

添加到每个维度中输入张量起始处的填充。

  • MCDNN_TYPE_INT64或MCDNN_TYPE_FRACTION;至多为MCDNN_MAX_DIMS - 2.

  • 必要属性

MCDNN_ATTR_RESAMPLE_POST_PADDINGS

添加到每个维度中输入张量结尾处的填充。

  • MCDNN_TYPE_INT64或MCDNN_TYPE_FRACTION;至多为MCDNN_MAX_DIMS - 2.

  • 必要属性

MCDNN_ATTR_RESAMPLE_WINDOW_DIMS

卷积核的空间维度。

  • MCDNN_TYPE_INT64或MCDNN_TYPE_FRACTION;至多为MCDNN_MAX_DIMS - 2.

  • 必要属性

终结

使用MCDNN_BACKEND_RESAMPLE_DESCRIPTOR调用mcdnnBackendFinalize()时,返回值为:

MCDNN_STATUS_NOT_SUPPORTED

遇到不支持的属性值。可能的原因包括:

  • 用于设置MCDNN_ATTR_RESAMPLE_WINDOW_DIMS、MCDNN_ATTR_RESAMPLE_STRIDES、MCDNN_ATTR_RESAMPLE_PRE_PADDINGS和MCDNN_ATTR_RESAMPLE_POST_PADDINGS的elementCount参数,与MCDNN_ATTR_RESAMPLE_SPATIAL_DIMS的设置值不相等。

  • MCDNN_ATTR_RESAMPLE_MODE设置为MCDNN_RESAMPLE_BILINEAR,且没有MCDNN_ATTR_RESAMPLE_WINDOW_DIMS设置为2。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.29. MCDNN_BACKEND_RNG_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_RNG_DESCRIPTOR, &desc)创建的mcDNN后端Rng描述符,指定任意元数据,包括将用于生成张量的概率分布以及分布的相应参数。

属性

MCDNN_ATTR_RNG_DISTRIBUTION

用于RNG操作的概率分布。

  • MCDNN_TYPE_RNG_DISTRIBUTION;一个元素。

  • 默认值为MCDNN_RNG_DISTRIBUTION_BERNOULLI。

MCDNN_ATTR_RNG_NORMAL_DIST_MEAN

正态分布的均值,在MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_NORMAL时使用。

  • MCDNN_TYPE_DOUBLE;一个元素。

  • 默认值为-1。

MCDNN_ATTR_RNG_NORMAL_DIST_STANDARD_DEVIATION

正态分布的标准偏差值,在MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_NORMAL时使用。

  • MCDNN_TYPE_DOUBLE;一个元素。

  • 默认值为-1。

MCDNN_ATTR_RNG_UNIFORM_DIST_MAXIMUM

在均匀分布中使用的范围最大值,在MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_UNIFORM时使用。

  • MCDNN_TYPE_DOUBLE;一个元素。

  • 默认值为-1。

MCDNN_ATTR_RNG_UNIFORM_DIST_MINIMUM

在均匀分布中使用的范围最小值,在MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_UNIFORM时使用。

  • MCDNN_TYPE_DOUBLE;一个元素。

  • 默认值为-1。

MCDNN_ATTR_RNG_BERNOULLI_DIST_PROBABILITY

在张量中生成1的概率,在MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_BERNOULLI时使用。

  • MCDNN_TYPE_DOUBLE;一个元素。

  • 默认值为-1。

终结

返回mcdnnBackendFinalize(desc)的值,其中desc是MCDNN_BACKEND_RNG_DESCRIPTOR:

MCDNN_STATUS_BAD_PARAM

遇到无效的属性值。例如:

  • 如果MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_NORMAL且提供的标准偏差为负值。

  • 如果MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_UNIFORM且该范围的最大值小于最小值。

  • 如果MCDNN_ATTR_RNG_DISTRIBUTION = MCDNN_RNG_DISTRIBUTION_BERNOULLI且提供的概率为负值。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.30. MCDNN_BACKEND_TENSOR_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_TENSOR_DESCRIPTOR, &desc)创建的mcDNN后端张量,允许用户指定通用张量的内存存储。张量由唯一标识符标识,并通过其数据类型,数据字节对齐要求以及其维度的范围和步幅来描述。或者,张量元素可以是其任一维度中的向量。当张量是计算图中的中间变量且未映射到物理全局内存存储时,也可以将其设置为虚拟张量。

属性

mcDNN后端张量描述符的属性是mcdnnBackendAttributeName_t枚举类型的值(前缀为MCDNN_ATTR_TENSOR_):

MCDNN_ATTR_TENSOR_UNIQUE_ID

用于标识张量的唯一整数。

  • MCDNN_TYPE_INT64;一个元素。

  • 必要属性

MCDNN_ATTR_TENSOR_DATA_TYPE

张量的数据类型。

  • MCDNN_TYPE_DATA_TYPE;一个元素。

  • 必要属性

MCDNN_ATTR_TENSOR_BYTE_ALIGNMENT

此张量的指针字节对齐。

  • MCDNN_TYPE_INT64;一个元素。

  • 必要属性

MCDNN_ATTR_TENSOR_DIMENSIONS

张量维度。

  • MCDNN_TYPE_INT64;至多有MCDNN_MAX_DIMS个元素。

  • 必要属性

MCDNN_ATTR_TENSOR_STRIDES

张量步幅。

  • MCDNN_TYPE_INT64;至多有MCDNN_MAX_DIMS个元素。

  • 必要属性

MCDNN_ATTR_TENSOR_VECTOR_COUNT

向量化大小。

  • MCDNN_TYPE_INT64;一个元素。

  • 默认值: 1

MCDNN_ATTR_TENSOR_VECTORIZED_DIMENSION

向量化维度的索引。

  • MCDNN_TYPE_INT64;一个元素。

  • 如果MCDNN_ATTR_TENSOR_VECTOR_COUNT不是默认值,则需要在终结前设置该属性;否则忽略。

MCDNN_ATTR_TENSOR_IS_VIRTUAL

表示张量是否为虚拟张量。虚拟张量是操作图中的中间张量,以瞬态形式存在,不能从全局设备内存中读取或写入。

  • MCDNN_TYPE_BOOL;一个元素。

  • 默认值:false

终结

带有MCDNN_BACKEND_CONVOLUTION_DESCRIPTOR的mcdnnBackendFinalize()可以具有以下返回值:

MCDNN_STATUS_BAD_PARAM

遇到无效的属性值。例如:

  • 任意张量维度或步幅都不是正值。

  • 张量对齐属性的值不能被数据类型的大小整除。

MCDNN_STATUS_NOT_SUPPORTED

遇到不支持的属性值。例如:

  • 数据类型属性是MCDNN_DATA_INT8x4,MCDNN_DATA_UINT8x4或MCDNN_DATA_INT8x32。

  • 数据类型属性为MCDNN_DATA_INT8,且MCDNN_ATTR_TENSOR_VECTOR_COUNT值不是1,4或32。

MCDNN_STATUS_SUCCESS

描述符已成功终结。

8.2.2.31. MCDNN_BACKEND_VARIANT_PACK_DESCRIPTOR

使用mcdnnBackendCreateDescriptor(MCDNN_BACKEND_VARIANT_PACK_DESCRIPTOR, &desc)创建的mcDNN后端variant pack计划,允许用户设置指向设备缓冲区的指针,该缓冲区保存操作图,工作空间和计算中间结果的各种非虚拟张量(由唯一标识符标识)。

属性

MCDNN_ATTR_VARIANT_PACK_UNIQUE_IDS

每个数据指针张量的唯一标识符。

  • MCDNN_TYPE_INT64;零个或多个元素。

  • 必要属性

MCDNN_ATTR_VARIANT_PACK_DATA_POINTERS

张量数据设备指针。

  • MCDNN_TYPE_VOID_PTR;零个或多个元素。

  • 必要属性

MCDNN_ATTR_VARIANT_PACK_INTERMEDIATES

中间设备指针。

  • MCDNN_TYPE_VOID_PTR;零个或多个元素。

  • 不支持设置的属性。用于将来实现的占位符。

MCDNN_ATTR_VARIANT_PACK_WORKSPACE

设备指针的工作空间。

  • MCDNN_TYPE_VOID_PTR;一个元素。

  • 必要属性

终结

使用mcDNN后端variant pack描述符调用mcdnnBackendFinalize()时,返回值为:

MCDNN_STATUS_SUCCESS

描述符已成功完成。