***
API
***

The ElcoreNN API consists of the following parts:

* ``elcorenn/elcorenn.h``: ElcoreNN CPU library API.

ElcoreNN CPU library API
========================
``elcorenn/elcorenn.h`` defines the ElcoreNN CPU library API functions.

.. doxygentypedef:: ENNBackendId

``ENNBackendId`` is a ElcoreNN backend descriptor.
ElcoreNN backend is a runtime to load and invoke models.

.. doxygentypedef:: ENNModelId

``ENNModelId`` is a model descriptor.
That descriptor refers to the model loaded to ElcoreNN backend.

.. doxygenenum:: ENNDataType

``ENNDataType`` is a data type enumerator.
It describes the types of input data used in InvokeModel function.
It also sets type of calculations during inference.

.. doxygenenum:: ENNHeapSize

.. doxygenfunction:: InitBackend(ENNHeapSize heap_size = ENNHeapSize::Size_512MB);

.. doxygenfunction:: InitBackend(uint32_t devices_count, ENNHeapSize heap_size = ENNHeapSize::Size_512MB)

.. doxygenfunction:: InitBackend(uint32_t devices_count, uint32_t* devices, ENNHeapSize heap_size = ENNHeapSize::Size_512MB)

.. doxygenfunction:: ReleaseBackend(ENNBackendId backend_id)

.. doxygenfunction:: LoadModel(const char* model_json, const char* model_weights, ENNDataType optimization, ENNBackendId backend_id)

The function takes paths for model description and model weights files.
Optional argument optimization is used for model data type conversion.
Available two data types: float32 (model loaded without changes) and
float16 (model optimized for DSP inference), default value is float16.
backend_id argument refers to ElcoreNN backend which is used to load model.

.. doxygenfunction:: GetInputsNumber

.. doxygenfunction:: GetOutputsNumber

.. doxygenfunction:: GetInputName

.. doxygenfunction:: GetInputShape

.. doxygenfunction:: GetOutputName

.. doxygenfunction:: GetOutputShape

.. note:: ElcoreNN uses the data parallelization paradigm.
          Input data distributes between DSP cores by batch dimension.

.. doxygenfunction:: InvokeModel(ENNModelId model_id, void** input_data, ENNDataType* input_data_type, float** output_data, uint32_t batch_size)

The function takes model inputs as an arrays of types defined in input_data_type array
and puts network's result into a float arrays.

.. doxygenfunction:: InvokeModel(ENNModelId model_id, float** input_data, float** output_data, uint32_t batch_size)

The function takes model inputs as a float arrays and puts network's result into a float arrays.

.. doxygenfunction:: InvokeModel(ENNModelId model_id, int* input_dmabuf_fd_array, float** output_data, uint32_t batch_size)

The function takes model inputs as integer arrays of dmabuf file descriptors and puts network's
 result into a float arrays. (Limitation: only one model input, input data should be float).

.. doxygenfunction:: InvokeModel(ENNModelId model_id, int* input_dmabuf_fd_array, int* output_dmabuf_fd_array, uint32_t batch_size)

The function takes model inputs as integer arrays of dmabuf file descriptors and puts network's
 result into a dmabufs. (Limitation: only one model input, only one model output,
 input data should be float).

.. doxygenfunction:: ReleaseModel(ENNModelId model_id)

.. doxygenfunction:: SaveModelStatisticToCSV

During inference, ElcoreNN collects number of cores cycles instructions for each layer.
This can be useful for performance analysis.
