riple

Stay Hungry, Stay Foolish.

海外捉虫记—如何解决license冲突问题

0
阅读(2046)

我们一个组的人,只有一个浮动license,这是节省成本的好方法。但是经常会出现因为license冲突导致的编译失败问题。

由于编译时间较长,往往启动编译程序后人就走开干别的事情去了。几十分钟之后回来,发现要么是Analysis and Synthesis失败,要么就是Assembler失败。在Quartus II里面,这两个步骤是要检查license是否有效的。如果无效,在第一步里会直接读取下一个源文件,当前文件就被跳过了,编译结果显示为失败;在第二 步里,程序会尝试10多次,如果之后还检查不到license,就会进入下一步,编译结果显示为成功。后一种情况最难防范,如果不在编译结束后检查sof 文件的生成时间,误用了上一次编译生成的二进制文件,后果就会很严重。

其实,在一次全编译过程中,这两个步骤占用的时间只占到20%左右。也就是说,顺序执行全编译的话,license的利用效率只有20%。如果安排 得当,一个license可以支持5个交替穿插的编译工作。这样,license的利用效率就可以达到100%。

实现这一目标有两种方法:

1. 利用Quartus II的Smart Recompile功能和命令行分步编译功能。把每一个工程编译过程的第一步,即Analysis and Synthesis,排队先后执行;暂不执行Fitter;待需要编译的所有工程的第一步都执行完成后,同时启动所有的Fitter;待所有的 Fitter完成后,排队启动Assembler。这样做的前提是,你的处理器是多核的,写一个批量编译的脚本。根据处理器的能力和需要编译工程的个数, 可以统筹一下,找到最佳组合。这是“统筹法”。

2. 编写一个脚本,在需要license的步骤前加入检查license是否可用的程序,或者在该步骤失败后进行失败检查。如果license可用,则执行该 步骤;如果license暂时不可用,或者该步骤失败,重新启动该过程,一直查询到该步骤成功,然后执行下一步。这样做的前提是,要么掌握检查 license是否可用的方法,要么掌握检查分步编译结果的方法。这是“竞争法”。

第一种方法适合于批量定时编译,第二种方法适合于多人随机编译。

相关链接:

How to maximize license utilization?这里介绍的方法真的很好用!

Altera Licensing

Altera Software Licensing Options

AN 340: Altera Software Licensing

Baidu
map