2010-10-12 135 views
2

我正在尝试用于大型数据处理的openMP,而且它相对较新。我的输入数据集非常庞大,所以我将它分成多个子集,每个线程都处理数据的子集。该子集中的每个数据项都由该线程起作用。如果其中一个线程在任何数据项操作期间失败,我想终止其他线程并返回失败。使用共享变量是一个选项,但有没有更好的方法来做同样的事情?OpenMP:是否有线程终止所有其他并行线程的方法?

回答

2

如果其中一个线程在其输入上扼流圈发生了什么?你想让程序突然停止吗?或者你想停止并行执行并让程序的串行部分整理好?

OpenMP并不是真的为任何一种操作设计,所以你会努力反抗它,而不是像大多数初学者一样挣扎着。正如您所建议的那样,您当然可以使用共享变量并编写自己的逻辑来停止程序,或者如果其中一个线程发生故障,则跳至并行区域的末尾。但是这些操作没有OpenMP内在机制。

您可能想要调查OpenMP 3.0的新功能task。使用这些,你当然可以实现一个系统,将任务分派给返回成功或失败的线程,并执行其他处理失败的任务。

最后,有人可能会认为不好的输入不应该导致程序崩溃,但这是另一个话题。

+0

感谢您的回答,我认为使用共享变量现在看起来像是我的选择。 – 2010-10-13 04:21:52

相关问题