Qualcomm® AI Engine Direct 使用手册(14)

150 篇文章 9 订阅
50 篇文章 0 订阅

Qualcomm® AI Engine Direct 使用手册(14)


5.1.4 QNN Converter Op 包代码生成

qnn-op-package-generator生成用于创建 QNN 转换器 op 包共享库的框架代码和 makefile。qnn-op-package-generator将 XML 配置作为输入,描述包属性以及指定是否生成转换器 op 包并生成 QNN 转换器 op 包目录结构的–converter_op_pacakge或选项。-cop

笔记
qnn-op-package-generator使用–converter_op_pacakge或选项执行-cop除了 QNN op 包之外还会创建 Converter op 包。生成的 Converter op 包的名称将为 QNN op 包名称附加字符串Converter_Op_Package。

  1. 创建 Converter op 包骨架

    笔记
    这些说明假定已遵循一般设置说明1qnn-op-package-generator并且 可通过命令行访问。

    1. 定义 XML OpDef 配置。该操作定义 XML 描述了包信息,如名称、版本、域。有关 XML 架构的更多信息,请参阅XML OpDef 架构细分。
      示例配置也可以在XML Op Def 配置示例和 SDK 中找到:

      ${QNN_SDK_ROOT}/examples/QNN/OpPackageGenerator
      
      

      笔记
      用于生成 QNN 转换器 op 包的 XML 配置与 QNN op 包生成中使用的 XML 配置相同

      1. –config_path运行 qnn-op-package-generator 工具并使用or-p选项和 --converter_op_pacakgeor选项传递 XML 配置-cop。
      qnn-op-package-generator -p <QNN_SDK_ROOT>/examples/QNN/OpPackageGenerator/ReluOpPackageCpu.xml -cop -o <output_dir>
      
      

      此命令创建一个名为ReluOpPackage的 op 包和一个名为ReluOpPackage_Converter_Op_Package的转换器 op 包。2

      笔记
      可以多次指定-p命令行选项以生成不同的包,前提是每个包名称不同。如果包名称不明确,该工具会将每个配置中定义的所有操作合并到单个包目录中。

      目录结构
      包目录树显示并解释如下:

      |-- Makefile
      |-- ConverterOpPackage
          |-- ConverterOpPackage.cpp
          `-- Makefile.linux-x86_64
      

      Makefile:包含为 x86 目标编译包源文件的 make 目标和规则。

      ConverterOpPackage:包含为配置和目标特定 makefile 中定义的所有操作生成的源文件。

      笔记
      转换器op包必须在linux-86_64平台上生成和编译。

  2. 实现骨架代码

    • Op 源文件 - ConverterOpPackage.cpp
      源文件包含应由用户完成的空函数体。本节中使用的代码引用了目录结构中生成的包。下面的示例突出显示了示例配置中定义的 Relu 操作的输出。
      以下自动生成的代码包含一个结构体,该结构体采用 Qnn_OpConfig_t 类型的 opConfig 作为其参数。OpConfig 是用于存储和检索输入、输出和参数的操作配置。
       1EXPORT_API Qnn_ErrorHandle_t ReluShapeInference(Qnn_OpConfig_t *opConfig) {
       2
       3/**
       4* Add code here
       5**/
       6
       7return QNN_SUCCESS;
       8}
       9
      10Qnn_ErrorHandle_t (*RelushapeInferencePtr)(Qnn_OpConfig_t *)  = &ReluShapeInference;
      
      通过使用 opConfig 实现填充输出形状的逻辑并添加任何必要的验证来完成该功能。该函数由转换器关联的函数指针调用
  3. 为 x86 目标编译包

    1. 设置 QNN 环境。

      $ source <QNN_SDK_ROOT>/bin/envsetup.sh
      
    2. x86 所需:确保 clang 编译器位于您的路径中,或将 CXX 设置为指向有效的编译器路径。[3]_

    3. 编译 x86 目标的包:

      make cpu
      or
      make cpu_x86
      

这将在<current_dir>/<package_name>_Converter_Op_Package/ConverterOpPackage/lib.so处创建共享库

笔记
步骤 ab 也可以在 makefile 中手动设置,或者作为命令行选项来 make,而无需使用脚本。

1
有关 QNN 工具设置的说明,请参阅设置。

2
如果该目录已存在,该工具将仅生成新文件并尝试附加到现有文件。要强制生成新包,请使用–force- Generation选项。

3
如果不存在,脚本 <QNN_SDK_ROOT>/bin/check-linux-dependency.sh 也可用于下载适当的 clang 版本。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值