Modules | Functions
Collaboration diagram for Attributes:


 Sequence of post operations


mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_create (mkldnn_primitive_attr_t *attr)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_clone (mkldnn_primitive_attr_t *attr, const_mkldnn_primitive_attr_t existing_attr)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_destroy (mkldnn_primitive_attr_t attr)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_get_int_output_round_mode (const_mkldnn_primitive_attr_t attr, mkldnn_round_mode_t *round_mode)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_set_int_output_round_mode (mkldnn_primitive_attr_t attr, mkldnn_round_mode_t round_mode)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_get_output_scales (const_mkldnn_primitive_attr_t attr, int *count, int *mask, const float **scales)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_set_output_scales (mkldnn_primitive_attr_t attr, int count, int mask, const float *scales)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_get_post_ops (const_mkldnn_primitive_attr_t attr, const_mkldnn_post_ops_t *post_ops)
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_set_post_ops (mkldnn_primitive_attr_t attr, const_mkldnn_post_ops_t post_ops)

Detailed Description

An extension for controlling primitive behavior.

Function Documentation

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_clone ( mkldnn_primitive_attr_t attr,
const_mkldnn_primitive_attr_t  existing_attr 

Makes a copy of an existing_attr.

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_create ( mkldnn_primitive_attr_t attr)

Creates an empty (default) attr attribute. All the parameters are set to default values.

An empty attribute is used in primitive descriptor creation whenever it is not passed explicitly, e.g. in mkldnn_primitive_desc_create.

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_destroy ( mkldnn_primitive_attr_t  attr)

Deletes an attr.

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_get_int_output_round_mode ( const_mkldnn_primitive_attr_t  attr,
mkldnn_round_mode_t round_mode 

Returns integer output rounding mode round_mode for a given attr, previously set by mkldnn_primitive_attr_set_int_output_round_mode.

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_get_output_scales ( const_mkldnn_primitive_attr_t  attr,
int *  count,
int *  mask,
const float **  scales 

Returns count, correspondence scale mask, and a pointer to a constant floating point array of output scales for given attr, previously set by mkldnn_primitive_attr_set_output_scales.

The scales array points to the internal attr field, so the user should not modify or destroy scales.
The lifetime of scales is the same as that of the attr to which it belongs, so it is illegal to use scales after attr is destroyed.
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_get_post_ops ( const_mkldnn_primitive_attr_t  attr,
const_mkldnn_post_ops_t post_ops 

Returns post_ops for given attr.

post_ops points to the internal attr field, so the user should not modify or destroy post_ops. Also, the lifetime of post_ops is the same as that of the attr it belongs to, so it is illegal to use post_ops after attr has been destroyed.
mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_set_int_output_round_mode ( mkldnn_primitive_attr_t  attr,
mkldnn_round_mode_t  round_mode 

Sets output rounding mode round_mode for integer operations for a given attr.

The default value is mkldnn_round_nearest.

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_set_output_scales ( mkldnn_primitive_attr_t  attr,
int  count,
int  mask,
const float *  scales 

Sets output scales for primitive operations. The number of elements count and correspondence scale mask are stored for future use.

The mask argument defines the correspondence between the output tensor dimensions and the scales array. Set the i-th bit of mask to 1 to use a dedicated scaling factor for each slice of the output tensor over the i-th dimension. Set mask to 0 to use a common scaling factor for the whole output tensor.

The dimension order is always native and does not depend on the actual layout used. Examples:
  • 2D dimensional data the order of dimensions is always: (n, c)
  • 4D dimensional data the order is always: (n, c, h, w)
  • 5D dimensional weights the order is always: (g, oc, ic, kh, kw)

Example usage:

1 int mb = 32, oc = 32, oh = 14, ow = 14; // convolution output params
2 float scales[oc] = { ... }; // unique output scales per output channel
3 int oc_dim = 1; // mb_dim = 0, channel_dim = 1, height_dim = 2, ...
5 mkldnn_convolution_desc_t cd; // create & configure convolution op_desc
7 mkldnn_primitive_attr_t attr;
8 mkldnn_primitive_attr_create(&attr); // create default attributes
9 mkldnn_primitive_attr_set_output_scales(attr, oc, 1 << oc_dim, scales);
11 mkldnn_primitive_desc_t cpd;
12 mkldnn_primitive_desc_create_v2(&cpd, &cd, attr, NULL);
There is no way to check that count corresponds to mask until an actual primitive descriptor is created, so it is the user's responsibility to set proper values. The following formula must hold:

\[count = \prod\limits_{d \in mask} output.dims[d]\]

mkldnn_status_t MKLDNN_API mkldnn_primitive_attr_set_post_ops ( mkldnn_primitive_attr_t  attr,
const_mkldnn_post_ops_t  post_ops 

Sets configured post_ops to an attribute attr for future use (when primitive descriptor is being created).

At this point in time, there is no way to check whether the primitive descriptor does or does not support a given sequence of post operations. Therefore the user should handle an error that might occur at the mkldnn_primitive_desc_create call.