class dnnl::graph::logical_tensor

Overview

Logical tensor object. More…

#include <dnnl_graph.hpp>

class logical_tensor
{
public:
    // typedefs

    typedef dnnl_dim_t dim;
    typedef std::vector<dim> dims;

    // enums

    enum data_type;
    enum layout_type;
    enum property_type;

    // construction

    logical_tensor();
    logical_tensor(const dnnl_graph_logical_tensor_t& c_data);
    logical_tensor(const logical_tensor& other);

    logical_tensor(
        size_t tid,
        data_type dtype,
        int32_t ndims,
        layout_type ltype,
        property_type ptype = property_type::undef
        );

    logical_tensor(
        size_t tid,
        data_type dtype,
        layout_type ltype = layout_type::undef
        );

    logical_tensor(
        size_t tid,
        data_type dtype,
        const dims& adims,
        layout_type ltype,
        property_type ptype = property_type::undef
        );

    logical_tensor(
        size_t tid,
        data_type dtype,
        const dims& adims,
        const dims& strides,
        property_type ptype = property_type::undef
        );

    logical_tensor(
        size_t tid,
        data_type dtype,
        const dims& adims,
        size_t lid,
        property_type ptype = property_type::undef
        );

    // methods

    logical_tensor& operator = (const logical_tensor& other);
    dims get_dims() const;
    size_t get_id() const;
    data_type get_data_type() const;
    property_type get_property_type() const;
    layout_type get_layout_type() const;
    size_t get_layout_id() const;
    dims get_strides() const;
    size_t get_mem_size() const;
    bool is_equal(const logical_tensor& lt) const;
};

Detailed Documentation

Logical tensor object.

Typedefs

typedef dnnl_dim_t dim

Integer type for representing dimension sizes and indices.

typedef std::vector<dim> dims

Vector of dimensions.

Implementations are free to force a limit on the vector’s length.

Construction

logical_tensor()

default constructor construct an empty object

logical_tensor(const dnnl_graph_logical_tensor_t& c_data)

Constructs a logical tensor object.

logical_tensor(const logical_tensor& other)

Copy.

logical_tensor(
    size_t tid,
    data_type dtype,
    int32_t ndims,
    layout_type ltype,
    property_type ptype = property_type::undef
    )

Constructs a logical tensor object with ID, data type, ndims, layout type, and property type.

Parameters:

tid

Logical tensor ID.

dtype

Elements data type.

ndims

Number of dimensions. -1 means unknown (see DNNL_GRAPH_UNKNOWN_NDIMS) and 0 means a scalar tensor.

ltype

Layout type.

ptype

Property type.

logical_tensor(
    size_t tid,
    data_type dtype,
    layout_type ltype = layout_type::undef
    )

Delegated constructor.

Parameters:

tid

Logical tensor ID.

dtype

Elements data type.

ltype

Layout type.

logical_tensor(
    size_t tid,
    data_type dtype,
    const dims& adims,
    layout_type ltype,
    property_type ptype = property_type::undef
    )

Constructs a logical tensor object with basic information and detailed dims.

Parameters:

tid

Logical tensor ID.

dtype

Elements data type.

adims

Logical tensor dimensions. DNNL_GRAPH_UNKNOWN_DIM means the size of that dimension is unknown. 0 is used to define zero-dimension tensor.

ltype

Layout type. If it’s strided, the strides field in the output logical tensor will be deduced accordingly.

ptype

Property type.

logical_tensor(
    size_t tid,
    data_type dtype,
    const dims& adims,
    const dims& strides,
    property_type ptype = property_type::undef
    )

Constructs a logical tensor object with detailed dims and strides.

The layout_type of the output logical tensor object will always be strided.

Parameters:

tid

Logical tensor ID.

dtype

Elements data type.

adims

Logical tensor dimensions. DNNL_GRAPH_UNKNOWN_DIM means the size of that dimension is unknown. 0 is used to define zero-dimension tensor.

strides

Logical tensor strides. DNNL_GRAPH_UNKNOWN_DIM means the stride of the dimension is unknown. The library currently doesn’t support other negative stride values.

ptype

Property type.

logical_tensor(
    size_t tid,
    data_type dtype,
    const dims& adims,
    size_t lid,
    property_type ptype = property_type::undef
    )

Constructs a logical tensor object with detailed dims and an opaque layout ID.

layout_type of the output logical tensor object will always be opaque.

Parameters:

tid

Logical tensor ID.

dtype

Elements data type.

adims

Logical tensor dimensions. DNNL_GRAPH_UNKNOWN_DIM means the size of that dimension is unknown. 0 is used to define zero-dimension tensor.

lid

Opaque layout id.

ptype

Property type

Methods

logical_tensor& operator = (const logical_tensor& other)

Assign.

dims get_dims() const

Returns dimensions of a logical tensor.

Returns:

A vector describing the size of each dimension.

size_t get_id() const

Returns the unique id of a logical tensor.

Returns:

An integer value describing the ID.

data_type get_data_type() const

Returns the data type of a logical tensor.

Returns:

The data type.

property_type get_property_type() const

Returns the property type of a logical tensor.

Returns:

The property type.

layout_type get_layout_type() const

Returns the layout type of a logical tensor.

Returns:

The layout type.

size_t get_layout_id() const

Returns the layout ID of a logical tensor.

The API should be called on a logical tensor with opaque layout type. Otherwise, an exception will be raised.

Returns:

Layout ID.

dims get_strides() const

Returns the strides of a logical tensor.

The API should be called on a logical tensor with strided layout type. Otherwise, an exception will be raised.

Returns:

A vector describing the stride size of each dimension.

size_t get_mem_size() const

Returns memory size in bytes required by this logical tensor.

Returns:

The memory size in bytes.

bool is_equal(const logical_tensor& lt) const

Compares if two logical tenors are equal.

Users can decide accordingly if layout reordering is needed for two logical tensors. The method will return true for below two circumstances:

  1. the two logical tensors are equal regarding each field in the struct, eg. id, ndims, dims, layout type, property, etc.

  2. If all other fields are equal but the layout types in two logical tensors are different, the method will return true when the underlying memory layout is the same. For example, one logical tensor has strided layout type while the other one has opaque layout type, but underneath, both layouts are NHWC, the method will still return true for this case.

Parameters:

lt

The input logical tensor to be compared.

Returns:

true if the two logical tensors are equal. false otherwise