跳至正文

如何提高Vivado编译速度02–最大线程与使用线程对编译速度的影响

前言

现代电脑都支持多线程,目前个人电脑基本都是16线程起步,一个优秀的软件应该有调用多线程加快运行速度的能力,那Vivado满足这个优秀的条件吗?

本文将测试Vivado的多线程编译能力,先说结论:

  1. 设置Vivado最大线程为32,有助于提升编译速度;

  2. Vivado最多能利用的线程数应该是16。

好吧,从结论看Vivado勉强可以称为优秀吧,毕竟是最好用的FPGA开发工具,且是断层领先的那种。

具体测试详见正文。

一、什么是最大线程和使用线程

Vivado有最大线程限制,默认为2。可在Tcl Console窗口输入以下命令查看最大线程。

get_param general.maxThreads

可用以下命令设置最大线程。

set_param general.maxThreads 32

使用方法如下图所示。

上述命令仅在当前打开的Vivado中生效,关闭Vivado再打开后需要重新设置。

一种永久设置最大线程的办法是在Vivado安装路径的scripts文件夹中新建Vivado_init.tcl,将set_param general.maxThreads 32命令添加到此tcl文件中,如下图所示,Vivado启动会自动加载此文件。

详细教程请参考:https://blog.csdn.net/weixin_42837669/article/details/115269531?spm=1011.2415.3001.5331

无论最大线程怎么设置,在编译时,都会弹出一个对话框,让我们选择用本机的多少jobs来进行编译,如下图所示。

这里的job就是线程的意思,因为你会发现,jobs的最大值总是和你电脑CPU的最大线程数一致。我们把这一步设置的线程称为使用线程

且无论最大线程怎么设置,使用线程总是可以设置成1~电脑最大线程。那我们就有疑问了,

  1. 最大线程的设置究竟起作用了吗?还是说以使用线程的设置为准?
  2. Vivado能利用满所有的32线程吗?还是说超过8/16线程就没什么意义了,Vivado软件就无法利用更多线程?

为此,我们进行实验,基本条件如下:

  1. 测试工程使用前文介绍的三个示例工程;
  2. Vivado版本固定为Vivado 2024.2。

保持电脑状态不变,通过修改最大线程和使用线程进行多次测试。

二、测试截图

本章展示所有测试工程编译时间统计截图,以Vivado的Design Runs界面展示的Elapsed列时间为准,精确到秒。

2.1 最大线程2,使用线程32

CPU


实验编号 OOC 综合 实现 合计
最大线程2,使用线程32-CPU-1 0 1m22s 2m07s 3m29s
最大线程2,使用线程32-CPU-2 0 1m21s 2m06s 3m27s
最大线程2,使用线程32-CPU-平均 0 1m21.5s 2m06.5s 3m28s

MB


实验编号 OOC 综合 实现 合计
最大线程2,使用线程32-MB-1 3m05s 26s 5m07s 8m38s
最大线程2,使用线程32-MB-2 3m03s 26s 5m07s 8m36s
最大线程2,使用线程32-MB-平均 3m04s 26s 5m07s 8m37s

ZYNQU


实验编号 OOC 综合 实现 合计
最大线程2,使用线程32-ZYNQU-1 1m08s 29s 2m10s 3m47s
最大线程2,使用线程32-ZYNQU-2 1m09s 28s 2m10s 3m47s
最大线程2,使用线程32-ZYNQU-平均 1m08.5s 28.5s 2m10s 3m47s

2.2 最大线程32,使用线程32

CPU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程32-CPU-1 0 1m22s 1m46s 3m08s
最大线程32,使用线程32-CPU-2 0 1m22s 1m48s 3m10s
最大线程32,使用线程32-CPU-平均 0 1m22s 1m47s 3m09s

MB


实验编号 OOC 综合 实现 合计
最大线程32,使用线程32-MB-1 3m07s 26s 4m28s 8m01s
最大线程32,使用线程32-MB-2 3m08s 26s 4m27s 8m01s
最大线程32,使用线程32-MB-平均 3m07.5s 26s 4m27.5s 8m01s

ZYNQU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程32-ZYNQU-1 1m09s 29s 1m58s 3m36s
最大线程32,使用线程32-ZYNQU-2 1m09s 29s 1m58s 3m36s
最大线程32,使用线程32-ZYNQU-平均 1m09s 29s 1m58s 3m36s

2.3 最大线程32,使用线程16

CPU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程16-CPU-1 0 1m22s 1m46s 3m08s
最大线程32,使用线程16-CPU-2 0 1m21s 1m46s 3m07s
最大线程32,使用线程16-CPU-平均 0 1m21.5s 1m46s 3m07.5s

MB


实验编号 OOC 综合 实现 合计
最大线程32,使用线程16-MB-1 3m19s 26s 4m28s 8m13s
最大线程32,使用线程16-MB-2 3m21s 26s 4m27s 8m14s
最大线程32,使用线程16-MB-平均 3m20s 26s 4m27.5s 8m13.5s

ZYNQU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程16-ZYNQU-1 1m09s 28s 2m00s 3m37s
最大线程32,使用线程16-ZYNQU-2 1m10s 29s 1m59s 3m38s
最大线程32,使用线程16-ZYNQU-平均 1m09.5s 28.5s 1m59.5s 3m37.5s

2.4 最大线程32,使用线程8

CPU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程8-CPU-1 0 1m21s 1m45s 3m06s
最大线程32,使用线程8-CPU-2 0 1m21s 1m46s 3m07s
最大线程32,使用线程8-CPU-平均 0 1m21s 1m45.5s 3m06.5s

MB


实验编号 OOC 综合 实现 合计
最大线程32,使用线程8-MB-1 3m49s 26s 4m32s 8m47s
最大线程32,使用线程8-MB-2 3m50s 26s 4m32s 8m48s
最大线程32,使用线程8-MB-平均 3m49.5s 26s 4m32s 8m47.5s

ZYNQU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程8-ZYNQU-1 1m20s 29s 1m58s 3m47s
最大线程32,使用线程8-ZYNQU-2 1m19s 29s 1m58s 3m46s
最大线程32,使用线程8-ZYNQU-平均 1m19.5s 29s 1m58s 3m46.5s

2.5 最大线程32,使用线程4

CPU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程4-CPU-1 0 1m22s 2m08s 3m30s
最大线程32,使用线程4-CPU-2 0 1m22s 2m08s 3m30s
最大线程32,使用线程4-CPU-平均 0 1m22s 2m08s 3m30s

MB


实验编号 OOC 综合 实现 合计
最大线程32,使用线程4-MB-1 5m36s 26s 4m34s 10m36s
最大线程32,使用线程4-MB-2 5m37s 27s 4m33s 10m37s
最大线程32,使用线程4-MB-平均 5m36.5s 26.5s 4m33.5s 10m36.5s

ZYNQU


实验编号 OOC 综合 实现 合计
最大线程32,使用线程4-ZYNQU-1 1m52s 29s 1m59s 4m20s
最大线程32,使用线程4-ZYNQU-2 1m52s 29s 1m59s 4m20s
最大线程32,使用线程4-ZYNQU-平均 1m52s 29s 1m59s 4m20s

三、实验结果统计与分析

实验条件/平均编译时间/示例工程 CPU MB ZYNQU
最大线程2,使用线程32 3m28s (+10.1%) 8m37s (+7.5%) 3m47s (+5.1%)
最大线程32,使用线程32 3m09s 8m01s 3m36s
最大线程32,使用线程16 3m07.5s (-0.8%) 8m13.5s (+2.6%) 3m37.5s (+0.7%)
最大线程32,使用线程8 3m06.5s (-1.3%) 8m47.5s (+9.7%) 3m46.5s (+4.9%)
最大线程32,使用线程4 3m30s (+11.1%) 10m36.5s (+32.3%) 4m20s (+20.4%)

基于以上表格数据进行分析,可以得到如下结论:

  1. 最大线程设置有用,设置成2确实拖慢了Vivado编译速度,所以,必须把最大线程设到最大值32并设置成Vivado启动自动设置;
  2. 使用线程对Vivado编译速度同样有影响,应该设置成CPU最大线程
  3. Vivado最多能利用的线程数应该是16,可以发现使用线程32和16,两者编译时间几乎没区别。

本文测试结果仅供参考。

四、测试工程分享

本系列文章的所有测试工程,如下图所示。

均通过网盘分享。

欢迎大家关注我的微信公众号:徐晓康的博客,回复以下6位数字获取网盘链接。

981520

建议复制过去不会码错字!


如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。

如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
目录
0
希望看到您的想法,请您发表评论x