这是一个有意思的话题当我们计 划在多核系统下应用并行编程来最大化地利用处理器时,这意味着我们想把一个大的串行任务分割成一些小任务并让它们同时运行。
下一个问题是我们应用使用什么 方法?这里有三个选择-一、传统的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* 来安排结构化流。
分享到:
相关推荐
在多核系统上比较两种并行编程方法(或者工具):OpenMP和Intel Threading Building Blocks。 结论: 1. TBB需要相当可观的重新设计程序,而OpenMP足够简单; 2. TBB不太适合并行化已有的实现(软件),它为新设计的...
很好的OpenMP多线程并行编程资料。
openmp快速入门,简单的介绍了openmp的用法,一目了然
因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述 <br>立刻采用多线程技术,释放多核处理器(包括最新...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*
OpenMP is a framework for shared memory parallel computing. OpenMP is a standard C/C++ and Fortran compilers. Compiler directives indicate where parallelism should be used. C/C++ use #pragma ...
INTEL 软件学院讲解INTEL工具的PPT系列: 01 Intel 处理器结构 02 Intel 编译器、vtune ...*04 用OpenMP编程 05 Thread building block 06 Thread checker 07 Thread profiler 分开上传,大家看需求下载
MPI+OpenMP混合并行编程模型应用研究
并行计算机架构与编程上机实验程序 求矩阵行列式MPI+OpenMP多线程编程 MPI+OpenMP多线程编程的PBS
OpenMp并行编程技术是并行编程技术中比较容易学的一种,相对MPI来说非常简单,但是效果却也是非常的理想。欢迎下载
使用OpenMP并行化 解决数据竞争: 利用OpenMP同步pragmas协调线程间同步和内存访问
专业版把高效的编译器和Intel® Threading Building Blocks (Intel® TBB), Intel® Integrated Performance Primitives (Intel® IPP) and Intel® Math Kernel Library (Intel® MKL)整合到了一起。虽然这些库也...
引入多核并行编程模型T hreading Building Blocks, 并与raw threads、OpenMP 进行各方面详细比较, 分析了其劣。并研究了TBB 结合MPI在SMP 集群系统上实现高效的混合并行计算应用的法。最终发现TBB 在多核编程方面有...
part 4 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述 <br>立刻采用多线程技术,释放多核处理器...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*
并行程序,跨平台,OpenMp,使用方法
多线程在实际的编程中的重要性不言而喻。对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的std::thread,也可以使用操作系统相关的线程API,如在Linux上,可以使用pthread库。...
Intel.Thread.Profiler.Intel.Thread.Profiler.英特尔_.线程档案器9 <br> 因为文件很大...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP* 英特尔_.线程档案器6
OPenMp多核编程命令详解包括:OpenMP简介,基本语法,以及相关练习
Intel.Thread.Profiler.英特尔_.线程档案器7 <br> 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*
part 3 因为文件很大~ 所以分开压缩了 解压后是镜像 <br>概述 <br>立刻采用多线程技术,释放多核处理器...C++ 编译器 Windows 线程和 POSIX* 线程 英特尔® 线程构建模块 支持英特尔® OpenMP*