/** * Copyright 2019-2020 Huawei Technologies Co., Ltd * * 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. */ #ifndef MSPROF_ENGINE_PROF_ACL_API_H_ #define MSPROF_ENGINE_PROF_ACL_API_H_ #define MSVP_MAX_DEV_NUM 64 #define MSVP_PROF_API __attribute__((visibility("default"))) // DataTypeConfig #define PROF_ACL_API 0x0001 #define PROF_TASK_TIME 0x0002 #define PROF_AICORE_METRICS 0x0004 #define PROF_AICPU_TRACE 0x0008 #define PROF_MODEL_EXECUTE 0x0010 #define PROF_RUNTIME_API 0x0020 #define PROF_RUNTIME_TRACE 0x0040 #define PROF_SCHEDULE_TIMELINE 0x0080 #define PROF_SCHEDULE_TRACE 0x0100 #define PROF_AIVECTORCORE_METRICS 0x0200 #define PROF_SUBTASK_TIME 0x0400 #define PROF_TRAINING_TRACE 0x0800 #define PROF_HCCL_TRACE 0x1000 #define PROF_DATA_PROCESS 0x2000 #define PROF_TASK_TRACE 0x3842 #define PROF_MODEL_LOAD 0x8000000000000000 // DataTypeConfig MASK #define PROF_ACL_API_MASK 0x0001 #define PROF_TASK_TIME_MASK 0x0002 #define PROF_AICORE_METRICS_MASK 0x0004 #define PROF_AICPU_TRACE_MASK 0x0008 #define PROF_MODEL_EXECUTE_MASK 0x0010 #define PROF_RUNTIME_API_MASK 0x0020 #define PROF_RUNTIME_TRACE_MASK 0x0040 #define PROF_SCHEDULE_TIMELINE_MASK 0x0080 #define PROF_SCHEDULE_TRACE_MASK 0x0100 #define PROF_AIVECTORCORE_METRICS_MASK 0x0200 #define PROF_SUBTASK_TIME_MASK 0x0400 #define PROF_TRAINING_TRACE_MASK 0x0800 #define PROF_HCCL_TRACE_MASK 0x1000 #define PROF_DATA_PROCESS_MASK 0x2000 #define PROF_MODEL_LOAD_MASK 0x8000000000000000 #include #include /** * @name ProrErrorCode * @brief error code enum of prof_acl_apis */ enum ProfErrorCode { PROF_ERROR_NONE = 0, // ok PROF_ERROR_PARAM_INVALID, // param invalid, for example nullptr PROF_ERROR_REPEAT_INIT, // profiling has already been inited PROF_ERROR_CONFIG_INVALID, // config invalid, for example invalid json string PROF_ERROR_DIR_NO_ACCESS, // dir is not accessable PROF_ERROR_FAILURE, // failed to init or start profiling PROF_ERROR_NOT_INITED, // profiling has not been inited PROF_ERROR_DEVICE_INVALID, // device id invalid PROF_ERROR_UNSUPPORTED, // unsupported data type or ai core metrics PROF_ERROR_REPEAT_START, // profiilng has already been started PROF_ERROR_NOT_STARTED, // profiling has not been started }; /** * @brief transfer profiling config in acl.json to sample config * @param aclCfg [IN] profiling json string from acl.json as {"switch":"on", "result_path":"/home",...} * @param sampleCfg [OUT] json string for GE as {"startCfg":[{"deviceID":"all","jobID":"1234",...}]} * @return ProfErrorCode */ MSVP_PROF_API int32_t ProfAclCfgToSampleCfg(const std::string &aclCfg, std::string &sampleCfg); /** * @name ProfInit * @brief init profiling * @param profInitCfg [IN] config of init profiling of json format * @return ProfErrorCode */ MSVP_PROF_API int32_t ProfInit(const std::string &profInitCfg); /** * @name ProfAicoreMetrics * @brief aicore metrics enum */ enum ProfAicoreMetrics { PROF_AICORE_ARITHMATIC_THROUGHPUT = 0, PROF_AICORE_PIPELINE = 1, PROF_AICORE_SYNCHRONIZATION = 2, PROF_AICORE_MEMORY = 3, PROF_AICORE_INTERNAL_MEMORY = 4, PROF_AICORE_STALL = 5, PROF_AICORE_EVENT = 255 }; /** * @name ProfConfig * @brief struct of ProfStart */ struct ProfConfig { uint32_t devNums; // length of device id list uint32_t devIdList[MSVP_MAX_DEV_NUM]; // physical device id list ProfAicoreMetrics aicoreMetrics; // aicore metric uint64_t dataTypeConfig; // data type to start profiling }; /** * @name ProfStartProfiling * @brief start profiling * @param profStartCfg [IN] config to start profiling * @return ProfErrorCode */ MSVP_PROF_API int32_t ProfStartProfiling(const ProfConfig *profStartCfg); /** * @name ProfStopConfig * @brief struct of ProfStop */ struct ProfStopConfig { uint64_t padding; }; /** * @name ProfStopProfiling * @brief stop profiling * @param profStopCfg [IN] config to stop profiling * @return ProfErrorCode */ MSVP_PROF_API int32_t ProfStopProfiling(const ProfConfig *profStopCfg); /** * @name ProfFinalize * @brief finalize profiling task * @return ProfErrorCode */ MSVP_PROF_API int32_t ProfFinalize(); /** * @name ProfGetDataTypeConfig * @brief get dataTypeConfig started with of one device * @param deviceId [IN] deviceId to get dataTypeConfig * @param dataTypeConfig [OUT] result get * @return ProfErrorCode */ MSVP_PROF_API int32_t ProfGetDataTypeConfig(uint32_t deviceId, uint64_t &dataTypeConfig); #endif // MSPROF_ENGINE_PROF_ACL_API_H_