首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMP、MPI、POSIX线程、std::线程、boost::线程是如何关联的?

OpenMP、MPI、POSIX线程、std::线程、boost::线程是如何关联的?
EN

Stack Overflow用户
提问于 2014-04-23 18:43:23
回答 1查看 2.5K关注 0票数 6

有几种实现多线程的方法。std::thread最终是由C++11标准带来的,但是boost::thread可以被有效地使用。每种技术都有特定的语法和内容,但大致用于CPU并行编程。但它们有不同的效果。我知道,例如,MPI和OpenMP用于不同的内存模型。

我还知道,技术的选择实际上并不是排他性的,因此可以使用另一种技术(同样,MPI和OpenMP)。为什么它们被用于不同的效果,但仍然使用相同的源(CPU)?

(从操作系统和硬件的角度来看),如果我根据这些技术中的每一种技术编译具有并行性的C++程序,会有什么不同?例如,OpenMP或std::thread是否使用POSIX线程?如果是这样的话,C++11的线程是如何在Windows上工作的?或者这些技术中的每一种都是通过汇编语言或其他方式直接与CPU协同工作的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 18:47:51

OS提供线程(syscalls用于创建新线程;调度服务)。

Unix在操作系统线程上有包装器,具有许多有用的功能(如互斥、cond等)。这类系统库的外部接口通常是"POSIX线程“(函数名为pthread_*):线程

Windows有自己的硬线程API (WINAPI的CreateThread等).但是Windows有一些包装器来获得类似POSIX线程API的内容(例如,mingw32和cygwin都有这样的库;请检查维基百科)

C++11 std::thread,boost的boost::thread只是与操作系统无关的系统线程API包装器。它们用于创建可移植程序,这些程序可以在任何受支持的平台上编译,而无需创建#ifdef地狱和/或在系统线程库周围编写自己的自定义包装器。如果您正在创建新程序,请考虑使用这种方式。

还有其他几个线程包装,例如,包含在图形库中,如QT或GTK+。

OpenMP实现有内部支持库(例如,gcc有libgomp),它使用system/libc线程API,例如libgomp使用POSIX线程。一些实现还可以包括通过组装(M:N线程模型)进行用户空间线程切换。

MPI里面没有线程库。MPI用于创建多个进程并在它们之间建立通信。但是在多线程程序中使用MPI时,它将使用一些线程API来进行同步。例如,MPICH将在unix上使用p线程。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23252687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档