我想将我的数独求解器程序与MPI并行化。当前的串行代码依赖于深度优先搜索的回溯。我做了一些研究,但我仍然不确定该怎么做。 有人说程序必须先进行广度优先搜索才能在主进程中获取一些数据,然后对这些数据使用从属进程。因此,从属进程将使用此数据进行深度优先搜索。
此外,我看到一些深度优先搜索并行化示例使用工作共享或工作窃取方法。但是在数独的情况下,由于数独的解决方法,我不确定使用这种技术可以处理进程关系,工作队列和进程大小。
有什么想法吗?
谢谢。
答案 0 :(得分:3)
这不是与Sudoku有关的答案,更多的是指定您的串行算法使用深度优先搜索。深度优先搜索是一个已知为difficult to parallelize的问题,尽管看起来不是“固有连续”。
然而,存在并行DFS实现。例如,此1987 paper表示并行DFS算法。一般原则是每个处理器搜索不同的路径集,直到它到达叶子(或任意搜索深度),并且当它完成它的路径子集时,选择一个新的未探索分支。
如果您热衷于实现并行DFS,我建议您阅读该文章并实施该算法。但是我认为可能有更多智能并行数独算法不使用DFS,例如它可以使用约束传播来解决。