如何提高工程编译速度

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~       文章首发  公众号—— Pou光明

公众号还在维护,大家莫慌~

Linux Qt 平台为例测试

编译总量 = 编译速度 * 编译时间

 

按照上面等式进行优化,则:

在编译总量不变的前提下,要减少编译时间,则可提升编译速度;

或在编译速度不变的情况下,较少编译总量;

再或者既减少编译总量又提高编译速度。

C/C++编译特点

C/C++ 编译单位是文件,无法进行跨模块优化,C++20可支持。

将.o文件链接在一起时很难并行。

预处理过程可并行进行。

提高编译速度

1 减小编译总量

包含大量头文件会导致预处理时间变长,针对此尽量使用前置声明。

Pimpl(Private Implementation)模式与不透明指针。

高内聚、低耦合,减少模块间的依赖。

删除不必要的头文件。

2 提高编译速度

在提升编译速度上,可以增加编译机器数量或者提高单机编译能力。针对整体工程。

2.1 提高单机编译能力

多核编译

make -j*

 

#减少重复编译相同代码的时间

ccache  

 

解决IO瓶颈,充分利用内存资源,头文件非常多,预处理时需要反复从磁盘读取文件

tmpfs 

2.2 使用多机进行

distcc :分布式编译,利用多台计算机资源共同编译一个程序,

   可用于内核或者大型程序(**未做测试**),简单讲链接过程在主机进行。

icecc : distcc升级版

Qt多核编译与ccache使用具体操作流程

1  Qt 设置多核编译

Qt侧边栏 Projects -> Build -> Build Steps

注意虚拟机配置核数。

 

2  ccache 安装及配置步骤

2.1 ccache安装

sudo apt-get install ccache   

ccache -V 可查看是否安装成功

安装完成后默认缓存路径为~/.ccache ,默认缓存空间配置为5G

 

2.2 Qt中配置ccache

#Qt pro中添加  

equals(COMPILE,2){

QMAKE_CXX = ccache g++

}

 

需在Qt->Projects->Build Steps->Additionals arguments 配置变量,如图 

注:使用软链接、配置环境变量等方式无法完成Qt自动使用ccache,qmake生成的Makefile中未使用ccache.

 

Qt使用分布式编译icecc具体操作流程

1 Qt 设置多核编译,设置如上

2.1 1icecc 及gui工具安装

 

sudo apt-get install icecc

sudo apt install icecc-monitor#在终端使用icemon命令进行查看

#开机后icecc-scheduler(调度器)可自动启动,如未启动,可使用systemctl start icecc-scheduler命令启动

 

一个调度器,两个编译机图示。

2.2 icecc 相关设置

如果在ui工具中无法搜索到调度机与客户机,可使用下面命令查看防火墙状态。如果状态为inactive,则无需进行其他设置。

sudo ufw status# Status: inactive

 

如果状态为active,则需添加相关端口。

sudo ufw allow 10245/tcp #添加TCP/10245端口

TCP/10245 on the daemon computers (required)

TCP/8765 for the the scheduler computer (required)

TCP/8766 for the telnet interface to the scheduler (optional)

UDP/8765 for broadcast to find the scheduler (optional)

 

3 Qt中使用icecc

#Qt pro中添加

equals(COMPILE,2){

QMAKE_CXX = icecc g++

}

 

Qt使用icecc及ccache

Qt pro中添加  

equals(COMPILE,2){

QMAKE_CXX = icecc ccache g++

}

 

icecc不同电脑间组成局域网

1 虚拟机开发环境相关设置(VMWare为例)

1.1 查看windows无线网卡

ipconfig /all

无线局域网适配器 描述 如 Intel(R) Wi-Fi 6 AX200 160MHz

1.2 设置VMWare Vmnet信息

编辑->虚拟网络编辑器->更改设置->设置桥接模式->已桥接至选择第一步windows无线网卡信息

 

1.3设置虚拟机网络适配器为桥接模式

1.4关闭Windows无线网络使用的防火墙

1.5 重启电脑

1.6测试效果

2  ubuntu开发环境相关设置

连接无线即可.

测试效果

3  使用效果总结

尽可能提高编译主机核数以增加Active jobs

各个编译机调度受网速影响

<think> 嗯,用户想了解如何提高Vivado编译速度。从用户的问题和提供的引用内容来看,用户应该是个FPGA工程师,正在处理实际项目,可能遇到了编译时间过长影响开发效率的问题。 用户引用的内容已经总结得比较全面了,但需要更系统地整理。主要优化方向有四个:跨时钟域约束、多线程设置、编译策略选择和工程配置优化。 关于跨时钟域约束特别重要,引用[1][2][4]都强调了这点。Vivado默认分析所有路径的特性确实会导致编译时间激增,需要明确指导用户如何使用set_false_path等命令。设置多线程也很关键,引用[2][3]提到要区分jobs和threads的概念,避免用户产生误解。 增量编译在引用[2]中提到适用于小改动场景,但需要补充说明其适用范围。IP核的out-of-context编译在引用[4]有具体操作示例,这个对大型项目特别有用。 用户没有说明项目规模,但提到“1-2小时缩短到十几分钟”的案例,说明可能是在处理复杂设计。需要提醒用户优先处理跨时钟域约束,这个通常见效最快。同时要注意线程设置并非越多越好,引用[3]指出Windows下加速效果可能不明显。 最后考虑补充一个实用建议:建议用户先做静态时序分析再编译,这样能更快定位问题。另外提醒综合策略选择要根据设计特点来定,比如对时序紧张的设计用Explore策略可能更合适。 </think> 以下是提高 Vivado 编译速度的核心方法,结合工程实践与引用内容整理: --- ### **1. 跨时钟域(CDC)路径约束** [^1][^2][^4] - **关键问题**:Vivado 默认分析所有时序路径(包括 CDC),导致布线负担重。 - **优化方法**: - 对无数据交互的异步时钟域添加伪路径约束: ```tcl set_false_path -from [get_clocks clkA] -to [get_clocks clkB] ``` - 对已知安全的 CDC 路径设置宽松约束: ```tcl set_max_delay 10 -from [get_clocks clkA] -to [get_clocks clkB] ``` - 使用 `set_clock_groups` 声明时钟组异步关系: ```tcl set_clock_groups -asynchronous -group clkA -group clkB ``` - **效果**:编译时间可从 **1-2小时缩短至十几分钟** [^1][^2]。 --- ### **2. 多线程编译设置** [^2][^3] - **调整线程数**(需硬件支持): ```tcl set_param general.maxThreads 8 ;# 设置最大线程数(通常4-8) get_param general.maxThreads ;# 查看当前线程数 ``` - **注意**: - Windows 默认线程数为 2,Linux 可更高。 - `jobs` 参数仅在**同时运行多个设计**时生效,单设计无效 [^3]。 --- ### **3. 增量编译(Incremental Compile)** [^2][^4] - **适用场景**:RTL 代码仅小幅修改时。 - **操作步骤**: 1. 完成首次全编译后保存检查点(`.dcp`)。 2. 修改代码后,在 "Implementation Settings" 中启用增量编译,加载原检查点。 --- ### **4. IP 核编译优化** [^4] - **配置 IP 为 Out-of-Context (OOC)**: - 生成 IP 时勾选 **"Out of context per IP"**。 - **优势**:IP 独立编译,未修改时直接复用缓存,减少重复编译。 --- ### **5. 综合与实现策略选择** [^2][^4] - **根据设计需求调整策略**: - **综合策略**:`Flow_PerfOptimized_high`(高性能)或 `Flow_RuntimeOptimized`(快速编译)。 - **实现策略**:`Performance_Explore`(时序优化)或 `Quick`(快速布局布线)。 - **修改位置**:`Project Settings -> Synthesis/Implementation -> Strategy` --- ### **6. 其他建议** - **代码优化**:减少组合逻辑深度,避免复杂胶合逻辑。 - **约束精度**:明确时序例外(如 `false_path`),避免工具过度优化无关路径。 - **版本升级**:新版 Vivado 通常优化编译算法。 --- ### **典型效果对比** | **操作** | 编译时间 | 备注 | |------------------------|---------------|-----------------------------| | 无 CDC 约束 | 1-2 小时 | 工具尝试优化所有路径 [^1] | | 添加 CDC 约束 | 10-20 分钟 | 减少无效时序分析 [^1][^2] | | 多线程 + 增量编译 | 进一步减少 30% | 依赖硬件和代码改动范围 [^2][^4] | > ⚠️ **注意**:约束需基于时序安全,误用 `set_false_path` 可能导致亚稳态问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值