【发布时间】:2014-04-23 18:43:23
【问题描述】:
有几种方法可以实现多线程。 std::thread 最终由 C++11 标准带来,但可以有效地使用 boost::thread。每种技术都有特定的语法和内容,但 - 粗略地 - 用于 CPU 并行编程。但是它们有不同的效果。我知道,例如,MPI 和 OpenMP 用于不同的内存模型。
我还知道,一种技术的选择实际上并不是排他性的,因此可以使用另一种技术(同样,MPI 和 OpenMP)。为什么它们用于不同的效果,但仍然使用相同的源(CPU)?
如果我基于每种技术编译具有并行性的 C++ 程序,会有什么不同(从操作系统和硬件的角度来看)?例如,OpenMP 或 std::thread 是否使用 POSIX 线程?如果是这样,C++11 的线程如何在 Windows 上工作?还是这些技术中的每一个都通过汇编语言或其他方式直接与 CPU 一起工作?
【问题讨论】:
-
将 OpenMP 与另一个线程范式混合,例如
std::thread,不是指定的行为。规范中没有明确禁止。但它是否有效仍然是非常特定于实现的。将 MPI 与 OpenMP 或其他线程范例相结合是可以的,只要 MPI 正确初始化并支持线程。
标签: c++ multithreading posix openmp stdthread