C++构建跨平台引擎调研及总结

1. 引言

前引擎跨平台开发流程:

1. Windows端使用VS进行开发,使用VS打包dll供第三方调用

2. Android端使用AS进行开发,使用NDK + CMake方式打包so动态链接库供第三方集成

3. IOS端使用Mac Xcode进行开发,使用Xcode打包为.a/framework 供第三方集成

4. Linux端使用CLion CMake进行开发,使用CMake打包为so动态链接库供第三方调用

总而言之,不同操作系统使用的开发工具IDE不尽相同,而且我们需要为每个平台都创建一层引擎源码,无论是开发还是编译,都非常繁琐,牵一发而动全身。可否考虑使用统一的代码对之进行合并,实现 "write once,run everywhere" 呢?

因此我们对市场上开源的C++引擎进行了调研,希望从中借鉴经验。

2. 开源引擎框架调研

2.1 ncnn

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。 ncnn 从设计之初深刻考虑手机端的部署和使用。 无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。 基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行, 开发出人工智能 APP,将 AI 带到你的指尖。 ncnn 目前已在腾讯多款应用中使用,如:QQ,Qzone,微信,天天 P 图等。

我们首先观察了下ncnn的跨平台的方式,ncnn使用CMake进行跨平台:

1. 使用CMake + C++ 方式开发跨平台引擎

2. 使用CMake + toolchains 方式控制不同平台、操作系统的库编译

3. 代码层面使用不同操作系统的宏定义,实现代码编译的选择

2.2 tnn

TNN:由腾讯优图实验室开源的高性能、轻量级神经网络推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时借鉴了业界主流开源框架高性能和良好拓展性的特性,拓展了对于后台X86, NV GPU的支持。手机端 TNN已经在手机QQ、微视、P图等众多应用中落地,服务端TNN作为腾讯云AI基础加速框架已为众多业务落地提供加速支持。欢迎大家参与协同共建,促进TNN推理框架进一步完善。

TNN则是使用Bash、Bat脚本的方式对引擎进行编译。

1. 脚本中控制环境变量,脚本内部使用CMake、Xcodebuild进行跨平台编译

2. 代码层面使用不同操作系统的宏定义,实现代码编译的选择

2.3 总结

1. 理论上CMake支持所有跨平台操作系统;但是这种方式需要开发者对CMake使用掌握较高(熟悉各类CMake编译选项,如VS编译选项转CMake、Xcode编译优化选项转CMake等),其次是该种方式不利于开发者使用IDE对源码进行调试;如果项目成熟,仅是为了编译引擎,我们可以考虑使用该种方式。

2. 使用脚本的方式,本质上也是使用CMake以及专用编译工具链进行操作,同样无法进行项目调式等。

3. C++引擎构建方案

3.1 工程目录结构

├── include # 供给调用者的头文件
├── src # SDK引擎源码
├── scripts # 各跨平台项目工程文件夹
│   ├── IOS # xcode项目文件夹,可以编译源码及Demo
│   ├── Linux_x86_64 # CLion项目文件夹,可以编译源码及Demo
│   └── Android # 项目文件夹,编译源码及Demo
├── third_party # 依赖的第三方库
│   └── Linux_x86_64 # Linux操作系统
├── need_environment # 其他需要使用的资源文件(如模型权重等)
├── doc # 相关文档目录
└── README.md # 说明文档

如上图所示:

1. include 目录包含了用于保留需要暴露给调用者的头文件

2. src 目录则是SDK引擎的源码目录,里面没有可执行的main函数,也无相应的Demo

3. scripts 目录包括个各个平台下面的工程文件夹,每个文件夹都是一个项目工程,可以使用不同的IDE打开(Xcode,CLion,VS等)

4. third_party存放引擎依赖的第三方库

5. doc为说明文档等目录

4. 参考

iOS 使用 Cmake 生成 framework 库 - 简书

工程构建(2)--设计跨平台服务器框架 - 哔哩哔哩

GitHub - Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform

https://github.com/Tencent/ncnn/wiki/how-to-build#pass-for-linux

https://github.com/Tencent/TNN

https://github.com/Tencent/TNN/tree/master/scripts

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值