CPU与vivado编译速度关系
目录
CPU物理内核与逻辑处理器
Vivado编译速度
设置线程(threads)
不同线程性能对比示例
Vivado日志thread信息
1. DRC 在实现流程中的线程使用
2. Place_design 在实现流程中的线程使用
3.route_design 在实现流程中的线程使用
4.为什么DRC能用20线程,而place和route只能用8线程
设置jobs
jobs与threads关键区别:
升级VIVADO版本也可能会加快编译速度
CPU物理内核与逻辑处理器
以我的计算机为例,CPU型号是13th Gen Intel Core i7-13700H
官方规格如下
参数 | 值 |
---|---|
物理内核总数 | 14(6P + 8E) |
逻辑线程总数 | 20(12P + 8E) |
P-Core(性能核) | 6 核(支持超线程 → 12 线程) |
E-Core(能效核) | 8 核(不支持超线程 → 8 线程) |
基础频率 | P-Core: 2.4 GHz, E-Core: 1.8 GHz |
最大睿频 | P-Core: 5.0 GHz, E-Core: 3.7 GHz |
可以看到我有14个物理内核和20个逻辑处理器,通常情况一个逻辑处理器对应一个逻辑线程
在电脑上可以通过以下几种方法查看自己电脑的物理内核和逻辑处理器信息
一、查看系统信息
二、查看任务管理器
三、打开cmd窗口,输入wmic cpu get NumberOfCores,NumberOfLogicalProcessors
四、通过设备管理器可以看到逻辑处理器个数
Vivado编译速度
设置线程(threads)
tcl指令中可以配置线程,输入get_param general.maxThreads可以查看当前vivado设置的线程数
输入set_param general.maxThreads xx可以配置当前vivado的线程数(最大为逻辑处理器数量),软件中最大可设置为32,但我的电脑中实际生效只会有20个(最大为逻辑处理器数量)
但并不是越大越好,Deepseek给出了原因,如下;
不同线程性能对比示例
Vivado日志thread信息
在综合的log文件中找不到thread线程关键词,在实现的log文件中可以找到
1. DRC 在实现流程中的线程使用
可以看到DRC阶段使用了20个线程,拉满了
在 Vivado 的日志中,DRC Task(Design Rule Check Task) 是 设计规则检查 任务,用于在 实现阶段(Implementation) 自动检查设计是否违反 FPGA 的物理或电气约束规则。以下是详细解析:
在 Vivado 的实现流程中,会多次出现 DRC(Design Rule Check)检测 ,
Vivado 会在 关键阶段自动触发 DRC,以确保设计在后续步骤中不会因物理规则违规而失败。你的日志中多次出现 DRC 是由于以下阶段触发的检查:
2. Place_design 在实现流程中的线程使用
可以看到DRC阶段使用了8个线程,又问了一下Deepseek。
3.route_design 在实现流程中的线程使用
可以看到DRC阶段也是使用了8个线程
4.为什么DRC能用20线程,而place和route只能用8线程
任务 | 线程数 | 原因 |
---|---|---|
DRC | 20(逻辑线程) | 规则独立,无数据依赖 |
Placement | 8(受限) | 布局算法串行依赖 |
Routing | 8(受限) | 布线算法强依赖关键路径 |
-
DRC 检查的是 独立规则(如时钟、电源、I/O),可以完全并行化。
-
Place & Route 涉及 全局优化,必须按一定顺序计算,无法完全并行
5.生成bit流使用线程
这里也只用了8个线程。
设置jobs
launch_runs synth_1 -jobs 20
launch_runs impl_1 -jobs 20
launch_runs impl_1 -to_step write_bitstream -jobs 20
我本以为jobs越多,编译速度越快,但我理解错了,Deepseek解释如下
在 Vivado 中,-jobs 20
并不是直接设置线程数,而是控制 同时运行的独立任务(任务级并行),与 set_param general.maxThreads
(线程级并行)有本质区别。以下是详细解析:
参数 | 控制范围 | 适用阶段 | 示例 |
---|---|---|---|
-jobs | 任务级并行(多个独立运行) | launch_runs | -jobs 4 → 同时跑 4 个 impl_* |
set_param general.maxThreads | 线程级并行(单个任务内多核) | 综合/布局/布线/DRC | set_param general.maxThreads 16 |
-
jobs与threads关键区别:
-
-jobs
是 横向扩展(多个任务并行),适合多设计场景。 -
maxThreads
是 纵向加速(单个任务多核优化),适合单设计大任务。
-