---
title: 天秤源码优化工具功能介绍
description: "天秤源码优化工具是一款基于Clang/LLVM的静态代码分析工具，专注于C/C++代码的向量化优化。工具能够自动识别可向量化的循环模式，也支持通过启用x86 Intel intrinsics分析功能，识别x86向量化指令，自动生成优化后的ARM向量化代码，实现代码的自动化改写，帮助开发者快速将代码转换为高效的ARM向量化代码，充分发挥NEON/ SVE 指令集的性能优势。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/development/affinityanalyzer/KunpengDevKitCli_0255.html
sourcePath: /source/zh/kunpengdevps/development/affinityanalyzer/KunpengDevKitCli_0255.html
indexId: 2e16decca7ff3e5405f59bee43b2b6b4443805c7f1f80cb4362b8cff4ad38a8479
---
# 天秤源码优化工具功能介绍

天秤源码优化工具是一款基于Clang/LLVM的静态代码分析工具，专注于C/C++代码的向量化优化。工具能够自动识别可向量化的循环模式，也支持通过启用x86 Intel intrinsics分析功能，识别x86向量化指令，自动生成优化后的ARM向量化代码，实现代码的自动化改写，帮助开发者快速将代码转换为高效的ARM向量化代码，充分发挥NEON/ SVE 指令集的性能优势。

工具支持三种运行模式：

- 火焰图扫描模式（推荐）：推荐优先使用火焰图扫描模式，用户可通过对火焰图中排序靠前的热点函数进行分析优化，能够在最短时间内定位到存在潜在优化空间的函数或代码。
- 函数扫描模式：用户可通过对指定函数进行分析优化，快速定位可向量化的指定函数。
- 单文件扫描模式：用户可通过对单个源码文件进行分析优化，定位源码文件中可向量化的代码。

以上三种运行模式默认扫描的是标量代码，启用x86 Intel intrinsics分析功能后，可支持扫描x86向量化指令。

#### 前提条件

- 已安装天秤源码优化工具。
- 工具为单独压缩包承载（tiancheng-x.x.x-Linux-Kunpeng.tar.gz），请解压后切换至工具目录使用。


#### 命令功能

工具能够自动识别可向量化的循环模式，也支持通过启用x86 Intel intrinsics分析功能，识别x86向量化指令，自动生成优化后的ARM向量化代码，实现代码的自动化改写。


#### 命令格式

```
./tiancheng [options]
```


**表1 参数说明**

| 参数 | 参数选项 | 说明 |
| --- | --- | --- |
| \-h/\-\-help | \- | 可选参数，获取帮助信息。 |
| \-i | \- | 可选参数，指定输入的C/C++源文件。启用单文件扫描模式时必须选择该参数。 说明： 同时选择“\-i”参数和“\-r”参数时，“\-i”参数的优先级高于“\-r”参数，输入文件以“\-i”参数指定的文件为准。 |
| \-I | \- | 可选参数，指定头文件目录。 |
| \-o | \- | 必选参数，指定输出的报告文件目录。 |
| \-r | \- | 必选参数，指定待分析源码文件所属项目的根目录，用于头文件搜索，避免头文件缺失。 |
| \-v | \- | 可选参数，启用详细输出模式，显示更多调试信息和分析过程。默认不启用。 |
| \-\-simd\-target | neon/sve | 可选参数，指定转换的ARM指令集，可指定为NEON或SVE指令集，默认值为neon。 NEON：ARM架构中的SIMD指令集，通过128位矢量寄存器实现并行数据处理，支持8/16/32/64位整数及单精度浮点运算。支持基于鲲鹏920系列和鲲鹏950处理器的服务器。 SVE：可伸缩矢量扩展，一种矢量长度无关的SIMD指令集，让同一份代码能在不同宽度的ARM处理器上自动获得最佳性能。支持部分基于鲲鹏920新型号和鲲鹏950处理器的服务器。 说明： 启用x86 Intel intrinsics分析功能时，“\-\-simd\-target”参数只能指定为sve。 |
| \-\-enable\-ifstmt\-scan | \- | 可选参数，启用对if语句的扫描分析。 |
| \-\-enable\-intel\-intrinsics | \- | 可选参数，启用x86 Intel intrinsics分析功能，分析x86向量化指令，实现对x86向量化代码的改写。默认不启用。 |
| \-\-isa | sse2/avx/avx2/avx512 | 可选参数，指定识别的x86指令集，默认值为avx2。该参数仅在启用x86 Intel intrinsics分析功能时生效。 SSE2：x86架构中的SIMD指令集，通过128位矢量寄存器实现并行数据处理，支持8/16/32/64位整数及双精度浮点运算。 AVX：高级向量扩展，x86架构中的SIMD指令集，通过256位矢量寄存器实现并行数据处理，支持256位单精度浮点运算和双精度浮点运算。 AVX2：高级向量扩展，x86架构中的SIMD指令集，通过256位矢量寄存器实现并行数据处理，支持256位整数运算和浮点运算。 AVX512：高级向量扩展，x86架构中的SIMD指令集，通过512位矢量寄存器实现并行数据处理，支持512位整数运算和浮点运算。 说明： 若识别的指令集为AVX512指令集，则优化后的源代码需要在支持512位SVE指令集的设备上运行。 |
| \-\-features | fma/dq/bw/vl/bf16/vnni/fp16 | 可选参数，指定x86指令集特性，默认值为空，支持选择多个选项，用英文逗号分隔。该参数仅在启用x86 Intel intrinsics分析功能时生效。 FMA：乘加融合运算，支持单指令完成乘法和加法运算，不依赖AVX512指令集，可与AVX/AVX2/AVX512指令集任意组合使用。 DQ：双精度浮点，AVX512指令集特性，支持32位和64位的整数及浮点运算。 BW：字节和字扩展，AVX512指令集特性，支持8位和16位整数运算。 VL：向量长度扩展，AVX512指令集特性，支持128位和256位矢量寄存器使用AVX512指令。 BF16：16位脑浮点数，AVX512指令集特性，支持16位脑浮点数运算。 VNNI：矢量神经网络指令，AVX512指令集特性，支持低精度整数向量点积和乘加累加运算。 FP16：半精度浮点数，AVX512指令集特性，支持半精度浮点数向量算术运算。 |
| \-\-top | \- | 可选参数，指定前N个热点函数，默认为Top10。启用火焰图扫描模式时必须选择该参数。 |
| \-\-flamegraph | \- | 可选参数，指定火焰图扫描模式下火焰图SVG文件的路径。启用火焰图扫描模式时必须选择该参数。 |
| \-\-funcs | \- | 可选参数，指定函数扫描模式下被分析函数的列表。启用函数扫描模式时必须选择该参数。 |
| \-\-gcc\-toolchain | \- | 可选参数，指定GCC编译器安装的目录，作为代码分析时的工具链路径。默认使用系统的GCC编译器目录。 |
| \-\-clang\-resource\-dir | \- | 可选参数，指定Clang内置头文件（如stddef.h）所在的目录，默认为工具lib目录下的头文件目录。 说明： 该参数的默认值为：install\_path/tiancheng/lib/clang/17。 |
| \-\-version | \- | 可选参数，显示工具的版本信息。 |


#### 使用示例

执行以下命令，查看天秤源码优化工具支持的功能信息：
```
./tiancheng -h
```


返回信息如下：

```
OVERVIEW: ARM Intrinsics Analyzer
USAGE: tiancheng [options]
OPTIONS:
-h/--help                  Display available options
-i <filename>              Specify input C/C++ source file
-o <pathname>              Specify output report file path
-r <pathname>              Inputfile root path
-I <pathname>              Add directory to include search path
-v                         Enable verbose output
--simd-target=<value>      Convert simd type selection
=neon                      Convert to ARM NEON intrinsics
=sve                       Convert to ARM SVE intrinsics
--enable-ifstmt-scan       Enable scanning of if statements
--enable-intel-intrinsics  Enable analysis of x86 Intel intrinsics
--isa=<level>              x86 ISA level for Intel intrinsics analysis
Only effective with --enable-intel-intrinsics
=sse2                      SSE2:    128-bit SIMD, baseline x86-64
=avx                       AVX:     256-bit SIMD, float only
=avx2                      AVX2:    AVX + 256-bit integer ops (default)
=avx512                    AVX-512: AVX2 + 512-bit SIMD foundation
--features=<f1,f2,...>     x86 feature flags, comma-separated
Layered on top of --isa. Only effective with --enable-intel-intrinsics
fma    Fused Multiply-Add: enables _mm256_fmadd_ps etc.  -> -mfma
(works with avx/avx2/avx512, not AVX-512-specific)
dq     Doubleword/Quadword: enables 64-bit mask ops,     -> -mavx512dq
_mm512_reduce_add_ps, _mm512_mullo_epi64 etc.
bw     Byte/Word: enables byte/word mask and compare ops -> -mavx512bw
vl     Vector Length: enables 128/256-bit AVX-512 ops   -> -mavx512vl
bf16   BFloat16: enables _mm512_dpbf16_ps etc.           -> -mavx512bf16
(auto-implies dq, bw, vl)
vnni   Vector Neural Net Instructions: int8 dot-product  -> -mavx512vnni
fp16   FP16 arithmetic: enables _mm512_add_ph etc.       -> -mavx512fp16
--top                      Analyze top n hotspot functions
--flamegraph               Path to the flamegraph SVG file
--funcs                    Comma-separated list of functions to analyze
--gcc-toolchain            Path to the GCC toolchain root directory used by Clang
--clang-resource-dir       Clang resource directory (path up to lib/clang/<version>, excluding 'include')
--version                  Display the version of this program
EXAMPLES:
Note: [option] denotes an optional argument.
Mode 1 - Single file scan / 单文件全量扫描
tiancheng -i input.cpp -o ./output [-r /path/to/project]
Mode 2 - Target functions scan (single file) / 指定函数扫描（单文件）
tiancheng -i input.cpp -o ./output --funcs func1,func2
Mode 3 - Target functions scan (whole project) / 指定函数扫描（工程目录）
tiancheng -o ./output -r /path/to/project --funcs func1,func2
Mode 4 - Flamegraph hotspot scan / 火焰图热点扫描
tiancheng -o ./output -r /path/to/project --flamegraph hotspot.svg [--top 10]
Mode 5 - x86 Intel intrinsics migration / x86 Intel intrinsics 迁移分析
# Basic usage / 基本用法:
tiancheng -i vec.cpp -o ./output --enable-intel-intrinsics
# Specify ISA level / 指定 ISA:
tiancheng -i vec.cpp -o ./output --enable-intel-intrinsics [--isa=avx2]
# Specify ISA level and extra features / 指定 ISA 与扩展特性:
tiancheng -i vec.cpp -o ./output --enable-intel-intrinsics [--isa=avx512] [--features=dq,bw]
```
