背景介绍
上回书说到《“模拟退火算法的并行化”之“什么是模拟退火算法”》,还记得最后我说:
[模拟退火算法]很难并行化,但并不是不可以。模拟退火的执行是序列性的,从上面的代码就可以看出,一个解是在前面解的基础上产生的。它明显不是一个自然并行的程序(矩阵相乘就是自然并行的程序),它的并行化也是另外一篇博客的主题。
这篇博客就是以模拟退火算法的并行化为主题的。
小编进入公司后的第一个任务是有关UCF的处理,请参见小编拙文《有关UCF解析器系统架构的设计》。其后,老板给了我一个“硬骨头”啃,没办法,刚来公司不久,人生地不熟的,没人愿意让出自己的“肉肉”来。不过机会总是给“有野心的人”的,哈哈,应该是“有准备的人”。“骨头”虽硬,但不失为一次有力的表现自己实力的机会。
为什么,我把这次任务叫做“硬骨头”呢?其实是有些道理的。在我来公司之前,他们已经实现了模拟退火算法,但囿于算法本身的运行效率不高,再加上实现上可能存在的问题,他们的模拟退火算法很慢,和Xilinx公司的布局工具相比差得太多。所以他们就在原有算法基础上尝试进行并行化处理,主要的思路来自于下面的文献:
Ludwin, A., Betz, V., Padalia, K. 2008. High-Quality, Deterministic Parallel Placement for