onnxruntime源码解析之C接口简介
一、C接口
1. 简介
其他语言的接口都是在C接口的基础上,进一步的封装。
C的接口头文件为:onnxruntime_c_api.h
头文件内包含了详细的注释和说明。
总体上,除了一些数据结构的定义,C API 函数封装在如下结构体内,
struct OrtApi {
// 其中包含了一些函数指针,如下所示,
OrtStatus*(ORT_API_CALL* CreateStatus)(OrtErrorCode code, \
_In_ const char* msg)NO_EXCEPTION ORT_ALL_ARGS_NONNULL;
// ...
}
OrtApi的使用方式,一般是定义全局的指针OrtApi* g_ort;
然后,通过OrtGetApiBase()->GetApi(ORT_API_VERSION)获得struct Api*。
#include "onnxruntime_c_api.h"
OrtApi* g_ort = nullptr; int main() {
g_ort = OrtGetApiBase()->GetApi(ORT_API_VERSION);
return 0;
}
ORT_API_VERSION是头文件中定义的全局的宏,必须与链接的libonnxruntime.so内的相同。否则,会发生运行时的错误。
这里的函数OrtGetApiBase()->GetApi每次返回的指针,是相同的。因此,可以定义全局指针g_ort,方便后续调用OrtApi内的函数指针。
调用函数指针的方式,与C++普通成员函数类似。唯一的差别是,C++成员函数的第一个参数是this指针。
2. Api定义方式
struct OrtApi结构体内的函数指针定义,包含了大量的注释和宏。
大体上容易阅读的,需要注意的是很多宏仅仅是说明的作用,并没有生成二进制代码。
例如,
// 这些宏仅仅用作说明,函数参数的意义。
// 用来标志参数是输入还是输出,等等。
#define _In_
#define _In_z_
#define _In_opt_
#define _In_opt_z_
#define _Out_
#define _Outptr_
#define _Out_opt_
以一个struct OrtApi内的实际函数接口为例,
ORT_API2_STATUS(CreateEnv, OrtLoggingLevel log_severity_level, _In_ const char* logid, \
_Outptr_ OrtEnv** out); // 这里的ORT_API2_STATUS是个宏,展开后,如下所示, _Check_return_ _Ret_maybenull_ OrtStatusPtr(ORT_API_CALL* CreateEnv)(OrtLoggingLevel log_severity_level, \
const char* logid, OrtEnv** out) NO_EXCEPTION ORT_MUST_USE_RESULT; // 上面实际上定义了一个函数指针(* CreateEnv),返回值是OrtStatusPtr
// 输入是(OrtLoggingLevel log_severity_level, const char* logid, OrtEnv** out)
// 其他下线开头的字符串,以及ORT_API_CALL
// 是一些说明性的宏,NO_EXCEPTION/ORT_MUST_USE_RESULT在不同平台下,不同的编译选项,有相对性的功能。
上述函数指针的调用方式是,
OrtEnv* my_ort_env;
auto current_ort_status = g_ort->CreateEnv(my_log_level, \
"my_log_id", &my_ort_env);
onnxruntime源码解析之C接口简介的更多相关文章
- identityserver4源码解析_2_元数据接口
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4 ...
- identityserver4源码解析_3_认证接口
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4 ...
- Spring源码解析 - AbstractBeanFactory 实现接口与父类分析
我们先来看类图吧: 除了BeanFactory这一支的接口,AbstractBeanFactory主要实现了AliasRegistry和SingletonBeanRegistry接口. 这边主要提供了 ...
- 开源地图SharpMap源码解析-(1)简介
1.简介 SharpMap最新版基于.NET Framework 4,采用C#开发的地图渲染引擎,非常易于使用.我这次研究的是比较稳定发布的V1.1版本.可以在GitHub下载该源码,地址:https ...
- Java基础——集合源码解析 List List 接口
今天我们来学习集合的第一大体系 List. List 是一个接口,定义了一组元素是有序的.可重复的集合. List 继承自 Collection,较之 Collection,List 还添加了以下操作 ...
- 【Dubbo 源码解析】01_Dubbo 设计简介
Dubbo 设计简介 Dubbo 采用 Microkernel + Plugin (微内核 + 插件)模式,Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的 ...
- IdentityServer4源码解析_4_令牌发放接口
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4 ...
- IdentityServer4源码解析_5_查询用户信息接口
协议简析 UserInfo接口是OAuth2.0中规定的需要认证访问的接口,可以返回认证用户的声明信息.请求UserInfo接口需要使用通行令牌.响应报文通常是json数据格式,包含了一组claim键 ...
- AspNetCore3.1_Secutiry源码解析_8_Authorization_授权框架
目录 AspNetCore3.1_Secutiry源码解析_1_目录 AspNetCore3.1_Secutiry源码解析_2_Authentication_核心流程 AspNetCore3.1_Se ...
- IdentityServer4源码解析_1_项目结构
目录 IdentityServer4源码解析_1_项目结构 IdentityServer4源码解析_2_元数据接口 IdentityServer4源码解析_3_认证接口 IdentityServer4 ...
随机推荐
- Object.assgin基本知识与相关深浅拷贝
一.关于Object.assgin()基本知识 概念 Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. 理解 对象的属性分为可枚举和不 ...
- WPF里面触发器
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- Mysql数据库基础第七章:流程控制结构
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- CSS:布局篇_用flex布局实现两边顶宽中间自适应(圣杯布局&双飞翼布局)
CSS:布局篇_用flex布局实现两边顶宽中间自适应(圣杯布局&双飞翼布局) <!DOCTYPE html> <html> <head> <title ...
- Mysql优化工具
https://blog.csdn.net/qq_29229567/article/details/106241831
- [JavaScript]对象数组 - 不完全整理
对象数组中查询属性为某个值的对象,使用Array.find() const array1 = [5, 12, 8, 130, 44]; const found = array1.find(elemen ...
- RabbitMQ的安装(linux版)
原文地址:https://blog.csdn.net/jiguquan3839/article/details/91346261 注意:在web管理页面登录提示"User can only ...
- 在sublime text 3中编译javascript
1.整理步骤: 1).安装node.js: 2).配置js编译系统: 2.过程 1).先是按照网上的方法,在配置的时候输入如下内容: {"cmd": ["node&quo ...
- Thread记录
项目用到了线程 所以写出来留作以后复习线程Thread类包含在System.Threading命名空间有关线程的操作主要包含在这个类中现在总结一下Thread的常用方法和属性 Start([参数])/ ...
- Nextcloud报 PHP zip 模块未安装
wget https://pecl.php.net/get/zip自动下载最新包 tar xf zip-1.20.0.tgz cd zip-1.20.0/ phpize 报错system libzip ...