Multithreading 在on-pthread、Intel-TBB、openmp中,哪个库更通用、更灵活? 我想学习C++中的多核编程,你能给我推荐一些笔记吗? pthread、Intel-TBB和openmp之间有什么区别?哪个库可以更有效地使用英特尔CPU?谢谢。< P>标准,C++现在有了多线程的本地支持,不需要任何外部库。它已经在Visual Studio 2012、Gcc 4.7+和Clang上可用

Multithreading 在on-pthread、Intel-TBB、openmp中,哪个库更通用、更灵活? 我想学习C++中的多核编程,你能给我推荐一些笔记吗? pthread、Intel-TBB和openmp之间有什么区别?哪个库可以更有效地使用英特尔CPU?谢谢。< P>标准,C++现在有了多线程的本地支持,不需要任何外部库。它已经在Visual Studio 2012、Gcc 4.7+和Clang上可用,multithreading,pthreads,openmp,multicore,tbb,Multithreading,Pthreads,Openmp,Multicore,Tbb,关于您的其他问题: pthread(代表“POSIX线程”)是用于POSIX(即Unix/Linux)系统的多线程库。它只执行多线程,因为POSIX已经支持多任务(即通过fork原语)。它适用于所有运行POSIX操作系统的硬件平台(例如台式机、嵌入式Linux等) 是一个可移植的库,用于C/C++和Fortran中的多核编程。最新版本是4.0,它还支持异步调用 在英特尔体系结构上支持Windows和Linux。在不同于英特尔(如ARM)的平台上运行TBB相当复杂(请参阅) >P>标准,C++

关于您的其他问题:

  • pthread(代表“POSIX线程”)是用于POSIX(即Unix/Linux)系统的多线程库。它只执行多线程,因为POSIX已经支持多任务(即通过fork原语)。它适用于所有运行POSIX操作系统的硬件平台(例如台式机、嵌入式Linux等)

  • 是一个可移植的库,用于C/C++和Fortran中的多核编程。最新版本是4.0,它还支持异步调用

  • 在英特尔体系结构上支持Windows和Linux。在不同于英特尔(如ARM)的平台上运行TBB相当复杂(请参阅)

  • >P>标准,C++现在有了多线程的本地支持,不需要任何外部库。它已经在Visual Studio 2012、Gcc 4.7+和Clang上可用

    关于您的其他问题:

    • pthread(代表“POSIX线程”)是用于POSIX(即Unix/Linux)系统的多线程库。它只执行多线程,因为POSIX已经支持多任务(即通过fork原语)。它适用于所有运行POSIX操作系统的硬件平台(例如台式机、嵌入式Linux等)

    • 是一个可移植的库,用于C/C++和Fortran中的多核编程。最新版本是4.0,它还支持异步调用

    • 在英特尔体系结构上支持Windows和Linux。在不同于英特尔(如ARM)的平台上运行TBB相当复杂(请参阅)


      • 这三件事是完全不同的。Pthreads是许多符合POSIX规范的现代Unix操作系统的本机线程API,包括但不限于Linux、OS X、FreeBSD和Solaris。另外还有一个Windows的Pthreads实现,它的支持很差,而且运行得不是很好(Windows有自己的本机Win32线程API)。Pthreads被设计为支持一般的线程场景,并且用它构建并行处理应用程序的价格非常高(以代码行的数量为单位)

        英特尔TBB是一种可移植的开源C++库,用于共享内存体系结构的并行数据处理,实现任务和任务流。这与新的C++ LAMBDAS(匿名代码块)结合起来工作得特别好。该库可以使用许多不同的编译器和不同的体系结构构建。在POSIX系统上,TBB构建在Pthreads之上,作为底层线程API

        OpenMP是对C/C++和Fortran的基于指令的扩展,支持共享内存体系结构上的数据和任务并行。它不是一个库,而是一个语言扩展,需要启用OpenMP的编译器。几乎所有的现代C++编译器-除了CLAN-OpenMP支持的显著例外,包括PGI、Oracle和MSVC++编译器和GCC。在POSIX系统上,OpenMP运行时构建在pthread之上。版本4.0支持加速器设备,例如GPU和英特尔至强Phi等协处理器


        在这三种方法中,英特尔TBB是最灵活的,而OpenMP是最容易学习的。Pthreads既不可移植(例如,在Windows上不受支持),也不易于学习。正如Claudio已经提到的,C++11包含自己的线程原语,使用Pthreads在POSIX系统上实现。但它们更像是围绕线程API的语言抽象,而不是像ITBB和OpenMP这样的并行处理库/扩展。

        这三个是完全不同的东西。Pthreads是许多符合POSIX规范的现代Unix操作系统的本机线程API,包括但不限于Linux、OS X、FreeBSD和Solaris。另外还有一个Windows的Pthreads实现,它的支持很差,而且运行得不是很好(Windows有自己的本机Win32线程API)。Pthreads被设计为支持一般的线程场景,并且用它构建并行处理应用程序的价格非常高(以代码行的数量为单位)

        英特尔TBB是一种可移植的开源C++库,用于共享内存体系结构的并行数据处理,实现任务和任务流。这与新的C++ LAMBDAS(匿名代码块)结合起来工作得特别好。该库可以使用许多不同的编译器和不同的体系结构构建。在POSIX系统上,TBB构建在Pthreads之上,作为底层线程API

        OpenMP是对C/C++和Fortran的基于指令的扩展,支持共享内存体系结构上的数据和任务并行。它不是一个库,而是一个语言扩展,需要启用OpenMP的编译器。几乎所有的现代C++编译器-除了CLAN-OpenMP支持的显著例外,包括PGI、Oracle和MSVC++编译器和GCC。在POSIX系统上,OpenMP运行时构建在pthread之上。版本4.0支持加速器设备,例如GPU和英特尔至强Phi等协处理器

        在这三种方法中,英特尔TBB是最灵活的,而OpenMP是最容易学习的。Pthreads既不可移植(例如,在Windows上不受支持),也不易于学习。正如Claudio已经提到的,C++11包含自己的线程原语,使用Pthreads在POSIX系统上实现。但这些更像是围绕线程API的语言抽象,而不是像ITBB和OpenMP这样的并行处理库/扩展。

        谢谢,