1 測試結果
總體上悦穿,截止至發(fā)文日(4月4日 星期四……好日子……)ncnn在iOS上的vulkan支持效果還不盡理想巩趁,vulkan版本的執(zhí)行速度有至少20%的下降堤器。(僅僅是我的測試結果谨胞,不排除有我的測試方式不理想的可能扎阶,不過官方也有聲明洛姑,現(xiàn)在的vulkan優(yōu)化還不完善上沐,如下圖)
不過毋庸置疑的是:提前熟悉一下集成流程不會有什么壞處的~
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
Tips:
1 不需要下載MoltenVK的源碼自己編譯(當然你想也可以)
2 你會發(fā)現(xiàn)MoltenVK/iOS/framework下的Framework只支持arm64平臺净宵,沒錯,MoltenVK在iOS上只支持arm64裹纳。
3.2 編譯ncnn
倪神 更新過ncnn代碼后在mac的編譯還蠻順利的择葡,只需要下載ncnn的源碼按照提示編譯即可
3.2.1 ncnn源碼地址
https://github.com/Tencent/ncnn
3.2.2 在MacOSX上編譯iOS ncnn
進入上面的源碼地址后,往下來剃氧,就看到了【HowTo】一節(jié)敏储,
選擇【Build for iOS on MacOSX with xcode】即有詳細說明。
當然她我,我都寫簡書了虹曙,你可以選擇不看“她”的!(這個“她”頗有深意啊哈哈……)
3.2.3 vulkan ncnn 編譯腳本參考
對番舆,不用看她的酝碳,在ncnn源碼工程的根目錄下創(chuàng)建build_ios_vulkan.sh文件,然后文件內容按下面代碼的填寫恨狈,一個vulkan的ncnn ios framework的編譯腳本 就完成了疏哗。
運行腳本,會在ncnn源碼工程的根目錄下生成ncnn.framework禾怠。
7捣睢!吗氏!腳本要修改兩個路徑哦Q科!弦讽!
-DVulkan_LIBRARY
-DVulkan_INCLUDE_DIR
對應的路徑改為你的 vulkansdk 對應的絕對路徑
vulkansdk-macos-1.1.106.0 即為 你在3.1節(jié)下載的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
3.3.2 framework集成
Link Frameworks and Libraries添加:
ncnn.framework
MoltenVK.framework
3.4 ncnn 開啟vulkan功能
其實就2行代碼污尉,頭文件包含<ncnn/Net> 直接搞定
云里霧里膀哲?直接去第2節(jié)下載源碼看一看吧。
// 初始化gpu
ncnn::destroy_gpu_instance();
// 設置網(wǎng)絡支持vulkan
ncnn_net.use_vulkan_compute = 1;
4 結語與展望
至此被碗,我們完成了ncnn 的 vulkan 版本在iOS的集成某宪,雖然現(xiàn)在的優(yōu)化效果不僅理想。但考慮到vulkan在mac端的支持也才僅僅2锐朴、3個月兴喂,我們有理由為ncnn vulkan版本之后的優(yōu)化速度報以信心。
為倪神打Call吧焚志!