并行编程下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* 来安排结构化流。

你可能感兴趣的:(多线程,编程,windows,算法,performance)