在 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 的指令使该算法并行化?
在 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 的指令使该算法并行化?
我不认为这个算法可以是 OpenMPed,而且我怀疑任何 hanoi 解决方案算法的塔中都有很多并行性。尽管此解决方案是递归的,但与(例如)快速排序不同,它不适合基于任务的分解;没有两个分支可以独立完成。而且我怀疑以不同的方式编写算法会很重要。在任何给定时间,您都希望将一个磁盘从一堆移动到另一堆(例如,从 1 到 2)。发生这种情况时,您无法移动第 2 堆中的磁盘,并且在移动顶部磁盘之前,您无法移动第 1 堆下方的磁盘。这只在系统中留下另一个顶部磁盘,在第 3 堆中,可以使用,并且将它从第 3 堆移动到第 3 堆是无操作的,所以我只是看不到这里有任何可能的并行性。
也许如果你正在做一些超过 3 堆的广义问题,你可以做一些事情,但我仍然认为这并不容易。
tasks
使用在 v3.0 中添加到规范中的OpenMP 。如果您再次遇到问题,请发布您的代码。