05-11-2020 06:39 AM - edited 05-11-2020 06:45 AM
Recently I came up with this problem that when the same project was build using GUI it has a better timing performance (High positive WNS value) against when I build the same project using TCL shell mode. Both builds are using the same configuration for implementation. Following is the Build configuration I use.
TCL shell mode:
synth_design -top itch_top -part xcku095-ffva1156-2-e opt_design -directive Explore place_design -directive Explore phys_opt_design -directive Explore route_design -directive Explore -tns_cleanup phys_opt_design -directive AggressiveExplore write_checkpoint -force post_route.dcp
FPGA: Xilinx kintex ultrascale
Is this usual ? As I use jenkins to automate the build, tcl shell mode is critically important to me. Anyone got some insight on this ?
05-11-2020 07:03 AM
Hi @randikae ,
This seems to tool repeatability issue.
Vivado should generate identical results between runs involving identical:
Please check this AR#:
Also which vivado version you are working with?
05-11-2020 07:51 AM
Thank you for the reply.
I am using Vivado 2017.2
Yes the build results are identical between runs but only when using the same method. The difference between these two methods are consistant.
05-11-2020 08:14 AM - edited 05-11-2020 08:15 AM
05-11-2020 09:31 PM
For now it is difficult for me to get through the permission to post the dcp you asked.
I Noticed that my GUI build had run with general.maxThreads = 2 and tcl shell mode run with general.maxThreads = 8
(Please note that the better performance was in GUI mode).
My CPU is intel Xeon E3-1220 (4 Core) and the RAM is 64GB.
Can lower general.maxThreads parameter resulted with higher performance, If so how to choose the best threadcount ?
05-11-2020 10:27 PM
The lower the thread count the higher repeatability of results you get in each runs. Hence, try to set 1 max thread for both tcl mode and GUI mode and observe that you see different values or not. - I believe it will help in this issue. But, it may affect your performance. (So if you are looking for repeatability only then you can use this suggest and also refer that AR which @rshekhaw had mentioned above.)
To do optimum usage of your machine/cores, you can check how many cores are present in your server machine by doing nproc command. And then you can set set_param general.maxThreads <number of cores>.
Also, now it depends that whether your design requires a high number of cores to run a specific phase of design or not. - This point will get decided by the tool itself.