1 测试结果

总体上,截止至发文日(4月4日 星期四……好日子……)ncnn在iOS上的vulkan支持效果还不尽理想,vulkan版本的执行速度有至少20%的下降。(仅仅是我的测试结果,不排除有我的测试方式不理想的可能,不过官方也有声明,现在的vulkan优化还不完善,如下图)

ncnn vulkan集成后速度变慢的官方说明.png

不过毋庸置疑的是:提前熟悉一下集成流程不会有什么坏处的~

2 工程参考

1)NcnnSrcDemo

将ncnn(非vulkan支持版本)直接以 源码方式 集成,可打断点调试。

2)NcnnSrcDemo_MoltenVK

将ncnn(vulkan版本)直接以 源码方式 集成,可打断点调试。

ncnn源码对应提交号:c778265(源码有小幅vulkan无关改动)

3)NcnnFrmDemo_MoltenVK

将ncnn(vulkan版本)以 Framework的方式 集成,不可调试ncnn源码,仅做工程配置参考。

ncnn源码对应提交号:c778265(源码有小幅vulkan无关改动)

3 集成步骤(先练习一下吧!19.05.24. 更新)

3.1 下载最新的VulkanSDK

vulkanSDK下载参考.png

Tips:

1 不需要下载MoltenVK的源码自己编译(当然你想也可以)

2 你会发现MoltenVK/iOS/framework下的Framework只支持arm64平台,没错,MoltenVK在iOS上只支持arm64。

只支持arm64原来是Metal的锅.png

3.2 编译ncnn

倪神 更新过ncnn代码后在mac的编译还蛮顺利的,只需要下载ncnn的源码按照提示编译即可

3.2.1 ncnn源码地址

3.2.2 在MacOSX上编译iOS ncnn

进入上面的源码地址后,往下来,就看到了【HowTo】一节,

选择【Build for iOS on MacOSX with xcode】即有详细说明。

当然,我都写简书了,你可以选择不看“她”的!(这个“她”颇有深意啊哈哈……)

ncnn git readme节选.png

3.2.3 vulkan ncnn 编译脚本参考

对,不用看她的,在ncnn源码工程的根目录下创建build_ios_vulkan.sh文件,然后文件内容按下面代码的填写,一个vulkan的ncnn ios framework的编译脚本 就完成了。

运行脚本,会在ncnn源码工程的根目录下生成ncnn.framework。

!!!脚本要修改两个路径哦!!!

-DVulkan_LIBRARY

-DVulkan_INCLUDE_DIR

对应的路径改为你的 vulkansdk 对应的绝对路径

vulkansdk-macos-1.1.106.0 即为 你在3.1节下载的vlukan SDK

#!/bin/sh

# Build For iphoneOS

rm -rf build-ios-vulkan

mkdir build-ios-vulkan

cd build-ios-vulkan

cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake \

-DIOS_PLATFORM=OS \

-DENABLE_BITCODE=0 \

-DIOS_ARCH="arm64" \

-DVulkan_LIBRARY=/Users/chris/Documents/Software/vulkansdk/vulkansdk-macos-1.1.106.0/MoltenVK/iOS/dynamic/libMoltenVK.dylib \

-DVulkan_INCLUDE_DIR=/Users/chris/Documents/Software/vulkansdk/vulkansdk-macos-1.1.106.0/MoltenVK/include \

-DNCNN_VULKAN=ON ..

make -j8

make install

cd ../

# Combine Framework

rm -rf ncnn.framework

mkdir -p ncnn.framework/Versions/A/Headers

mkdir -p ncnn.framework/Versions/A/Resources

ln -s A ncnn.framework/Versions/Current

ln -s Versions/Current/Headers ncnn.framework/Headers

ln -s Versions/Current/Resources ncnn.framework/Resources

ln -s Versions/Current/ncnn ncnn.framework/ncnn

lipo -create \

build-ios-vulkan/install/lib/libncnn.a \

-o ncnn.framework/Versions/A/ncnn

cp -r build-ios-vulkan/install/include/* ncnn.framework/Versions/A/Headers/

cp Info.plist ncnn.framework/Versions/A/Resources/

3.3 集成工程

3.3.1 Search Path Setting

Framework Search Path 添加:

[路径前缀]/vulkansdk-macos-1.1.106.0/MoltenVK/iOS/framework

Head Search Path 添加:

[路径前缀]/vulkansdk-macos-1.1.106.0/MoltenVK/include

修改成你的vulkan-sdk的文件夹名

3.3.2 framework集成

Link Frameworks and Libraries添加:

ncnn.framework

MoltenVK.framework

image.png

3.4 ncnn 开启vulkan功能

其实就2行代码,头文件包含 直接搞定

云里雾里?直接去第2节下载源码看一看吧。

// 初始化gpu

ncnn::destroy_gpu_instance();

// 设置网络支持vulkan

ncnn_net.use_vulkan_compute = 1;

ncnn原版vulkan开启说明.png

4 结语与展望

至此,我们完成了ncnn 的 vulkan 版本在iOS的集成,虽然现在的优化效果不仅理想。但考虑到vulkan在mac端的支持也才仅仅2、3个月,我们有理由为ncnn vulkan版本之后的优化速度报以信心。

为倪神打Call吧!

mac vulkan_基于 mac 的 ncnn vulkan iOS集成参考相关推荐

  1. cisco 2960 VLAN MAC_华为网络初级工程师快速掌握基于MAC地址的VLAN划分实用收藏

    点上方蓝字关注公众号 学网络,就在IE-LAB 国内最著名的高端网络工程师培养基地 HCIA DATCOM基础入门技术基于MAC地址的VLAN划分 基于mac 地址VLAN划分方式,是一种动态的VLA ...

  2. 基于Mac自带nginx、php,配置php服务器

    这里基于Mac( MacOS 10.14.0 )自带的nginx (1.12.0)和php (PHP 7.1.23),主要有以下几个方面: php-fpm 配置 nginx 配置 php-fpm/ng ...

  3. 实战 MDT 2012(六)---基于MAC地址的部署

    转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://jqq1982.blog.51cto.com/515663/1123289 基于MAC地址的部署需要S ...

  4. mac 下基于firebreath 开发多浏览器支持的浏览器插件

    mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...

  5. linux构建基于mac的vlan,通过CLI配置交换机的基于MAC的VLAN组

    通过CLI配置交换机的基于MAC的VLAN组 Introduction 虚拟局域网逻辑上允许您对网段A区域网(LAN)到不同的广播域.在敏感数据可能是在网络的广播的方案中, VLAN可以通过选定广播创 ...

  6. vlan划分_基于MAC地址划分VLAN配置示例

    1.组网需求 图1 配置基于MAC地址的VLAN划分组网图 如上图1所示,某个公司的网络中,网络管理者将同一部门的员工划分到同一VLAN.为了提高部门内的信息安全,要求只有本部门员工的PC才可以访问公 ...

  7. 新华三交换机基于MAC的vlan划分

    前景提示: 经常会有这样的案例, 一会议室内只有一条网线且这条网线接入了交换机的D1/0/41端口,财务部(vlan10),行政部(vlan20)携带笔记本来开会,我们希望财务部能获取到192.168 ...

  8. 玩转华为数据中心交换机系列 | 配置基于MAC地址划分VLAN示例

    素材来源:华为数据中心交换机配置指南 一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:玩转华为数据中心交换机系列 | 汇总_COCOgsta的博客-CSDN博客 组网需求 某 ...

  9. 破解路由器基于MAC地址过滤策略的方法

    众所周知,路由器可通过设置MAC地址过滤策略来限制上网设备.而MAC地址又是全球唯一的,如笔记本网卡的MAC地址在出厂时就被烧入了一串独一无二的数字(如97-AB-DE-23-45-67),既然MAC ...

  10. Mac是不是基于Linux系统开发?

    程序员在使用中,常常会觉得MacOS和Linux很相似,特别是命令行的操作.所以很多人认为MacOS基于Linux开发的,也许是Linux的一个发行版. 但事实上,目前的MacOS是基于 NeXTst ...

最新文章

  1. Java中线程池ThreadPoolExecutor原理探究
  2. python坐标点怎么输入_python导入坐标点的具体操作
  3. python with方法
  4. [蓝桥杯][2014年第五届真题]排列序数(思维)
  5. 公有云与私有云的差别(转)
  6. IOS 开发 UIProgress 和 UISlidre 进度条和滑动条组件
  7. p2psearcher2013其中
  8. python如何画出多个独立的图使用turtle_从选项列表一次绘制多个形状(Python-Turtle图形)?...
  9. git(2)---git 分布式版本控制系统
  10. 经典书单 —— 人文社科
  11. Windows11 配置 java 8.0 环境变量
  12. 如何用VC 2005打开VC 2008的工程
  13. Ubuntu 查看分区的磁盘格式
  14. win7计算机ip地址怎么查,win7电脑的IP地址怎样查看
  15. miui系统备份恢复失败(一招解决,,无需技术也行)
  16. CMMI(能力成熟度集成)四个等级
  17. java丐帮_java多线程学习笔记(四)
  18. 【计算机网络】思科实验(8):网络地址转换之路由器动态NAT模拟
  19. 创客学院9天C语言二
  20. 2021年程序员薪资和生活现状调查,就等你的参与了!

热门文章

  1. python水仙花数判断程序
  2. bsvadvaanjalvsc
  3. php对接易宝支付实现真实交易
  4. 笔记《深入浅出数据分析》上
  5. 如何卸载红蜘蛛多媒体网络教室软件
  6. 基于web的电影院订票系统(毕设系统,到手可用)
  7. word 2007导出pdf格式(含下载地址)
  8. 7.15 NOIP 2013
  9. 20 个前端练手项目合集
  10. Windows 10 程序员计算器 HEX,DEC,OCT,BIN 的含义