微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将OpenMP与pthreads混合使用

我的问题是将OpenMP与pthreads混合使用是否是一个好主意。 那里有结合这两个应用程序。 混合这两个是一个好的做法吗? 或者典型的应用程序通常只使用其中的一个

是否可以从terminal运行一个程序,并让它在closuresterminal后继续运行?

Window.Show()不显示控件,但Window.ShowDialog()做2

Qt / CMake:在标识符'slots'`之前缺less':'

如何从C ++中的一个扬声器播放声音?

在Linux上提升windows_shared_memory

通常最好只使用一个或另一个。 但至少对我自己来说,我经常把两者混合在一起,如果正确的话,这是安全的。

最常见的情况是我有一个使用pthreads进行线程化的低级库,但是我在使用OpenMP的用户应用程序中调用它。

有些情况下不安全。 例如,如果您在该线程中退出所有OpenMP区域之前终止了一个pthread。

我不这么认为

这不是一个好主意。 看到的事情是,OpenMP基本上是为了便携性而做的。 现在,如果你使用pthread,那么你正在失去它的本质!

pthread只能由POSIX兼容的操作系统支持。 虽然OpenMP可以在任何操作系统上虚拟使用,只要他们有支持

无论如何,OpenMP给你的抽象比pthead提供的要高得多。

没问题。

OpenMP和pthreads的用途是不同的。 OpenMP是编写循环级并行的完美选择。 但是,OpenMP不足以表达复杂的线程通信和同步。 OpenMP不支持各种同步,如条件变量。

正如Mystrical所指出的那样,在OpenMP并行结构中处理和访问本地线程。

仅供参考,英特尔的TBB和cilk Plus也经常以混合方式使用。

在Windows和Linux上,它似乎工作得很好。 但是,如果OpenMP在新线程中运行,则在Mac上不起作用。 它只在主线程中起作用。

似乎没有定义如何混合两个线程模块的行为。 一些平台/编译器支持它,而另一些则不支持

当然。 我一直这样做。 你必须要小心。 为什么呢? 因为有些情况下你必须! 在复杂的任务模型中,比如想要保持管道运行的流水线功能,它可能是利用所有可用功率的唯一方法

如果您已经使用OpenMP,我发现非常难以使用pthread。 您可以使用部分编译指令来运行具有不同功能的程序。 我个人用它来实现流水线并行。

现在,OpenMP比pthread多得多,所以如果你使用OpenMP,你会被覆盖。 例如,GCC 5.0 forward实现OpenMP扩展,将代码导出到GPU。 :d

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐