TVM Runtime base#
源码见:tvm/src/runtime/runtime_base.h
/*!
* \file runtime_base.h
* \brief Base of all C APIs
*/
#ifndef TVM_RUNTIME_RUNTIME_BASE_H_
#define TVM_RUNTIME_RUNTIME_BASE_H_
#include <tvm/runtime/c_runtime_api.h>
#include <stdexcept>
/*! \brief macro to guard beginning and end section of all functions */
#define API_BEGIN() try {
/*! \brief every function starts with API_BEGIN();
and finishes with API_END() or API_END_HANDLE_ERROR */
#define API_END() \
} \
catch (::tvm::runtime::EnvErrorAlreadySet & _except_) { \
return -2; \
} \
catch (std::exception & _except_) { \
return TVMAPIHandleException(_except_); \
} \
return 0; // NOLINT(*)
/*!
* \brief every function starts with API_BEGIN();
* and finishes with API_END() or API_END_HANDLE_ERROR
* The finally clause contains procedure to cleanup states when an error happens.
*/
#define API_END_HANDLE_ERROR(Finalize) \
} \
catch (::tvm::runtime::EnvErrorAlreadySet & _except_) { \
return -2; \
} \
catch (std::exception & _except_) { \
Finalize; \
return TVMAPIHandleException(_except_); \
} \
return 0; // NOLINT(*)
/*!
* \brief handle exception throwed out
* \param e the exception
* \return the return value of API after exception is handled
*/
int TVMAPIHandleException(const std::exception& e);
#endif // TVM_RUNTIME_RUNTIME_BASE_H_
这段代码是 C++ 头文件,它定义了一些宏和函数,用于处理 TVM 运行时 API 的异常情况。
首先,该头文件包含了一些必要的头文件:
<tvm/runtime/c_runtime_api.h>
:包含 TVM C API 的声明。<stdexcept>
:包含标准异常类的定义。
接下来,定义了两个宏:
API_BEGIN()
:用于标记函数开始执行的位置。在函数体中,使用try
块来捕获可能抛出的异常。API_END()
:用于标记函数结束执行的位置。在函数体中,使用catch
块来捕获特定的异常类型,并返回相应的错误码。如果没有捕获到任何异常,则返回0
表示成功。如果发生了EnvErrorAlreadySet
异常,则返回-2
;如果发生了其他类型的异常,则调用TVMAPIHandleException()
函数来处理异常并返回相应的值。
此外,还定义了宏 API_END_HANDLE_ERROR(Finalize)
,用于处理异常并在发生错误时执行清理操作。与 API_END()
类似,它也使用 try
和 catch
块来捕获异常,但在捕获到异常后,会先执行传入的 Finalize
参数所表示的清理操作,然后再调用 TVMAPIHandleException()
函数处理异常并返回相应的错误码。
最后,定义了函数 TVMAPIHandleException()
,用于处理异常。它接受 std::exception
类型的参数,并返回整数值,表示 API 执行后的返回值。