精彩文章免费看

浅尝ncnn优化&&vulkan api的应用

vulkan 的显存管理

一个 VkBuffer 对象,多个 offset

  • 使用同一块 VkBuffer 存储中间层的特征数据,不同的 blob 使用不同的 offset 进行区分 。
  • 原因:有些驱动需要对 GLSL 或者 SPIR-V 的源代码进行特殊的处理,所以只能采用运行时编译
  • 好处:不需要在离线时编译多个 SPIR-V 的二进制文件,减少二进制文件的体积。
  • Swiftshader

    swiftshader项目地址 :google在cpu上实现 vulkan驱动 的项目,可以实现在cpu上执行vulkan的代码,可以保证每次代码运行结果都是一致的。

    复用 VkPipeline 和相关的 vulkan object
  • 模型加载的时候, 特别是第一次加载模型的时候,由于没有离线的cache和优化的手段, pipeline的编译是一个十分耗时的操作。
  • 有些模型层的参数( kernal size , stride )是一样的。 ncnn 在运行时就将 层的参数 vulkan对象 的关系记录下来,当遇到具有相同参数层的时候,就可以直接复用之前创建好的 vulkan对象 ,这样可以显著降低第一次加载模型的耗时。
  •