302 lines
7.7 KiB
C
302 lines
7.7 KiB
C
#ifndef _CALRT_H_
|
|
#define _CALRT_H_
|
|
|
|
/**
|
|
* @brief an interface for c file
|
|
*
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
#include "calrt_platform.h"
|
|
#include "calrt_error.h"
|
|
|
|
#define CAL_MAX_FILE_PATH (128)
|
|
#define CAL_MAX_NAME (256)
|
|
|
|
// ---------------------------------------- enum --------------------------------------
|
|
|
|
typedef enum _CalrtDeviceType_e
|
|
{
|
|
UNDEFINE_TYPE = 0,
|
|
PCIE = 1,
|
|
USB,
|
|
EMU
|
|
}cal_device_type_e;
|
|
|
|
typedef enum _CalrtTransDirection_e
|
|
{
|
|
HOST_TO_DEVICE = 0,
|
|
DEVICE_TO_HOST
|
|
}cal_direction_e;
|
|
|
|
typedef enum _CalrtPowerMode_e
|
|
{
|
|
BALANCE = 1,
|
|
HIGH_PERFORMANCE = 2
|
|
}cal_power_e;
|
|
|
|
// ---------------------------------------- struct --------------------------------------
|
|
|
|
typedef struct _CalrtDeviceId_t
|
|
{
|
|
cal_device_type_e dev_type;
|
|
char path[CAL_MAX_FILE_PATH];
|
|
}cal_device_id_t;
|
|
|
|
typedef struct _CalrtDeviceInfo_t
|
|
{
|
|
cal_device_id_t id;
|
|
char name[CAL_MAX_NAME];
|
|
uint64_t ddr_size;
|
|
float sram_freq_mhz;
|
|
float sram_size_mb;
|
|
}cal_device_info_t;
|
|
|
|
typedef struct _CalrtModel_t
|
|
{
|
|
char name[CAL_MAX_NAME];
|
|
}cal_model_t;
|
|
|
|
typedef struct _CalrtTensor_t
|
|
{
|
|
uint64_t size;
|
|
uint64_t element_num;
|
|
uint64_t *shape;
|
|
int shape_dim; // indicate shape length
|
|
}cal_tensor_info_t;
|
|
|
|
// ---------------------------------------- pre-declare struct --------------------------------------
|
|
|
|
typedef struct _Calrt_Calbin *cal_calbin;
|
|
typedef struct _Calrt_Dev *cal_device;
|
|
typedef struct _Calrt_InputBuf *cal_ibuffer;
|
|
typedef struct _Calrt_OutputBuf *cal_obuffer;
|
|
typedef struct _Calrt_Tensor *cal_tensor;
|
|
|
|
|
|
// ---------------------------------------- Calbin ----------------------------------------
|
|
|
|
/**
|
|
* @brief Create a calbin object
|
|
*
|
|
* @param calbin calbin struct
|
|
* @param calbin_path path to calbin file
|
|
* @return CalrtError_e 0 on success
|
|
*/
|
|
CALRT_API CalrtError_e create_calbin(cal_calbin *calbin, const char* calbin_path);
|
|
|
|
/**
|
|
* @brief Get the all models object
|
|
*
|
|
* @param calbin
|
|
* @return int the number of models inside calbin
|
|
*/
|
|
CALRT_API int get_models_number(cal_calbin calbin);
|
|
|
|
/**
|
|
* @brief Get the all models name
|
|
*
|
|
* @param model_num the size of models name list
|
|
* @param name model name list
|
|
* @return CalrtError_e CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e get_all_models(int model_num, char** name, cal_calbin calbin);
|
|
|
|
CALRT_API void print_calbin(cal_calbin calbin);
|
|
|
|
// ---------------------------------------- Device ----------------------------------------
|
|
|
|
/**
|
|
* @brief Create a pcie device object
|
|
*
|
|
* @param device
|
|
* @return CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e create_device(cal_device *device);
|
|
|
|
/**
|
|
* @brief Create a device by type object
|
|
*
|
|
* @param device cal_device
|
|
* @param type device type
|
|
* @return CalrtError_e
|
|
*/
|
|
CALRT_API CalrtError_e create_device_by_type(cal_device *device, cal_device_type_e type);
|
|
|
|
CALRT_API void reset_device_configuration(cal_device device);
|
|
|
|
CALRT_API void reset_device(cal_device device);
|
|
|
|
// ---------------------------------------- Buffer ----------------------------------------
|
|
|
|
/**
|
|
* @brief Create a input buffer object
|
|
*
|
|
* @param buffer
|
|
* @param calbin
|
|
* @return CalrtError_e 0 on success
|
|
*/
|
|
CALRT_API CalrtError_e create_input_buffer(cal_ibuffer *buffer, cal_calbin calbin, const char* model_name);
|
|
|
|
/**
|
|
* @brief Create a output buffer object
|
|
*
|
|
* @param buffer
|
|
* @param calbin
|
|
* @return CalrtError_e CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e create_output_buffer(cal_obuffer *buffer, cal_calbin calbin, const char* model_name);
|
|
|
|
/**
|
|
* @brief Get the input tensor number
|
|
*
|
|
* @param buffer input buffer
|
|
* @return the amount of tensors
|
|
*/
|
|
CALRT_API int get_input_tensor_num(cal_ibuffer buffer);
|
|
|
|
/**
|
|
* @brief Get the output tensor number
|
|
*
|
|
* @param buffer output buffer
|
|
* @return the amount of tensors
|
|
*/
|
|
CALRT_API int get_output_tensor_num(cal_obuffer buffer);
|
|
|
|
/**
|
|
* @brief Get the input tensor by name
|
|
*
|
|
* @param buffer input buffer struct
|
|
* @param name tensor name
|
|
* @param tensor cal_tensor
|
|
* @return CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e get_input_tensor_by_name(cal_ibuffer buffer, const char* name, cal_tensor *tensor);
|
|
|
|
/**
|
|
* @brief Get the output tensor by name
|
|
*
|
|
* @param buffer output buffer struct
|
|
* @param name tensor name
|
|
* @param tensor
|
|
* @return CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e get_output_tensor_by_name(cal_obuffer buffer, const char* name, cal_tensor *tensor);
|
|
|
|
/**
|
|
* @brief Set the csr value by name
|
|
*
|
|
* @param buffer
|
|
* @param name
|
|
* @param value
|
|
*/
|
|
CALRT_API void set_csr_by_name(cal_ibuffer buffer, const char* name, uint32_t value);
|
|
|
|
/**
|
|
* @brief Get the csr value by name
|
|
*
|
|
* @param buffer
|
|
* @param name
|
|
* @return value
|
|
*/
|
|
CALRT_API uint32_t get_csr_value_by_name(cal_ibuffer buffer, const char* name);
|
|
|
|
CALRT_API cal_tensor_info_t get_tensor_info(cal_tensor tensor);
|
|
|
|
// ---------------------------------------- Inference ----------------------------------------
|
|
|
|
/**
|
|
* @brief blocking inference interface
|
|
*
|
|
* @param device
|
|
* @param model_name
|
|
* @param calbin
|
|
* @param inputBuffer
|
|
* @param outputBuffer
|
|
*/
|
|
CALRT_API void block_infer_model(cal_device device, const char* model_name, cal_calbin calbin, cal_ibuffer inputBuffer, cal_obuffer outputBuffer);
|
|
|
|
/**
|
|
* @brief non-blocking inference interface
|
|
*
|
|
* @param device
|
|
* @param model_name
|
|
* @param calbin
|
|
* @param inputBuffer
|
|
* @param outputBuffer
|
|
*/
|
|
CALRT_API void non_block_infer_model(cal_device device, const char* model_name, cal_calbin calbin, cal_ibuffer inputBuffer, cal_obuffer outputBuffer);
|
|
|
|
/**
|
|
* @brief co-op with non_block_infer_model api
|
|
*
|
|
* @param outputBuffer
|
|
* @return CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e wait_infer_done(cal_obuffer outputBuffer);
|
|
|
|
// ---------------------------------------- Configure ----------------------------------------
|
|
|
|
/**
|
|
* @brief configure calbin into the current device
|
|
*
|
|
* @param device
|
|
* @param calbin
|
|
* @return CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e configure_device(cal_device device, cal_calbin calbin);
|
|
|
|
// ---------------------------------------- Memory Management ----------------------------------------
|
|
|
|
/**
|
|
* @brief copy host data to device. tensor MUST be input tensor
|
|
* @warning user must guarantee tensor is from input buffer
|
|
*
|
|
* @param host host side buffer
|
|
* @param tensor
|
|
* @param size byte
|
|
*/
|
|
CALRT_API CalrtError_e cal_copy_mem(void *host, cal_tensor tensor, uint64_t size, cal_direction_e direction);
|
|
|
|
/**
|
|
* @brief safer way to copy host data to device.
|
|
*
|
|
* @param host host side buffer
|
|
* @param size byte
|
|
* @param buffer input buffer
|
|
* @param name tensor name
|
|
* @param offset the location where to write data in device memory
|
|
* @return CalrtSuccess on success(0)
|
|
*/
|
|
CALRT_API CalrtError_e copy_mem_to_device_by_tensor_name(void *host, cal_ibuffer ibuffer, uint64_t size, const char* name, uint64_t offset=0);
|
|
|
|
/**
|
|
* @brief safer way to copy device data to host. tensor must be output tensor
|
|
*
|
|
* @param host host side buffer
|
|
* @param size byte
|
|
* @param buffer output buffer
|
|
* @param name tensor name
|
|
* @param offset the location where to read data in device memory
|
|
*/
|
|
CALRT_API CalrtError_e copy_mem_to_host_by_tensor_name(void *host, cal_obuffer obuffer, uint64_t size, const char* name, uint64_t offset=0);
|
|
|
|
// ---------------------------------------- Resource Release ----------------------------------------
|
|
|
|
CALRT_API void release_device(cal_device device);
|
|
CALRT_API void release_calbin(cal_calbin calbin);
|
|
CALRT_API void release_input_buffer(cal_ibuffer buffer);
|
|
CALRT_API void release_output_buffer(cal_obuffer buffer);
|
|
CALRT_API void release_tensor_info(cal_tensor_info_t &tensor_info);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /*_CALRT_H_*/ |