我的问题是将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] 举报,一经查实,本站将立刻删除。