美文网首页GammaPerfMac 环境搭建
基于 mac 的 ncnn vulkan iOS集成参考

基于 mac 的 ncnn vulkan iOS集成参考

作者: Chriszzzz | 来源:发表于2019-04-04 15:11 被阅读0次

1 测试结果

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

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

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

2 工程参考

https://github.com/chrisYooh/ncnnSrcDemo
其下有3个工程:

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

比如:1.1.106.0版本:编译ncnn使用
下载地址:https://vulkan.lunarg.com/sdk/home#mac

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源码地址

https://github.com/Tencent/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行代码,头文件包含<ncnn/Net> 直接搞定
云里雾里?直接去第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 的 ncnn vulkan iOS集成参考

    本文链接:https://www.haomeiwen.com/subject/cjlzbqtx.html