已关闭
[Requirement|需求建议]: 优化 merge_static_packages.sh 并行解压与对象合并流程 #2628
qinhan创建于  16 天前关闭于  16 天前
qinhan
qinhan
16 天前 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

一、背景信息 (必填)

当前 merge_static_packages.sh 脚本在合并多个 cann-ops-math-static 包时,存在以下问题:

  1. 解压效率低:多个 .tar.gz 包是串行解压的,当包数量较多时(如 CI 场景下数十个包),耗时明显。

  2. 对象合并效率低:每个包的对象文件合并也是串行处理,且每个包都要重新解压 libcann_math_static.a,存在重复 I/O。

  3. 冲突处理策略粗糙:同名 .o 文件直接覆盖,没有判断内容是否相同,导致不必要的文件写入和后续重新归档。

本需求旨在优化该脚本的性能和健壮性,缩短 CI 流水线中静态库合并步骤的耗时

二、价值/作用 (必填)

性能提升:通过并行解压和并行提取对象文件,显著缩短合并耗时。。

资源利用:充分利用多核 CPU 资源(通过 NJOBS 环境变量控制并行度),避免串行处理造成的资源浪费。

稳定性增强:优化冲突处理逻辑,通过内容比较(cmp)决定是否覆盖,减少不必要的文件变更,提升增量构建的可靠性。

适用场景:适用于 ops-math 项目的 CI 流水线、本地多包合并调试、以及发布前的静态库打包流程

三、设计方案 (必填)

该脚本作为 ops-math 项目 CI/CD 流程的一部分,在静态库打包阶段自动执行。
本次优化遵循 “并行解压 → 并行提取对象 → 串行合并” 的三阶段设计:

并行解压阶段:使用 xargs -P 配合 pigz(若可用)并行解压所有 .tar.gz 包到临时目录。

并行提取对象阶段:在解压出的每个包目录中,并行执行 ar x 提取所有 .o 文件到独立的临时工作目录。

串行合并阶段:遍历所有包,将提取出的 .o 文件合并到目标目录,冲突时根据文件名和内容智能处理。
💡 备注(选填)

likedislike
CANN-robotCANN-robot成员
16 天前 关闭了 issue
CANN-robotCANN-robot成员
16 天前 添加了label:resolved