| /******************************************************************************* | |
| * Copyright 2020-2024 Intel Corporation | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| *******************************************************************************/ | |
| /// @file | |
| /// Graph C API | |
| extern "C" { | |
| /// @addtogroup dnnl_api | |
| /// @{ | |
| /// @addtogroup dnnl_graph_api | |
| /// @{ | |
| /// @addtogroup dnnl_graph_api_allocator | |
| /// @{ | |
| /// Creates a host allocator with the given allocation and deallocation | |
| /// call-back function pointers. | |
| /// | |
| /// @param allocator Output allocator. | |
| /// @param host_malloc A pointer to malloc function for host. | |
| /// @param host_free A pointer to free function for host. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_allocator_create( | |
| dnnl_graph_allocator_t *allocator, | |
| dnnl_graph_host_allocate_f host_malloc, | |
| dnnl_graph_host_deallocate_f host_free); | |
| /// Destroys an allocator. | |
| /// | |
| /// @param allocator The allocator to be destroyed. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_allocator_destroy( | |
| dnnl_graph_allocator_t allocator); | |
| /// @} dnnl_graph_api_allocator | |
| /// @addtogroup dnnl_graph_api_engine | |
| /// @{ | |
| /// This API is a supplement for existing onednn engine API. | |
| dnnl_status_t DNNL_API dnnl_graph_make_engine_with_allocator( | |
| dnnl_engine_t *engine, dnnl_engine_kind_t kind, size_t index, | |
| const_dnnl_graph_allocator_t alloc); | |
| /// @} dnnl_graph_api_engine | |
| /// @addtogroup dnnl_graph_api_logical_tensor | |
| /// @{ | |
| /// Initializes a logical tensor with id, data type, number of dimensions, | |
| /// layout type, and property. The logical tensor's dims are unknown with this | |
| /// interface. | |
| /// | |
| /// @param logical_tensor Output logical tensor. | |
| /// @param tid The unique id of the output logical tensor. | |
| /// @param dtype Elements data type. | |
| /// @param ndims Number of dimensions. | |
| /// @param ltype Layout type of the underlying tensor buffer. | |
| /// @param ptype Tensor property type. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_logical_tensor_init( | |
| dnnl_graph_logical_tensor_t *logical_tensor, size_t tid, | |
| dnnl_data_type_t dtype, int32_t ndims, dnnl_graph_layout_type_t ltype, | |
| dnnl_graph_tensor_property_t ptype); | |
| /// Initializes a logical tensor with basic information and dims. The logical | |
| /// tensor's dimensions and layout will be initialized according to the input | |
| /// arguments. | |
| /// | |
| /// @note | |
| /// If dims contains all valid values and layout type is | |
| /// #dnnl_graph_layout_type_strided. The strides field in | |
| /// #dnnl_graph_logical_tensor_t will be calculated in a row major and | |
| /// contiguous way. Otherwise, Accessing the strides field is an undefined | |
| /// behavior. | |
| /// | |
| /// Eg. dims (2, 3, 4, 5) will get strides (60, 20, 5, 1) | |
| /// | |
| /// @param logical_tensor Output logical tensor. | |
| /// @param tid The unique id of output logical tensor. | |
| /// @param dtype Elements data type. | |
| /// @param ndims Number of dimensions. | |
| /// @param dims Array of dimensions. | |
| /// @param ltype Layout type of the underlying tensor memory. | |
| /// @param ptype Tensor property type. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_logical_tensor_init_with_dims( | |
| dnnl_graph_logical_tensor_t *logical_tensor, size_t tid, | |
| dnnl_data_type_t dtype, int32_t ndims, const dnnl_dims_t dims, | |
| dnnl_graph_layout_type_t ltype, dnnl_graph_tensor_property_t ptype); | |
| /// Initializes a logical tensor with dimensions and strides provided by user. | |
| /// | |
| /// @note | |
| /// Once strides are explicitly provided through the API, the `layout_type` | |
| /// in #dnnl_graph_logical_tensor_t can only be | |
| /// #dnnl_graph_layout_type_strided or #dnnl_graph_layout_type_any. | |
| /// | |
| /// @param logical_tensor Output logical tensor. | |
| /// @param tid The unique id of output logical tensor. | |
| /// @param dtype Elements data type. | |
| /// @param ndims Number of dimensions. | |
| /// @param dims Array of dimensions. | |
| /// @param strides Array of strides. | |
| /// @param ptype Tensor property type. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_logical_tensor_init_with_strides( | |
| dnnl_graph_logical_tensor_t *logical_tensor, size_t tid, | |
| dnnl_data_type_t dtype, int32_t ndims, const dnnl_dims_t dims, | |
| const dnnl_dims_t strides, dnnl_graph_tensor_property_t ptype); | |
| /// Returns the memory size described by the logical tensor. If it's a strided | |
| /// layout, the size will be calculated by `dims` and `strides`. If it's an | |
| /// opaque layout, the size will be decided by `layout_id`. | |
| /// | |
| /// @param logical_tensor Logical tensor. | |
| /// @param size Output memory size in bytes. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_logical_tensor_get_mem_size( | |
| const dnnl_graph_logical_tensor_t *logical_tensor, size_t *size); | |
| /// 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. | |
| /// | |
| /// @param lt1 The handle of first logical tensor. | |
| /// @param lt2 The handle of second logical tensor. | |
| /// @param is_equal 1 if these two logical tensors are equal, 0 otherwise. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_logical_tensor_is_equal( | |
| const dnnl_graph_logical_tensor_t *lt1, | |
| const dnnl_graph_logical_tensor_t *lt2, uint8_t *is_equal); | |
| /// @} dnnl_graph_api_logical_tensor | |
| /// @addtogroup dnnl_graph_api_tensor | |
| /// @{ | |
| /// Creates a tensor with logical tensor, engine, and data handle. | |
| /// | |
| /// @param tensor Output tensor. | |
| /// @param logical_tensor Description for this tensor. | |
| /// @param engine Engine to use. | |
| /// @param handle Handle of the memory buffer to use as an underlying storage. | |
| /// - A pointer to the user-allocated buffer. In this case the library | |
| /// doesn't own the buffer. | |
| /// - The DNNL_MEMORY_ALLOCATE special value. Instructs the library to | |
| /// allocate the buffer for the tensor. In this case the library | |
| /// owns the buffer. | |
| /// - DNNL_MEMORY_NONE to create tensor without an underlying buffer. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_tensor_create(dnnl_graph_tensor_t *tensor, | |
| const dnnl_graph_logical_tensor_t *logical_tensor, dnnl_engine_t engine, | |
| void *handle); | |
| /// Destroys a tensor. | |
| /// | |
| /// @param tensor The tensor to be destroyed. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_tensor_destroy(dnnl_graph_tensor_t tensor); | |
| /// Gets the data handle of a tensor. | |
| /// | |
| /// @param tensor The input tensor. | |
| /// @param handle Pointer to the data of input tensor. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_tensor_get_data_handle( | |
| const_dnnl_graph_tensor_t tensor, void **handle); | |
| /// Set data handle for a tensor. | |
| /// | |
| /// @param tensor The input tensor. | |
| /// @param handle New data handle for tensor. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_tensor_set_data_handle( | |
| dnnl_graph_tensor_t tensor, void *handle); | |
| /// Returns the engine of a tensor object. | |
| /// | |
| /// @param tensor The input tensor. | |
| /// @param engine Output engine on which the tensor is located. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_tensor_get_engine( | |
| const_dnnl_graph_tensor_t tensor, dnnl_engine_t *engine); | |
| /// Returns the logical tensor of a tensor object. | |
| /// | |
| /// @param tensor The input tensor. | |
| /// @param logical_tensor Output logical tensor of the tensor object. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_tensor_get_logical_tensor( | |
| const_dnnl_graph_tensor_t tensor, | |
| dnnl_graph_logical_tensor_t *logical_tensor); | |
| /// @} dnnl_graph_api_tensor | |
| /// @addtogroup dnnl_graph_api_op | |
| /// @{ | |
| /// Initializes an op with unique id, kind, and name. | |
| /// | |
| /// @param op Output op | |
| /// @param id The unique id of the output op. | |
| /// @param kind The op kind. | |
| /// @param verbose_name The string added as the op name. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_create(dnnl_graph_op_t *op, size_t id, | |
| dnnl_graph_op_kind_t kind, const char *verbose_name); | |
| /// Destroys an op. | |
| /// | |
| /// @param op The op to be destroyed. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_destroy(dnnl_graph_op_t op); | |
| /// Adds input logical tensor to the op. | |
| /// | |
| /// @param op Input op. | |
| /// @param input The input logical tensor to be added. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_add_input( | |
| dnnl_graph_op_t op, const dnnl_graph_logical_tensor_t *input); | |
| /// Adds output logical tensor to the op. | |
| /// | |
| /// @param op Input op. | |
| /// @param output The output logical tensor to be added. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_add_output( | |
| dnnl_graph_op_t op, const dnnl_graph_logical_tensor_t *output); | |
| /// Sets floating point attribute to an op. | |
| /// | |
| /// @param op Input op. | |
| /// @param name The attribute's name. | |
| /// @param value The attribute's value. | |
| /// @param value_len The number of value element. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_set_attr_f32(dnnl_graph_op_t op, | |
| dnnl_graph_op_attr_t name, const float *value, size_t value_len); | |
| /// Sets boolean attribute to an op. | |
| /// | |
| /// @param op Input op. | |
| /// @param name The attribute's name. | |
| /// @param value The attribute's value. | |
| /// @param value_len The number of value element. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_set_attr_bool(dnnl_graph_op_t op, | |
| dnnl_graph_op_attr_t name, const uint8_t *value, size_t value_len); | |
| /// Sets integer attribute to an op. | |
| /// | |
| /// @param op Input op. | |
| /// @param name The attribute's name. | |
| /// @param value The attribute's value. | |
| /// @param value_len The number of value element. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_set_attr_s64(dnnl_graph_op_t op, | |
| dnnl_graph_op_attr_t name, const int64_t *value, size_t value_len); | |
| /// Sets string attribute to an op. | |
| /// | |
| /// @param op Input op. | |
| /// @param name The attribute's name. | |
| /// @param value The attribute's value. | |
| /// @param value_len The length of the string value. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_set_attr_str(dnnl_graph_op_t op, | |
| dnnl_graph_op_attr_t name, const char *value, size_t value_len); | |
| /// Returns the unique id of an op. | |
| /// | |
| /// @param op Input op. | |
| /// @param id Output the unique id. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_get_id( | |
| const_dnnl_graph_op_t op, size_t *id); | |
| /// Returns the kind of an op. | |
| /// | |
| /// @param op Input op. | |
| /// @param kind Output op kind. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_op_get_kind( | |
| const_dnnl_graph_op_t op, dnnl_graph_op_kind_t *kind); | |
| /// @} dnnl_graph_api_op | |
| /// @addtogroup dnnl_graph_api_partition | |
| /// @{ | |
| /// Creates a new partition with a given operator and engine kind. The API is | |
| /// used to create a partition from an operation directly without creating the | |
| /// graph and calling `get_partitions()`. The output partition contains only one | |
| /// operation specified by the parameter. The output partition instance should | |
| /// be destroyed via #dnnl_graph_partition_destroy after use. | |
| /// | |
| /// @param partition The handle of output partition. | |
| /// @param op The operation used to create partition. | |
| /// @param ekind The engine kind used to create partition. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_create_with_op( | |
| dnnl_graph_partition_t *partition, const_dnnl_graph_op_t op, | |
| dnnl_engine_kind_t ekind); | |
| /// Destroys a partition. | |
| /// | |
| /// @param partition The partition to be destroyed. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_destroy( | |
| dnnl_graph_partition_t partition); | |
| /// Returns the number of operations in a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param num Output the number of operations. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_op_num( | |
| const_dnnl_graph_partition_t partition, size_t *num); | |
| /// Returns the list of op IDs of the partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param num The number of ops. | |
| /// @param ids Output the op IDs. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_ops( | |
| dnnl_graph_partition_t partition, size_t num, size_t *ids); | |
| /// Returns the ID of a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param id Output the ID of the partition. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_id( | |
| const_dnnl_graph_partition_t partition, size_t *id); | |
| /// Compiles a partition with given input and output logical tensors. The output | |
| /// logical tensors can contain unknown dimensions. For this case, the | |
| /// compilation will deduce the output shapes according to input shapes. The | |
| /// output logical tensors can also have layout type `any`. The compilation will | |
| /// choose the optimal layout for output tensors. The optimal layout will be | |
| /// represented as an opaque layout ID saved in the output logical tensor. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param compiled_partition Output compiled partition. | |
| /// @param in_num The number of input logical tensors. | |
| /// @param inputs A list of input logical tensors. | |
| /// @param out_num The number of output logical tensors. | |
| /// @param outputs A list of output logical tensors. | |
| /// @param engine The target engine of the compilation. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_compile( | |
| dnnl_graph_partition_t partition, | |
| dnnl_graph_compiled_partition_t compiled_partition, size_t in_num, | |
| const dnnl_graph_logical_tensor_t **inputs, size_t out_num, | |
| const dnnl_graph_logical_tensor_t **outputs, dnnl_engine_t engine); | |
| /// Returns the number of input logical tensors of a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param num Output the number of input logical tensors. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_input_ports_num( | |
| const_dnnl_graph_partition_t partition, size_t *num); | |
| /// Returns a list of input logical tensors from a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param num The number of input logical tensors. | |
| /// @param inputs The list of input logical tensors. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_input_ports( | |
| const_dnnl_graph_partition_t partition, size_t num, | |
| dnnl_graph_logical_tensor_t *inputs); | |
| /// Returns the number of output logical tensors of a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param num Output the number of output logical tensors. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_output_ports_num( | |
| const_dnnl_graph_partition_t partition, size_t *num); | |
| /// Returns a list of output logical tensors from a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param num The number of output logical tensors. | |
| /// @param outputs The list of output logical tensors. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_output_ports( | |
| const_dnnl_graph_partition_t partition, size_t num, | |
| dnnl_graph_logical_tensor_t *outputs); | |
| /// Returns the supporting status of a partition. Some operations may not be | |
| /// supported by the library under certain circumstances. During partitioning | |
| /// stage, unsupported partitions will be returned to users with each containing | |
| /// an unsupported operation. Users should check the supporting status of a | |
| /// partition before transforming the computation graph or compiling the | |
| /// partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param is_supported Output flag to indicate the supporting status. 0 means | |
| /// unsupported while 1 means supported. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_is_supported( | |
| const_dnnl_graph_partition_t partition, uint8_t *is_supported); | |
| /// Returns the engine kind of a partition. | |
| /// | |
| /// @param partition The target partition. | |
| /// @param kind The output engine kind. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_partition_get_engine_kind( | |
| const_dnnl_graph_partition_t partition, dnnl_engine_kind_t *kind); | |
| /// @} dnnl_graph_api_partition | |
| /// @addtogroup dnnl_graph_api_compiled_partition | |
| /// @{ | |
| /// Creates a new compiled partition handle. | |
| /// | |
| /// @param compiled_partition The handle of output compiled partition. | |
| /// @param partition The handle of input partition. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_compiled_partition_create( | |
| dnnl_graph_compiled_partition_t *compiled_partition, | |
| dnnl_graph_partition_t partition); | |
| /// Executes a compiled partition. | |
| /// | |
| /// @param compiled_partition The handle of target compiled partition. | |
| /// @param stream The stream used for execution. | |
| /// @param num_inputs The number of input tensors. | |
| /// @param inputs A list of input tensors. | |
| /// @param num_outputs The number of output tensors. | |
| /// @param outputs A non-empty list of output tensors. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_compiled_partition_execute( | |
| const_dnnl_graph_compiled_partition_t compiled_partition, | |
| dnnl_stream_t stream, size_t num_inputs, | |
| const_dnnl_graph_tensor_t *inputs, size_t num_outputs, | |
| const_dnnl_graph_tensor_t *outputs); | |
| /// Destroys a compiled partition. | |
| /// | |
| /// @param compiled_partition The compiled partition to be destroyed. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_compiled_partition_destroy( | |
| dnnl_graph_compiled_partition_t compiled_partition); | |
| /// Queries an input or output logical tensor according to tensor ID. If the | |
| /// tensor ID doesn't belong to any input or output of the compiled partition, | |
| /// an error status #dnnl_invalid_arguments will be returned by the API. | |
| /// | |
| /// @param compiled_partition The handle of target compiled_partition. | |
| /// @param tid The unique id of required tensor. | |
| /// @param lt The output logical tensor. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_compiled_partition_query_logical_tensor( | |
| const_dnnl_graph_compiled_partition_t compiled_partition, size_t tid, | |
| dnnl_graph_logical_tensor_t *lt); | |
| /// Returns the hint of in-place pairs from a compiled partition. It indicates | |
| /// that an input and an output of the partition can share the same memory | |
| /// buffer for computation. In-place computation helps to reduce the memory | |
| /// footprint and improves cache locality. But since the library may not have a | |
| /// global view of user's application, it's possible that the tensor with | |
| /// `input_id` is used at other places in user's computation graph. In this | |
| /// case, the user should take the in-place pair as a hint and pass a different | |
| /// memory buffer for output tensor to avoid overwriting the input memory buffer | |
| /// which will probably cause unexpected incorrect results. | |
| /// | |
| /// @param compiled_partition The handle of target compiled_partition. | |
| /// @param num_inplace_pairs The number of in-place pairs. | |
| /// @param inplace_pairs The handle of in-place pairs. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_compiled_partition_get_inplace_ports( | |
| const_dnnl_graph_compiled_partition_t compiled_partition, | |
| size_t *num_inplace_pairs, | |
| const dnnl_graph_inplace_pair_t **inplace_pairs); | |
| /// @} dnnl_graph_api_compiled_partition | |
| /// @addtogroup dnnl_graph_api_graph | |
| /// @{ | |
| /// Creates a new empty graph. A graph is associated to a specific engine kind. | |
| /// The partitions returned from the graph will inherit the engine kind of the | |
| /// graph. | |
| /// | |
| /// @param graph The handle of output graph. | |
| /// @param engine_kind The target engine kind. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_create( | |
| dnnl_graph_graph_t *graph, dnnl_engine_kind_t engine_kind); | |
| /// Creates a new empty graph with an engine kind and a floating-point math | |
| /// mode. All partitions returned from the graph will inherit the engine kind | |
| /// and floating-point math mode. | |
| /// | |
| /// @param graph The handle of output graph. | |
| /// @param engine_kind The kind for engine. | |
| /// @param mode The floating-point math mode. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_create_with_fpmath_mode( | |
| dnnl_graph_graph_t *graph, dnnl_engine_kind_t engine_kind, | |
| dnnl_fpmath_mode_t mode); | |
| /// Destroys a graph. | |
| /// | |
| /// @param graph The graph to be destroyed. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_destroy(dnnl_graph_graph_t graph); | |
| /// Set the floating point math mode for a graph. | |
| /// | |
| /// @param graph The target graph. | |
| /// @param mode The floating-point math mode. | |
| /// @param apply_to_int The flag that controls whether to use floating-point | |
| /// arithmetic for integral operations. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_set_fpmath_mode( | |
| dnnl_graph_graph_t graph, dnnl_fpmath_mode_t mode, int apply_to_int); | |
| /// Get the floating point math mode for a graph. | |
| /// | |
| /// @param graph The target graph. | |
| /// @param mode The floating-point math mode. | |
| /// @param apply_to_int The flag that controls whether to use floating-point | |
| /// arithmetic for integral operations. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_get_fpmath_mode( | |
| dnnl_graph_graph_t graph, dnnl_fpmath_mode_t *mode, int *apply_to_int); | |
| /// Adds an operation into a graph. The API will return failure if the operator | |
| /// has already been added to the graph or the operation cannot pass the schema | |
| /// check in the library (eg. input and output numbers and data types, the | |
| /// attributes of the operation, etc.). | |
| /// | |
| /// @param graph The target graph. | |
| /// @param op The operation to be added. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_add_op( | |
| dnnl_graph_graph_t graph, dnnl_graph_op_t op); | |
| /// Finalizes a graph. It means users have finished adding operations into the | |
| /// graph and the graph is ready for partitioning. Adding a new operation into a | |
| /// finalized graph will return failures. Similarly, partitioning on a | |
| /// un-finalized graph will also return failures. | |
| /// | |
| /// @param graph The target graph to be finalized. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_finalize(dnnl_graph_graph_t graph); | |
| /// Checks if a graph is finalized. | |
| /// | |
| /// @param graph The target graph to be finalized. | |
| /// @param finalized Output the finalization status. 0 means then graph is not | |
| /// finalized. Other values means the graph is finalized. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_is_finalized( | |
| dnnl_graph_graph_t graph, uint8_t *finalized); | |
| /// Filters a graph. Partitions will be claimed internally according to the | |
| /// capability of the library, the engine kind, and the policy. | |
| /// | |
| /// @param graph The target graph. | |
| /// @param policy The partition policy. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_filter( | |
| dnnl_graph_graph_t graph, dnnl_graph_partition_policy_t policy); | |
| /// Returns the number of partitions of a graph. The API should be called after | |
| /// a partition is already filtered. Otherwise, the output number is zero. | |
| /// | |
| /// @param graph The graph. | |
| /// @param num Output the number of partitions. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_get_partition_num( | |
| const_dnnl_graph_graph_t graph, size_t *num); | |
| /// Returns the partitions from a filtered graph. Output partition instances | |
| /// will be written into the parameter `partitions`. Users need to make sure | |
| /// `partitions` is valid and has enough space to accept the partition | |
| /// instances. Each output partition instance should be destroyed via | |
| /// #dnnl_graph_partition_destroy explicitly after use. | |
| /// | |
| /// @param graph The target graph. | |
| /// @param num The number of partitions. | |
| /// @param partitions Output the partitions. | |
| /// @returns #dnnl_success on success or a status describing the error | |
| /// otherwise. | |
| dnnl_status_t DNNL_API dnnl_graph_graph_get_partitions(dnnl_graph_graph_t graph, | |
| size_t num, dnnl_graph_partition_t *partitions); | |
| /// @} dnnl_graph_api_graph | |
| /// @addtogroup dnnl_graph_api_compiled_partition_cache | |
| /// @{ | |
| /// Returns the number of compiled partitions that can be held in the compiled | |
| /// partition cache at the same time. | |
| /// | |
| /// @param capacity Compiled partition cache capacity to query. Concurrently | |
| /// accessing @p capacity is safe. | |
| /// @returns #dnnl_invalid_arguments if the @p capacity value | |
| /// is invalid, and #dnnl_success on success. | |
| dnnl_status_t DNNL_API dnnl_graph_get_compiled_partition_cache_capacity( | |
| int *capacity); | |
| /// Sets a number of compiled partitions that can be held in the compiled | |
| /// partition cache at the same time. The default capacity of compiled partition | |
| /// cache is 1024. | |
| /// | |
| /// @param capacity Compiled partition cache capacity to set. The default cache | |
| /// capacity is 1024. If a new @p capacity is less than a number of compiled | |
| /// partition that the compiled partition cache already has, then the excess | |
| /// entries will be evicted. Setting the @p capacity to 0 clears the compiled | |
| /// partition cache and disables it. Concurrently modifying @p capacity is safe. | |
| /// @returns #dnnl_invalid_arguments if the @p capacity value | |
| /// is invalid, and #dnnl_success on success. | |
| dnnl_status_t DNNL_API dnnl_graph_set_compiled_partition_cache_capacity( | |
| int capacity); | |
| /// @} dnnl_graph_api_compiled_partition_cache | |
| /// @addtogroup dnnl_graph_api_constant_tensor_cache | |
| /// @{ | |
| /// Control the enabling or disabling of constant tensor cache. This API must | |
| /// be called once before compilation stage. By default, constant tensor cache is | |
| /// disabled in the library. | |
| /// | |
| /// @param flag Set to positive value to enable the cache and set to 0 to | |
| /// disable the cache. Negative values are invalid. | |
| /// @returns #dnnl_invalid_arguments if the @p flag value is | |
| /// invalid, and #dnnl_success on success. | |
| /// @note This API is deprecated and will be removed in future release, please | |
| /// use the dnnl_graph_set_constant_tensor_cache_capacity API to disable | |
| /// constant tensor cache by setting it's capacity to zero. | |
| dnnl_status_t DNNL_API dnnl_graph_set_constant_tensor_cache(int flag); | |
| /// Return the enabling or disabling status of constant tensor cache. | |
| /// | |
| /// @param flag The constant tensor cache enabling status to query. | |
| /// @returns #dnnl_invalid_arguments if the @p flag value is | |
| /// nullptr, and #dnnl_success on success. | |
| /// @note This API is deprecated and will be removed in future release, please | |
| /// use the dnnl_graph_get_constant_tensor_cache_capacity API to check the | |
| /// enabling status by checking it's capacity. | |
| dnnl_status_t DNNL_API dnnl_graph_get_constant_tensor_cache(int *flag); | |
| /// Control the capacity for the constant tensor cache that used for specific | |
| /// engine kind. This API is thread safe and can be called multiple times at | |
| /// runtime. The capacity is set to zero by default which means the cache is | |
| /// disabled. When calling this API, the corresponding cache will be flushed. | |
| /// Setting capacity to 0 means to clear all cached tensors and disable cache. | |
| /// Once the capacity limit is reached, no new tensors will be cached. If there | |
| /// are multiple devices for an engine kind, the capacity set here is for each | |
| /// device. | |
| /// | |
| /// @param eng_kind The engine kind that the constant tensor cache used for. | |
| /// @param size The constant tensor cache capacity size to set. | |
| /// @returns #dnnl_invalid_arguments if the @p eng_kind value is invalid, and | |
| /// #dnnl_success on success. | |
| dnnl_status_t DNNL_API dnnl_graph_set_constant_tensor_cache_capacity( | |
| dnnl_engine_kind_t eng_kind, size_t size); | |
| /// Return the current capacity of constant tensor cache. | |
| /// | |
| /// @param eng_kind The engine kind that the constant tensor cache used for. | |
| /// @param size The constant tensor cache capacity size to query. | |
| /// @returns #dnnl_invalid_arguments if the @p eng_kind value is | |
| /// nullptr or the @p size is nullptr, and #dnnl_success on success. | |
| dnnl_status_t DNNL_API dnnl_graph_get_constant_tensor_cache_capacity( | |
| dnnl_engine_kind_t eng_kind, size_t *size); | |
| /// @} dnnl_graph_api_constant_tensor_cache | |
| /// @} dnnl_graph_api | |
| /// @} dnnl_api | |
| } | |