模式二:基于子命令的工作流
工作流程
项目预处理 → 向量化扫描 → 工具补丁验证 → AI补丁改写及验证 → 补丁应用 → 生成报告及优化后的源码
生成的具体内容包括:HTML报告及patch应用后的项目。
工作目录
{project_name}_{id}/ # 工作区根目录(权限0o700)
├── workflow.log # 全量日志文件
├── origin/ # 原始项目只读备份(权限0o700)
├── result/ # 优化后的项目(权限0o700)
├── vectorization_result/ # 天秤工具输出目录
├── patch/ # 补丁文件和HTML报告目录
└── unit_test/ # 单元测试源文件(.cpp)和编译二进制目录
命令格式
./devkitai vectorization_workflow --project-dir <DIR> [OPTIONS]
参数说明
参数 |
参数选项 |
说明 |
|---|---|---|
-h/--help |
- |
可选参数,获取帮助信息。 |
--project-dir |
- |
必选参数,指定输入项目的源码根目录。 说明:
不使用“--file-path”参数、“--flamegraph-path”参数和“--funcs”参数时,将启用全项目分析模式并行分析目录下所有C/C++源文件和头文件。 |
--file-path |
- |
可选参数,指定输入的C/C++源文件路径。启用单文件分析模式时必须选择该参数。 |
--flamegraph-path |
- |
可选参数,指定火焰图分析模式下火焰图SVG文件的路径。启用火焰图分析模式时必须选择该参数。 |
--funcs |
- |
可选参数,指定函数分析模式下被分析函数的列表。启用指定函数分析模式时必须选择该参数。支持选择多个选项,用英文逗号分隔。 |
--top |
- |
可选参数,指定前N个热点函数,默认为Top10。 |
--vectorization-path |
- |
可选参数,指定天秤源码优化工具可执行文件路径。 |
--simd-target |
neon/sve |
可选参数,指定转换的ARM指令集,可指定为NEON或SVE指令集,默认值为neon。
|
--gcc-toolchain |
- |
可选参数,指定GCC编译器安装的目录,作为代码分析时的工具链路径。默认使用系统的GCC编译器目录。 |
--clang-resource-dir |
- |
可选参数,指定Clang内置头文件(如stddef.h)所在的目录,默认为天秤源码优化工具lib目录下的头文件目录。 说明:
该参数的默认值为:install_path/tiancheng/lib/clang/17。 |
--disable-tool-patch-test |
- |
可选参数,关闭天秤源码优化工具生成补丁的单元测试验证,默认值为开启。 |
--disable-strategy |
- |
可选参数,关闭优化策略库加载。 说明:
关闭后AI自主推导优化方案,可能降低生成质量与稳定性。 |
--tool-jobs |
- |
可选参数,指定在全项目分析模式下,天秤源码优化工具并行工作进程数。默认启用天秤源码优化工具的“-j”并行模式,传入指定值可设置并行上限。 |
--max-workers |
- |
可选参数,指定AI补丁级并行工作线程数。默认工作线程数为CPU核数与补丁数之间的最小值,若传入指定值可设置工作线程数上限。 |
操作步骤
此处以包管理配置自动下载天秤源码优化工具,使用单文件扫描模式对llama_and_inline.cpp文件进行源码优化为例,请根据实际情况进行修改。
- 进入DevKit AI工具解压后目录,对“llama_and_inline.cpp”C/C++文件进行源码优化。
./devkitai vectorization_workflow --project-dir /home/tiancheng-llama/llama-test --file-path /home/tiancheng-llama/llama-test/llama_and_inline.cpp --simd-target sve
- “/home/tiancheng-llama/llama-test”为项目的源码根目录,请用户以实际项目目录替换。
- “/home/tiancheng-llama/llama-test/llama_and_inline.cpp”为C/C++源文件路径,请用户以实际文件路径替换。
- 此处以指定为SVE指令集为例,请用户以实际需求自行选择指令集。
具体返回信息如下。天秤源码优化工具处理结果将存储于“/home/tiancheng-llama/llama-test_a421/”目录。
[2026-07-20 19:00:28] 工作流(进度条+workflow.log)初始化完成 [2026-07-20 19:00:28] [2026-07-20 19:00:28] ############################################################ [2026-07-20 19:00:28] # 向量化优化工作流 (进度条+workflow.log) 开始执行 [2026-07-20 19:00:28] # 分析模式: targeted | SIMD: sve | 工具补丁测试: 开启 | 策略库: 开启 | 工具并发: 自动 | AI并发: 自动 [2026-07-20 19:00:28] ############################################################ [2026-07-20 19:00:28] [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] [Phase 1] 项目预处理 [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] 源项目目录: /home/tiancheng-llama/llama-test [2026-07-20 19:00:28] 目标文件路径: /home/tiancheng-llama/llama-test/llama_and_inline_func_test.cpp [2026-07-20 19:00:28] 分析模式: targeted [2026-07-20 19:00:28] [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] [校验] 输入参数与操作权限检查 [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] [Check] ✓ 源项目目录 目录存在: /home/tiancheng-llama/llama-test [2026-07-20 19:00:28] [Check] ✓ 源项目目录 当前用户可读: /home/tiancheng-llama/llama-test [2026-07-20 19:00:28] [Check] ✓ 源项目目录 当前用户可进入: /home/tiancheng-llama/llama-test [2026-07-20 19:00:28] [Check] ✓ simd_target 值合法: sve [2026-07-20 19:00:28] [Check] ✓ 工作区父目录 目录存在: /home/tiancheng-llama [2026-07-20 19:00:28] [Check] ✓ 工作区父目录 当前用户可读: /home/tiancheng-llama [2026-07-20 19:00:28] [Check] ✓ 工作区父目录 当前用户可写可进入: /home/tiancheng-llama [2026-07-20 19:00:28] [Check] ✓ 目标文件 文件存在: /home/tiancheng-llama/llama-test/llama_and_inline_func_test.cpp [2026-07-20 19:00:28] [Check] ✓ 目标文件 当前用户可读: /home/tiancheng-llama/llama-test/llama_and_inline_func_test.cpp [2026-07-20 19:00:28] [Check] ✓ 目标文件 在项目目录内: /home/tiancheng-llama/llama-test/llama_and_inline_func_test.cpp [2026-07-20 19:00:28] [Check] ✓ 目标文件后缀合法: .cpp [2026-07-20 19:00:28] [Install] 正在安装 tiancheng... 100%[======================================================================] 0.01M 8.3MB/s eta 0m 00s [2026-08-24 20:29:40] [Check] ✓ tiancheng 已安装: /home/DevKit-AI-x.x.x-Linux-Kunpeng/_internal/products/tiancheng/tiancheng [2026-07-20 19:00:28] [Check] ✓ 系统命令可用: g++ -> /usr/bin/g++ [2026-07-20 19:00:28] [Check] ✓ 项目目录含 C/C++ 源文件 [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] [Step] workflow.log 已创建: /home/tiancheng-llama/llama-test_a421/workflow.log [2026-07-20 19:00:28] [Step] 备份原始项目 → /home/tiancheng-llama/llama-test_a421/origin [2026-07-20 19:00:28] 目录复制完成: /home/tiancheng-llama/llama-test -> /home/tiancheng-llama/llama-test_a421/origin [2026-07-20 19:00:28] [Step] 创建修改副本 → /home/tiancheng-llama/llama-test_a421/result [2026-07-20 19:00:28] 目录复制完成: /home/tiancheng-llama/llama-test -> /home/tiancheng-llama/llama-test_a421/result [2026-07-20 19:00:28] [Step] 策略库目录(sve): /home/DevKitAI/DevKitAIBackend/src/devkitai/cores/knowledge/strategy/sve [2026-07-20 19:00:28] [Done] 工作区: /home/tiancheng-llama/llama-test_a421 | 耗时: 0.01s [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] [Phase 2] 向量化分析工具调用 [2026-07-20 19:00:28] ============================================================ [2026-07-20 19:00:28] 工具路径: /home/DevKit-AI-x.x.x-Linux-Kunpeng/_internal/products/tiancheng/tiancheng [2026-07-20 19:00:28] 分析模式: targeted [2026-07-20 19:00:28] 分析文件: /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [2026-07-20 19:00:28] [Step] 执行向量化扫描... [2026-07-20 19:00:29] [Done] 扫描完成 | 耗时: 0.23s [2026-07-20 19:00:29] [Step] 加载分析报告... [2026-07-20 19:00:29] [Result] 工具补丁: 2 | AI补丁: 2 | 总计: 4 [2026-07-20 19:00:29] ============================================================ [2026-07-20 19:00:29] [2026-07-20 19:00:29] ============================================================ [2026-07-20 19:00:29] [Router] 进入补丁验证流程 | 工具: 2 | AI: 2 | 总计: 4 [2026-07-20 19:00:29] ============================================================ [2026-07-20 19:00:29] [2026-07-20 19:00:29] ============================================================ [2026-07-20 19:00:29] [Phase 3] 工具补丁并行验证 [2026-07-20 19:00:29] ============================================================ [2026-07-20 19:00:29] 补丁数量: 2 | 并发线程: 2 | 最大测试重试: 2 [2026-07-20 19:00:29] ---------------------------------------- [2026-07-20 19:00:29] [Step] 预初始化LLM实例... [2026-07-20 19:00:29] [Step] LLM实例初始化完成 [2026-07-20 19:07:12] 工具补丁 完成 | 2/2 | 耗时: 403.3s [2026-07-20 19:07:12] [PASS] 工具补丁 #1 | /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [67-69] | 性能提升 +558.6% (1.1us → 162.6ns, speedup=6.59) [2026-07-20 19:07:12] [PASS] 工具补丁 #0 | /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [61-63] | 性能提升 +503.5% (1.2us → 200.0ns, speedup=6.04) [2026-07-20 19:07:12] ---------------------------------------- [2026-07-20 19:07:12] [Summary] 通过: 2/2 | 回退AI: 0 | 耗时: 403.30s [2026-07-20 19:07:12] ============================================================ [2026-07-20 19:07:12] [2026-07-20 19:07:12] ============================================================ [2026-07-20 19:07:12] [Phase 4] AI补丁并行改写+验证 [2026-07-20 19:07:12] ============================================================ [2026-07-20 19:07:12] 补丁数量: 2 | 并发线程: 2 | AI改写重试上限: 3 | 测试重试上限: 3 | 策略库: 开启 [2026-07-20 19:07:12] ---------------------------------------- [2026-07-20 19:07:12] [Step] 预初始化LLM实例... [2026-07-20 19:07:12] [Step] LLM实例初始化完成 [2026-07-20 19:27:32] AI补丁 完成 | 2/2 | 耗时: 1220.0s [2026-07-20 19:27:32] [PASS] AI补丁 #1 | /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [52-56] | 性能提升 +95.2% (4.0us → 2.0us, speedup=1.95) [2026-07-20 19:27:32] [PASS] AI补丁 #0 | /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [33-36] | 性能提升 +193.4% (3.1us → 1.1us, speedup=2.93) [2026-07-20 19:27:32] ---------------------------------------- [2026-07-20 19:27:32] [Summary] AI通过: 2/2 | 全部通过: 4 (工具+AI) | 耗时: 1219.96s [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [Router] 验证通过 4 个补丁,进入应用阶段 [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [Phase 5] 补丁应用 [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [Final Summary] 补丁处理最终总结 [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] 工具补丁 (2 个): [2026-07-20 19:27:32] #1 /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [67-69] 功能:通过 测试迭代:3 性能:+558.6% [2026-07-20 19:27:32] #0 /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [61-63] 功能:通过 测试迭代:2 性能:+503.5% [2026-07-20 19:27:32] AI补丁 (2 个): [2026-07-20 19:27:32] #1 /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [52-56] 功能:通过 改写:1 测试迭代:2 性能:+95.2% [2026-07-20 19:27:32] #0 /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp [33-36] 功能:通过 改写:2 测试迭代:2 性能:+193.4% [2026-07-20 19:27:32] ---------------------------------------- [2026-07-20 19:27:32] 总计: 4 个补丁 | 通过: 4 | 失败/回退: 0 [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] 待应用补丁: 4 个 [2026-07-20 19:27:32] [去重] 去重后补丁: 4 个 (移除 0 个重叠) | 耗时:0.000s [2026-07-20 19:27:32] 涉及文件: 1 个 [2026-07-20 19:27:32] ---------------------------------------- [2026-07-20 19:27:32] [File] /home/tiancheng-llama/llama-test_a421/result/llama_and_inline_func_test.cpp | 补丁数: 4 [2026-07-20 19:27:32] [tool] 应用补丁 [67-69] | 替换 3 行 → 5 行 [2026-07-20 19:27:32] [tool] 应用补丁 [61-63] | 替换 3 行 → 5 行 [2026-07-20 19:27:32] [AI] 应用补丁 [52-56] | 替换 5 行 → 28 行 [2026-07-20 19:27:32] [AI] 应用补丁 [33-36] | 替换 4 行 → 35 行 [2026-07-20 19:27:32] 写入成功 | 应用 4 个补丁 [2026-07-20 19:27:32] ---------------------------------------- [2026-07-20 19:27:32] [Summary] 应用补丁: 4/4 | 涉及文件: 1 | 耗时: 0.00s [2026-07-20 19:27:32] [ReportData] 源文件(只读): Vectorization_Source_20260720_190028_983_1457.json [2026-07-20 19:27:32] [ReportData] 保留 llama_and_inline_func_test.cpp 行33-36 [2026-07-20 19:27:32] [ReportData] 保留 llama_and_inline_func_test.cpp 行52-56 [2026-07-20 19:27:32] [ReportData] 保留 llama_and_inline_func_test.cpp 行61-63 [2026-07-20 19:27:32] [ReportData] 保留 llama_and_inline_func_test.cpp 行67-69 [2026-07-20 19:27:32] [ReportData] loop_list 过滤: 保留 4/4 (移除 0 个未命中补丁) [2026-07-20 19:27:32] [ReportData] 已移除 func_results (暂不展示) [2026-07-20 19:27:32] [ReportData] task_info 已覆写 task_name=Vectorization_Patch_Result_20260720_192732_740_324363 [2026-07-20 19:27:32] [HTMLReport] 模板: Vectorization_Source_20260720_190028_983_1457.html [2026-07-20 19:27:32] [HTMLReport] 替换JS变量: vecReportData ✓ [2026-07-20 19:27:32] [HTMLReport] 替换JS变量: taskInfoReportData ✓ [2026-07-20 19:27:32] [HTMLReport] 报告已生成: /home/tiancheng-llama/llama-test_a421/patch/Vectorization_Patch_Result_20260720_192732_740_324363.html [2026-07-20 19:27:32] [GitPatch] patch 已生成: /home/tiancheng-llama/llama-test_a421/patch/devkit-vectorization.patch (4778 bytes) [2026-07-20 19:27:32] ============================================================ [2026-07-20 19:27:32] [2026-07-20 19:27:32] ############################################################ [2026-07-20 19:27:32] # 工作流执行完成 [2026-07-20 19:27:32] # 端到端总耗时: 1623.81s [2026-07-20 19:27:32] # 各阶段耗时(wall-clock): [2026-07-20 19:27:32] # Phase1 预处理: 0.01s [2026-07-20 19:27:32] # Phase2 向量化: 0.23s [2026-07-20 19:27:32] # Phase3 工具补丁: 403.30s [2026-07-20 19:27:32] # Phase4 AI补丁: 1219.96s [2026-07-20 19:27:32] # Phase5 补丁应用: 0.04s [2026-07-20 19:27:32] # 阶段合计: 1623.53s [2026-07-20 19:27:32] ############################################################
输出产物
源码优化完成后,工作目录下会生成以下产物。
文件/目录 |
阶段 |
说明 |
|---|---|---|
workspace/ |
项目预处理 |
工作区根目录 |
workspace/origin/ |
项目预处理 |
原始项目备份 |
workspace/vectorization_result/ |
项目预处理 |
天秤源码优化工具报告输出目录 |
workspace/patch/ |
项目预处理 |
最终报告和patch文件输出目录 |
workspace/unit_test/ |
项目预处理 |
单元测试编译运行目录 |
workspace/workflow.log |
项目预处理 |
全流程日志(项目预处理阶段创建,后续阶段持续写入。) |
workspace/vectorization_result/Vectorization_Source_*.json |
向量化扫描 |
天秤源码优化工具中间结果文件(如果没有扫描出可优化结果,则不输出该文件。) |
workspace/vectorization_result/Vectorization_Source_*.html |
向量化扫描 |
天秤源码优化工具可视化结果文件(如果没有扫描出可优化结果,则不输出该文件。) |
workspace/vectorization_result/Vectorization_Optimization_Result_*.json |
向量化扫描 |
天秤源码优化工具改写结果文件 |
workspace/vectorization_result/Vectorization_Optimization_Result_*/ |
向量化扫描 |
全项目分析模式下天秤源码优化工具结果目录 |
workspace/unit_test/unit_test_tool_*.cpp |
工具补丁验证 |
工具补丁的单元测试源码(AI生成) |
workspace/unit_test/unit_test_tool_* |
工具补丁验证 |
工具补丁单元测试源码编译成的二进制文件路径 |
workspace/unit_test/unit_test_ai_*.cpp |
AI补丁改写及验证 |
AI补丁的单元测试源码(AI生成) |
workspace/unit_test/unit_test_ai_* |
AI补丁改写及验证 |
AI补丁单元测试源码编译成的二进制文件路径 |
workspace/result/ |
补丁应用 |
使用天秤源码优化工具进行向量化扫描和补丁应用后的结果目录(该目录会在预处理阶段存储项目修改副本,作为后续向量化扫描及补丁应用的处理对象。) |
workspace/patch/{task_name}.html |
补丁应用 |
|
workspace/patch/devkit-vectorization.patch |
补丁应用 |
git patch文件(origin vs result的diff比较,如果没有扫描出可优化结果,则不输出该文件。) |