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 包时,存在以下问题:
解压效率低:多个 .tar.gz 包是串行解压的,当包数量较多时(如 CI 场景下数十个包),耗时明显。
对象合并效率低:每个包的对象文件合并也是串行处理,且每个包都要重新解压 libcann_math_static.a,存在重复 I/O。
冲突处理策略粗糙:同名 .o 文件直接覆盖,没有判断内容是否相同,导致不必要的文件写入和后续重新归档。
本需求旨在优化该脚本的性能和健壮性,缩短 CI 流水线中静态库合并步骤的耗时
性能提升:通过并行解压和并行提取对象文件,显著缩短合并耗时。。
资源利用:充分利用多核 CPU 资源(通过 NJOBS 环境变量控制并行度),避免串行处理造成的资源浪费。
稳定性增强:优化冲突处理逻辑,通过内容比较(cmp)决定是否覆盖,减少不必要的文件变更,提升增量构建的可靠性。
适用场景:适用于 ops-math 项目的 CI 流水线、本地多包合并调试、以及发布前的静态库打包流程
该脚本作为 ops-math 项目 CI/CD 流程的一部分,在静态库打包阶段自动执行。 本次优化遵循 “并行解压 → 并行提取对象 → 串行合并” 的三阶段设计:
并行解压阶段:使用 xargs -P 配合 pigz(若可用)并行解压所有 .tar.gz 包到临时目录。
并行提取对象阶段:在解压出的每个包目录中,并行执行 ar x 提取所有 .o 文件到独立的临时工作目录。
串行合并阶段:遍历所有包,将提取出的 .o 文件合并到目标目录,冲突时根据文件名和内容智能处理。 💡 备注(选填)
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 包时,存在以下问题:
解压效率低:多个 .tar.gz 包是串行解压的,当包数量较多时(如 CI 场景下数十个包),耗时明显。
对象合并效率低:每个包的对象文件合并也是串行处理,且每个包都要重新解压 libcann_math_static.a,存在重复 I/O。
冲突处理策略粗糙:同名 .o 文件直接覆盖,没有判断内容是否相同,导致不必要的文件写入和后续重新归档。
本需求旨在优化该脚本的性能和健壮性,缩短 CI 流水线中静态库合并步骤的耗时
二、价值/作用 (必填)
性能提升:通过并行解压和并行提取对象文件,显著缩短合并耗时。。
资源利用:充分利用多核 CPU 资源(通过 NJOBS 环境变量控制并行度),避免串行处理造成的资源浪费。
稳定性增强:优化冲突处理逻辑,通过内容比较(cmp)决定是否覆盖,减少不必要的文件变更,提升增量构建的可靠性。
适用场景:适用于 ops-math 项目的 CI 流水线、本地多包合并调试、以及发布前的静态库打包流程
三、设计方案 (必填)
该脚本作为 ops-math 项目 CI/CD 流程的一部分,在静态库打包阶段自动执行。
本次优化遵循 “并行解压 → 并行提取对象 → 串行合并” 的三阶段设计:
并行解压阶段:使用 xargs -P 配合 pigz(若可用)并行解压所有 .tar.gz 包到临时目录。
并行提取对象阶段:在解压出的每个包目录中,并行执行 ar x 提取所有 .o 文件到独立的临时工作目录。
串行合并阶段:遍历所有包,将提取出的 .o 文件合并到目标目录,冲突时根据文件名和内容智能处理。
💡 备注(选填)