Vivado的加速之路:Launch runs on Remote hosts

天锦 发表于 码农也得有格调 分类,标签: Vivado的加速之路

最近在学习Xilinx公司的FPGA,Vivado是Xilinx公司的FPGA开发工具,用过的朋友都会对其深有感悟,慢!还是慢!

改个参数,5分钟起步~苦不堪言,决定尝试研究加速Vivado的门路。

首先说一下我的系统配置吧

CPU:E5-2650L V2 (10核20线程,1.7GHz)
内存:16GB DDR3L 1333MHz
系统:Windows Server 2019 DC

开始以为每次综合/实现时弹出的对话框中的Number of Jobs就是多线程控制,拉到16应该就会快了吧

1.png

然鹅~依旧是1核有难,19核围观,惨不忍睹~

2.png

实现用时1分48秒!

百度!就查到Windows系统下vivado默认是使用2个线程编译工程,使用get_param general.maxThreads查询,还真是!

get_param general.maxThreads
2

按照查到的博客上的方法,使用set_param general.maxThreads设置最大线程数,我的电脑是10核20线程,我就先设成10试试

set_param general.maxThreads 10

结果是1分钟51秒左右,换成20线程试试,还是1分51秒!FFFFFFFFFFFk!

看来设置general.maxThreads是无效的,根本起不到加速的作用!在测试的时候我专门注意了一下各个CPU核心的占用率,总结得出:双核高频最吼!

就在此时,想起了之前一个视频教程,用的是Ubuntu,好像要快一点,随即将系统换成Ubuntu 18.04,同配置,实现起来确实要比Windows快那么一点点,但是也不怎么明显。快了5~10秒那个样子。既然是双核搞主频,那就上酷睿。先在我的笔记本上做测试,装了Ubuntu 18.04,系统配置如下:

CPU:Core i5-3320M (2核4线程,2.6GHz)
内存:16GB DDR3L 1333MHz
系统:Ubuntu 18.04 LTS

结果快了一倍,证实了Vivado需要的是高主频CPU,堆核心的方法无用!

Launch runs on remote hosts

在用Ubuntu综合实现的过程中偶然看到了这个Launch runs on remote hosts,可以在远程主机上进行综合、实现?如果真的可以这样,那就可以准备一台主频很高的机器当服务器跑着就行了,轻便本也能搞综合了,岂不美哉!抱着百度一下就知道的心态搜了一下,只有两个Xilinx论坛的帖子在讨论无法使用外,没有其他相关的结果……看来这个功能只能自己摸索了……

4.png

先勾选了Launch runs on Remote hosts,点Configure Hosts进去看看是啥吧。

5.png

看到了有手动配置跟LSF配置,去百度搜索了一下,LSF是IBM Platform LSF,IBM的一个作业调度系统,应该是跟超算有关的,顺着LSF关键字竟然搜到了中科大超算中心、中科院超算中心……这玩意儿太高级了咱一时半会玩不了,先试着手动配置一个远程主机吧……

更新:关于LSF集群后续有研究 >这里< 可以参考。

点了ADD之后只有Enter Name For Host……emmm这好像不科学,输了名字就可以了???没这么简单吧!试了一下,还真没这么简单!

Connection test failed for host 'xxxxxxx'
Launch test failed on host 'xxxxxxx' using command 'ssh -q -o BatchMode=yes'

跟先前在Xilinx官网搜到的问题如出一辙!我好像摸对门路了!随即在Xilinx官网搜索有关Remote Hosts的相关信息,找到了“Vivado Design Suite User Guide Implementation”这个用户手册,在文档的176页提到了关于Using Remote Hosts and LSF的介绍。关子就不卖了,简单总结起来要点有三个

1.vivado的路径要在环境变量中设置到位

2.ssh实现免密登录(这个我在先前Lsync部署中也提到过)

3.统一文件路径和文件一致。

这个具体怎么个叫法我不是很清楚,但是这个确实是最大的坑,这一点如果没有配置好的话你会发现连接成功,没有报错,但是远程主机就是没有任何动作,不会进行综合和实现,CPU利用率稳稳的1%,发起综合和实现的vivado在发起作业之后界面就显示Ready就没有下文了。文档原文是这么提到的:

Vivado IDE installation must be visible from the mounted file systems on remote machines. If the Vivado IDE installation is stored on a local disk on your own machine, it might not be visible from remote machines. 

Vivado IDE project files (.xpr) and directories (.data and .runs) must be visible from the mounted file systems on remote machines. If the design data is saved to a local disk, it might not be visible from remote machines.

设置环境变量

注意:本地账户名应与远程机器的账户名一致,这里以user为例。

这个就很简单了,直接vim /etc/profile,文件最后一行添加

export PATH=$PATH:/tools/XilinxVivado/2018.3/bin

就行了。

SSH免密码登录

参考《Lsync从入门到骚操作》中提到的免密登录,远程主机开启免密登录,本地主机生成rsa密钥并上传到远程主机三步实现免密登录。

要实现远程同步的前提是要开启ssh免密码登陆,编辑sshd_config

[user@remote ~]# vim /etc/ssh/sshd_config

删除PubkeyAuthentication和RSAAuthentication前面的#

PubkeyAuthentication yes
RSAAuthentication yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

重启sshd

[user@remote ~]# service sshd restart

在本地机器中生成账户的rsa公钥及id,并将公钥上传至远程服务器

[user@local ~]$ ssh-keygen -t rsa

一路回车即可,生成完后将公钥上传至备份服务器

[user@local ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote

期间会要求你输入user@remote的密码,当提示

Now try logging into the machine, with:   "ssh 'user@remote'"
and check to make sure that only the key(s) you wanted were added.

就可以使用

[user@local ~]$ ssh user@remote

尝试无密码登陆至远程服务器,当可以通过无密码登陆到远程服务器后,再到Vivado中手动配置远程主机,CentOS系统就可以正常连接了,但是如果你用的是Ubuntu系统的话还是连接不成功的,原因出再Ubuntu的dash!远程、本地都运行一遍一下命令即可成功连接。

[user@local ~]$ sudo dpkg-reconfigure dash

统一文件

这个坑了我一下午,最后还是看到了手册的提示才明白的,本地的文件如何提交到远程?远程执行的结果如何返回到本地?要如何保证远程读到的文件就是本地正在编辑的文件?共享!这个最简单了!

远程端在user家目录下建一个project目录用于共享

[user@remote ~]$ mkdir /home/user/project

安装nfs-server以用于nfs共享

[user@remote ~]$ sudo apt install nfs-kernel-server nfs-common -y

编辑/etc/exports以设置共享

[user@remote ~]$ sudo apt install nfs-kernel-server nfs-common -y
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
home/user/project         *(rw,no_root_squash,sync,no_all_squash)

重启nfs

本地端安装nfs-common挂载远程目录到本地,注意:路径要相同!

[user@local ~]$ sudo apt install nfs-kernel-server nfs-common -y
[user@local ~]$  mkdir /home/user/project
[user@local ~]$  mount -t nfs remote_ip:/home/user/project /home/user/project

把vivado的工程文件都放到建立的这个project目录下,即实现了路径统一且文件实时一致,本地端在提交了jobs之后,本地端界面反馈会稍有迟钝,但通过观察远程机CPU使用率判断得远程机已经开始进行综合或者实现,2~3s后会在本地vivado界面看到远程jods正在进行。

最后附上参考的手册

ug904-vivado-implementation.7z

文章备注:天锦原创,谢绝转载!

6 篇评论

发表我的评论