有几种实现多线程的方法。C++11标准引入了
我也知道选择一种技术并不是互斥的,因此可以使用另一种技术(再次使用MPI和OpenMP)。它们如何用于不同的效果,但仍然与相同的源代码(CPU)一起工作呢?
如果我使用基于这些技术之一的并行编译C ++程序,从操作系统和硬件角度来看,差异会是什么?例如,OpenMP或
std::thread
,但是可以有效地使用boost::thread
。每种技术都有特定的语法和用途,但大致上用于CPU并行编程。但它们具有不同的效果。我知道,例如,MPI和OpenMP用于不同的内存模型。我也知道选择一种技术并不是互斥的,因此可以使用另一种技术(再次使用MPI和OpenMP)。它们如何用于不同的效果,但仍然与相同的源代码(CPU)一起工作呢?
如果我使用基于这些技术之一的并行编译C ++程序,从操作系统和硬件角度来看,差异会是什么?例如,OpenMP或
std::thread
是否使用POSIX线程?如果是这样,C ++11的线程在Windows上如何工作?还是每种技术直接通过汇编语言或其他方式与CPU一起工作?
std::thread
)混合使用不是指定行为。规范中没有明确禁止这样做。但它是否有效仍然非常依赖于具体实现。将MPI与OpenMP或其他线程范式结合使用是可以的,只要MPI以支持线程的方式正确初始化即可。 - Hristo Iliev