开发者
资源
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

单文件扫描模式使用场景(x86 Intel intrinsics分析)

用户可以通过在命令./tiancheng之后,添加“--enable-intel-intrinsics”参数的方式,启用x86 Intel intrinsics分析功能,分析源码文件中的x86向量化指令,实现对x86向量化代码的改写。

火焰图扫描模式和函数扫描模式也支持启用x86 Intel intrinsics分析功能,此示例以扫描单个源码文件时启用x86 Intel intrinsics分析功能为例。

前提条件

以天秤源码优化工具安装路径“/home/tiancheng-x.x.x-Linux-Kunpeng”为例。

x86 Intel intrinsics分析使用示例

  1. 执行以下命令,启用x86 Intel intrinsics分析功能,对源码文件进行扫描。此处以扫描“/home/demo”下的input.cpp文件中所有源码,报告文件存放至“/home/demo”路径为例,请根据实际情况进行修改。
    ./tiancheng --enable-intel-intrinsics -i /home/demo/input.cpp -o /home/demo -r /path/to/code_project
    • 执行上述命令会启用x86 Intel intrinsics分析功能,对“/home/demo”下的源码文件进行扫描,分析源码文件中的x86向量化指令,在“/home/demo”路径下生成向量化检查报告和JSON报告文件。最后指定项目根目录“/path/to/code_project”,可以避免头文件缺失。
    • 向量化检查报告包含向量化检查信息和分析过程,当启用x86 Intel intrinsics分析功能时报告中才有函数向量化检查报告,不启用时报告中只有循环向量化检查报告。
    • JSON报告文件为源码优化建议报告文件,其字段说明请参见表1

    返回的部分信息如下:

    Successfully generated vectorization report: /home/demo/Vectorization_Source_20260527_094859_372_8895.html
    Successfully generated vectorization optimization result: /home/demo/Vectorization_Optimization_Result_20260527_094859_372_8895.json
  2. 打开生成的向量化检查报告,查看向量化检查信息。报告内容包括循环向量化检查报告、函数向量化检查报告和任务信息。
  3. 单击“循环向量化检查报告”展示循环检查结果,具体内容如下图所示。

    表1 报告结果参数说明

    参数

    说明

    循环向量化统计结果

    总循环数量

    源码文件中扫描出的循环总数。

    可向量化数量

    源码文件中扫描出的可以进行向量化的循环数量。

    潜在向量化数量

    需要进行特殊处理(如函数内联)才有可能向量化的循环数量。

    不可向量化数量

    源码文件中扫描出的不可向量化的循环数量。

    循环检查结果类别

    天秤源码优化工具检查出的循环类别,包括可向量化、潜在向量化和不可向量化三种类别。

    分析循环行数

    循环在源码文件中的代码行数。

    循环变量

    在循环中进行循环的变量。

    源码文件存放路径

    循环所在源码文件的存放路径。

    在循环检查结果类别中可以筛选出不同类别的循环,默认全选,单击“重置”可以返回默认状态,单击筛选出的任一行可以展开具体的循环分析过程。

  4. 单击“分析循环行数”展开循环分析过程,包括可向量化、潜在向量化、不可向量化三种循环分析过程。
    • 可向量化循环分析过程如下图所示。

    • 潜在向量化循环分析过程如下图所示。

    • 不可向量化循环分析过程如下图所示。

      循环分析过程参数说明请参见表2

    表2 循环分析过程参数说明

    循环分析过程

    参数

    说明

    可向量化分析

    循环完整代码段

    循环在源码文件中的代码段。

    向量优化后代码段

    天秤源码优化工具对循环进行向量化优化后的代码段。

    潜在向量化分析

    循环完整代码段

    循环在源码文件中的代码段。

    不可向量化分析

    不可向量化原因

    天秤源码优化工具将循环判断为不可向量化的原因。

    循环完整代码段

    循环在源码文件中的代码段。

    公有参数

    循环体分析(逐行)

    天秤源码优化工具对循环进行检查分析的过程。

    代码行

    循环中循环体的代码行。

    覆盖率

    是否被天秤可向量化模式匹配覆盖。

    代码行向量化状态

    循环体单个代码行的向量化状态,包括可向量化、潜在向量化、不可向量化三种类别。

    检查信息

    天秤源码优化工具对代码行的检查分析结果。

    说明:

    如果代码行向量化状态为可向量化,则不显示检查信息,如果代码行向量化状态为潜在向量化和不可向量化,则显示对应的原因或建议。

  5. 单击“函数向量化检查报告”展示函数检查结果,具体内容如下图所示。

    表3 报告结果参数说明

    参数

    说明

    函数向量化统计结果

    总函数数量

    源码文件中扫描出的函数总数。

    可向量化数量

    源码文件中扫描出的可以进行向量化的函数数量。

    潜在向量化数量

    存在可改写指令但是天秤源码优化工具暂不支持改写的函数数量。

    暂不支持向量化数量

    源码文件中扫描出的暂不支持向量化的函数数量。

    函数检查结果类别

    天秤源码优化工具检查出的函数类别,包括可向量化、潜在向量化和暂不支持向量化三种类别。

    分析函数行数

    函数在源码文件中的代码行数。

    函数名称

    天秤源码优化工具进行向量化检查的函数名。

    源码文件存放路径

    函数所在源码文件的存放路径。

    在函数检查结果类别中可以筛选出不同类别的函数,默认选择“可向量化”和“潜在向量化”,单击“重置”可以返回默认状态,单击筛选出的任一行可以展开具体的函数分析过程。

  6. 单击“分析函数行数”展开函数分析过程,包括可向量化、潜在向量化、暂不支持向量化三种函数分析过程。
    • 可向量化函数分析过程如下图所示。

    • 潜在向量化函数分析过程如下图所示。

    • 暂不支持向量化函数分析过程如下图所示。

      函数分析过程参数说明请参见表4

      表4 函数分析过程参数说明

      函数分析过程

      参数

      说明

      可向量化分析

      函数完整代码段

      函数在源码文件中的代码段。

      向量优化后代码段

      天秤源码优化工具对函数进行向量化优化后的代码段。

      检查信息

      天秤源码优化工具对代码行中的x86指令和变量的检查分析结果。

      潜在向量化分析

      函数完整代码段

      函数在源码文件中的代码段。

      检查信息

      天秤源码优化工具对代码行中的x86指令和变量的检查分析结果。

      暂不支持向量化分析

      不可向量化原因

      天秤源码优化工具的改写模块暂未适配,暂不支持向量化改写。

      函数完整代码段

      函数在源码文件中的代码段。

      向量优化后代码段

      天秤源码优化工具对函数进行向量化优化后的代码段。

      检查信息

      天秤源码优化工具对代码行的检查分析结果。

      说明:

      如果代码行向量化状态为可向量化,则不显示检查信息,如果代码行向量化状态为潜在向量化和不可向量化,则显示对应的原因或建议。

      公有参数

      函数体分析(逐行)

      天秤源码优化工具对函数进行检查分析的过程。

      代码行

      函数中函数体的代码行。

      覆盖率

      是否被天秤可向量化模式匹配覆盖。

      代码行向量化状态

      函数体单个代码行的向量化状态,包括可向量化、潜在向量化、暂不支持向量化、仅含有x86类型变量和无关语句五种类别。

  7. 单击“任务信息”可查看当前检查报告的生成信息,如下图所示。

    表5 任务信息说明

    参数

    说明

    任务名称

    天秤源码优化工具自动创建的检查任务名。

    报告生成时间

    天秤源码优化工具生成报告的时间。

    源码文件存放路径

    扫描的源码所在文件的路径。

    火焰图路径

    扫描的火焰图SVG文件的路径。

    特定函数名

    扫描的函数名。

    文件所属项目

    待分析源码文件所属项目的根目录。

    Clang资源文件路径

    Clang内置头文件(如stddef.h)所在的目录。

    GCC工具链

    GCC编译器安装的目录,作为代码分析时的工具链路径。

    是否启用SVE

    是否转换为SVE指令集。