0

在 C++ 中使用 openMP 时,我再次陷入困境。这次我试图实现一个并行的 Hanoi Tower 。

子河内(n,D,A,I)
    如果 n =1
    然后
        将磁盘 D 移动到 A
    别的              
        河内(n-1,D,I,A)
        将磁盘 D 移动到 A
        河内(n-1,I,A,D)
    结尾
端子

如何使用 OpenMp 的指令使该算法并行化?

4

2 回答 2

3

我不认为这个算法可以是 OpenMPed,而且我怀疑任何 hanoi 解决方案算法的塔中都有很多并行性。尽管此解决方案是递归的,但与(例如)快速排序不同,它不适合基于任务的分解;没有两个分支可以独立完成。而且我怀疑以不同的方式编写算法会很重要。在任何给定时间,您都希望将一个磁盘从一堆移动到另一堆(例如,从 1 到 2)。发生这种情况时,您无法移动第 2 堆中的磁盘,并且在移动顶部磁盘之前,您无法移动第 1 堆下方的磁盘。这只在系统中留下另一个顶部磁盘,在第 3 堆中,可以使用,并且将它从第 3 堆移动到第 3 堆是无操作的,所以我只是看不到这里有任何可能的并行性。

也许如果你正在做一些超过 3 堆的广义问题,你可以做一些事情,但我仍然认为这并不容易。

于 2012-04-02T12:46:08.207 回答
2

tasks使用在 v3.0 中添加到规范中的OpenMP 。如果您再次遇到问题,请发布您的代码。

于 2012-04-02T09:30:39.313 回答