我想学习c ++中的多核编程,你能给我推荐一些笔记吗?
pthread
,Intel TBB
和openmp
之间有什么区别?哪个库可以更有效地使用Intel CPU
?感谢。
答案 0 :(得分:5)
这三个是完全不同的东西。 Pthreads是许多符合POSIX规范的现代Unix操作系统的本机线程API,包括但不限于Linux,OS X,FreeBSD和Solaris。对于Windows,还有一个支持严重且不太好的Pthreads实现(Windows有自己的本机Win32线程API)。 Pthreads旨在支持通用线程场景,并以非常高的代价(代码行数)构建并行处理应用程序。
Intel TBB是一个可移植的开源C ++模板库,用于在共享内存架构上进行并行数据处理,并实现任务和任务流。这与新的C ++ lambdas(匿名代码块)结合使用效果特别好。可以使用许多不同的编译器和不同的体系结构构建库。在POSIX系统上,TBB构建在Pthreads上作为底层线程API。
OpenMP是C / C ++和Fortran的基于指令的扩展,支持共享内存架构上的数据和任务并行。它不是库,而是语言扩展,需要启用OpenMP的编译器。事实上,所有现代C ++编译器 - 除了Clang之外 - 都支持OpenMP,包括PGI,Oracle和MSVC ++编译器以及GCC。在POSIX系统上,OpenMP运行时构建在Pthreads之上。版本4.0支持加速器设备,例如GPU和协处理器,如Intel Xeon Phi。
在这三者中,英特尔TBB是最灵活的,而OpenMP是最容易学习的。 Pthreads既不可移植(例如Windows上支持不当),也不容易学习。正如Claudio已经提到的,C ++ 11包含了自己的线程原语,使用Pthreads在POSIX系统上实现。但这些更像是线程API的语言抽象,而不是像ITBB和OpenMP这样的并行处理库/扩展。
答案 1 :(得分:3)
使用C++11标准,C ++现在支持多线程,无需任何外部库。它已经在Visual Studio 2012,Gcc 4.7+和Clang上提供。
关于您的其他问题: