`

并行编程下Windows* 线程, OpenMP*, Intel® Threading Building Blocks的对比

阅读更多

这是一个有意思的话题当我们计 划在多核系统下应用并行编程来最大化地利用处理器时,这意味着我们想把一个大的串行任务分割成一些小任务并让它们同时运行。

下一个问题是我们应用使用什么 方法?这里有三个选择-一、传统的Windows* 线程; 二、OpenMP*; 三、Intel® Threading Build Blocks (后文简称TBB)。很难说哪个好哪个坏,这和开发者有关。比如,如果开发者之前没有并行编程的经验,那么如果开发者不想学Windows* 线程的话可以使用 OpenMP* 和 TBB。OpenMP* 的优势是代码清洁并且易于维护。TBB 同样很有帮助,开发者不需要知道线程如何工作,仅仅把你的任务提交给TBB,TBB就能使你的应用程序运行于最佳性能。而有一些开发者想自己控制线程的运行, Windows* 线程就是一个选择。

这里,我列出了这三个选项的主要因素

并行编程的挑战 Windows* threads OpenMP* Intel® Threading Build Blocks
任务级   x x
跨平台支持   x x
动态运行库     x
线程控制 x    
预测试和校验   x x
C 语言支持 x x  
Intel® Threading Tools 支持 x x x
未来的维护   x x
动态内存分配     x
“轻型” 互斥体     x
处理器关联性 x   线程关联性

思考一下你是否处于下面情形中的一个,请根据不同的情形选择合格的方案以节省开发成本。

情形一

你已经有一个能工作的多线程程序,希望找到性能瓶颈并改进之。

你不需要重写代码,只要使用Intel(R) VTune(TM) Performance Analyzer 和 Intel? Thread Profiler 来查找代码中的真正的性能问题,并且你还有机会使用 OpenMP* 或 TBB 在“深”循环中改进代码,或者更换同步对象。

情形二

你可能有串行代码,但是不知道怎样把它改成多线程的。

使用Intel® VTune™ Performance Analyzer来查找你代码中的热点区,不需要改变整个程序-只要改变关键代码就可以达到并行化。

情形三

你要开发一个新项目。考虑你的算法如何并行工作,分割小任务,适当的粒度。如果你不怎么精通多线程编程-那么就使用TBB来提交小任务,或者使用 OpenMP* 来安排结构化流。

分享到:
评论

相关推荐

    英特尔® Parallel Composer 入门详解

    2. **英特尔® 线程构建模块 (Intel Threading Building Blocks, TBB)**:TBB是一个C++库,为开发者提供了一组高级的并发编程工具,使得编写高效、可伸缩的多线程代码变得简单。它包含任务调度、数据并行处理、同步...

    Is Parallel Programming Hard, And, If So, What Can You Do About It

    - 使用专业的并行编程工具,如Intel® oneAPI Threading Building Blocks (TBB)、OpenMP等,它们提供了丰富的库函数和支持,有助于简化并行程序的设计与实现过程。 - 采用可视化调试工具,例如TotalView或GDB等,...

    2009 英特尔® 线程挑战赛 第二题 3SAT 源码

    描述中提到的“使用tbb结合OpenMP进行了并行优化”揭示了两个关键的并行计算库:Intel Threading Building Blocks (TBB) 和 OpenMP。TBB是一个C++库,旨在帮助开发者高效地利用多核处理器的并行计算能力,它提供了高...

    2009 英特尔® 线程挑战赛 第四题 字符串匹配 源码

    描述中提到,这个解决方案使用了两种并行编程库:Intel的Threading Building Blocks (TBB) 和 OpenMP,同时实现了三种不同的字符串匹配算法:KMP (Knuth-Morris-Pratt),BM (Boyer-Moore) 和 WM (Wagner-Fisher)。...

    MKL开发者文档

    - **新特性**:新增了对OpenMP*支持的线程化函数和问题的处理方法,以及基于Intel® Threading Building Blocks (TBB)的线程化函数。 - **性能改进**:通过采用最新的编译器技术和处理器特性来提升核心数学运算的...

    2009 英特尔® 线程挑战赛 第三题 查找 源码

    TBB(Threading Building Blocks)是由英特尔开发的一种C++库,它提供了一种高级的并行编程模型,使得开发者可以更方便地利用多核处理器的计算能力。OpenMP(Open Multi-Processing)则是一种广泛使用的API,用于在...

    《Intel C++ 编译器Windows版》(Intel.C.Plus.Plus.Compiler.v10.0.026)

    专业版把高效的编译器和Intel® Threading Building Blocks (Intel® TBB), Intel® Integrated Performance Primitives (Intel® IPP) and Intel® Math Kernel Library (Intel® MKL)整合到了一起。虽然这些库也...

    MKL入门教程

    - **并行处理能力**:利用OpenMP和Intel Threading Building Blocks(TBB),MKL支持多线程并行处理,从而提高了计算效率。 - **广泛的编程语言支持**:MKL支持C、C++、Fortran等多种编程语言。 - **易于集成**:MKL...

    CompilerOptimizationGuide

    针对多核、多处理器或支持超线程技术 (HT Technology) 的系统,可以使用并行性能选项 (`/Qparallel` 或 `-parallel`,`/Qopenmp` 或 `-openmp`),或者采用Intel® Performance Libraries和Intel® Threading ...

    MTAPIv1_Final.pdf

    9. 文档还可能包含了对于一些其他相关API的提及,包括POSIX线程(POSIXThreads)、互斥锁(Mutexes)和信号量(Semaphores)、C11、OpenMP、Intel® Threading Building Blocks、Parallel Patterns Library、Grand ...

Global site tag (gtag.js) - Google Analytics