/* Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd. */ #ifndef SVP_ACL_PROF_H #define SVP_ACL_PROF_H #include "svp_acl_base.h" #ifdef __cplusplus extern "C" { #endif #define SVP_ACL_PROF_ACL_API 0x0001 #define SVP_ACL_PROF_TASK_TIME 0x0002 #define SVP_ACL_PROF_AICORE_METRICS 0x0004 #define SVP_ACL_PROF_AICPU_TRACE 0x0008 #define SVP_ACL_PROF_MAX_OP_NAME_LEN 257 #define SVP_ACL_PROF_MAX_OP_TYPE_LEN 65 typedef enum { SVP_ACL_AICORE_ARITHMETIC_UTILIZATION = 0, SVP_ACL_AICORE_NONE = 0xFF } svp_acl_prof_aicore_metrics; typedef struct svp_acl_prof_config svp_acl_prof_config; typedef struct svp_acl_prof_aicore_events svp_acl_prof_aicore_events; typedef struct svp_acl_prof_subscribe_config svp_acl_prof_subscribe_config; /** * @ingroup svp_acl * @brief profiling initialize * * @param result_path [IN] path of profiling result * @param length [IN] length of profilerResultPath * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval Other Values Failure * * @see svp_acl_prof_finalize */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_init(const char *result_path, size_t length); /** * @ingroup svp_acl * @brief profiling finalize * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval Other Values Failure * * @see svp_acl_prof_init */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_finalize(void); /** * @ingroup svp_acl * @brief Start profiling modules by profiler_config * * @param profiler_config [IN] config of profiling * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure * * @see svp_acl_prof_stop */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_start(const svp_acl_prof_config *profiler_config); /** * @ingroup svp_acl * @brief Create data of type svp_acl_prof_config * * @param device_id_list [IN] list of device id * @param device_nums [IN] number of devices * @param aicore_metrics [IN] type of aicore metrics * @param aicore_events [IN] pointer to aicore events, only support NULL now * @param data_type_config [IN] config modules need profiling * * @retval the svp_acl_prof_config pointer * * @see svp_acl_prof_destroy_config */ SVP_ACL_FUNC_VISIBILITY svp_acl_prof_config *svp_acl_prof_create_config(const uint32_t *device_id_list, uint32_t device_nums, svp_acl_prof_aicore_metrics aicore_metrics, const svp_acl_prof_aicore_events *aicore_events, uint64_t data_type_config); /** * @ingroup svp_acl * @brief Destroy data of type svp_acl_prof_config * * @param profiler_config [IN] config of profiling * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure * * @see svp_acl_prof_create_config */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_destroy_config(const svp_acl_prof_config *profiler_config); /** * @ingroup svp_acl * @brief stop profiling modules by stopProfilingConfig * * @param profiler_config [IN] pointer to stop config of profiling * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure * * @see svp_acl_prof_start */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_stop(const svp_acl_prof_config *profiler_config); /** * @ingroup svp_acl * @brief subscribe profiling data of model * * @param model_id [IN] the model id subscribed * @param subscribe_config [IN] pointer to config of model subscribe * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure * * @see svp_acl_prof_model_unsubscribe */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_model_subscribe(uint32_t model_id, const svp_acl_prof_subscribe_config *subscribe_config); /** * @ingroup svp_acl * @brief unsubscribe profiling data of model * * @param model_id [IN] the model id unsubscribed * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure * * @see svp_acl_prof_model_subscribe */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_model_unsubscribe(uint32_t model_id); /** * @ingroup svp_acl * @brief create subscribe config * * @param time_info_switch [IN] switch whether get time info from model * @param aicore_metrics [IN] aicore metrics * @param fd [IN] pointer to write pipe * * @retval the svp_acl_prof_subscribe_config pointer * * @see svp_acl_prof_destroy_subscribe_config */ SVP_ACL_FUNC_VISIBILITY svp_acl_prof_subscribe_config *svp_acl_prof_create_subscribe_config( int8_t time_info_switch, svp_acl_prof_aicore_metrics aicore_metrics, const void *fd); /** * @ingroup svp_acl * @brief destroy subscribe config * * @param subscribe_config [IN] subscribe config * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure * * @see svp_acl_prof_create_subscribe_config */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_destroy_subscribe_config( const svp_acl_prof_subscribe_config *subscribe_config); /** * @ingroup svp_acl * @brief create subscribe config * * @param op_desc_size [OUT] size of op desc * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_get_op_desc_size(size_t *op_desc_size); /** * @ingroup svp_acl * @brief get op number from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param op_number [OUT] op number of subscription data * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_get_op_num(const void *op_info, size_t op_info_len, uint32_t *op_number); /** * @ingroup svp_acl * @brief get length op type from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * @param op_type_len [OUT] actual length of op type string * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_get_op_type_len(const void *op_info, size_t op_info_len, uint32_t index, size_t *op_type_len); /** * @ingroup svp_acl * @brief get op type from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * @param op_type [OUT] obtained op type string * @param op_type_len [IN] obtained length of op type string * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_get_op_type(const void *op_info, size_t op_info_len, uint32_t index, char *op_type, size_t op_type_len); /** * @ingroup svp_acl * @brief get length op name from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * @param op_name_len [OUT] actual length of op name string * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_get_op_name_len(const void *op_info, size_t op_info_len, uint32_t index, size_t *op_name_len); /** * @ingroup svp_acl * @brief get op type from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * @param opName [OUT] obtained op name string * @param opNameLen [IN] obtained length of op name string * * @retval SVP_ACL_SUCCESS The function is successfully executed. * @retval OtherValues Failure */ SVP_ACL_FUNC_VISIBILITY svp_acl_error svp_acl_prof_get_op_name(const void *op_info, size_t op_info_len, uint32_t index, char *op_name, size_t op_name_len); /** * @ingroup svp_acl * @brief get start time of specified op from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * * @retval start time(us) of specified op with timestamp * @retval 0 for failed */ SVP_ACL_FUNC_VISIBILITY uint64_t svp_acl_prof_get_op_start(const void *op_info, size_t op_info_len, uint32_t index); /** * @ingroup svp_acl * @brief get end time of specified op from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * * @retval end time(us) of specified op with timestamp * @retval 0 for failed */ SVP_ACL_FUNC_VISIBILITY uint64_t svp_acl_prof_get_op_end(const void *op_info, size_t op_info_len, uint32_t index); /** * @ingroup svp_acl * @brief get excution time of specified op from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * @param index [IN] index of op array in op_info * * @retval execution time(us) of specified op with timestamp * @retval 0 for failed */ SVP_ACL_FUNC_VISIBILITY uint64_t svp_acl_prof_get_op_duration(const void *op_info, size_t op_info_len, uint32_t index); /** * @ingroup svp_acl * @brief get model id from subscription data * * @param op_info [IN] pointer to subscription data * @param op_info_len [IN] memory size of subscription data * * @retval model id of subscription data * @retval 0 for failed */ SVP_ACL_FUNC_VISIBILITY size_t svp_acl_prof_get_model_id(const void *op_info, size_t op_info_len, uint32_t index); #ifdef __cplusplus } #endif #endif /* SVP_ACL_PROF_H */