这不是一篇介绍细节的文章,只是稍微探讨一下并行编程的问题而已。

在这个多核泛滥的年代,作为程序员不能把所有的核都弄弄就像把自己的女人的某些洞闲置一样罪恶(岛国AV中毒ing……)。

并行并不是什么很高深的概念,也就是把工作分给多个人干,3P、4P、5P……只要充分利用好洞洞手脚等资源就是最初的一步。第二部要看TA的能力能达到什么程度,你要让TA每个部分都利用上又不能太多一起上,造成切换等管理开销太高,导致效率降低。

MPI是分布式处理的一个库,负责把你的任务分给多台机器处理。当然一个技术不是用了你就不能应用其他技术了,你可以把TA和CUDA、OPENCL或后面要说的其他技术混合使用。要使用MPI,你可以从下面网址下到要用到的东西。

http://www.mcs.anl.gov/research/projects/mpich2/

可能要用到.NET Framework,自行装备好。

裸线程(Raw Thread)也就是我们利用系统的线程接口来建立多线程来分解处理任务。不过各个系统平台的接口有所不同,所以直观性和可移植性很有限。除非你习惯在底层忙活,就像有人喜欢用字节码编JAVA应用那样。

OpenMP是一个带着很重Fortran口音的语言扩展,对C++的支持有点差强人意。如果你想认真学习的话,可以看《多核运算与程序设计》(周伟明 著),该书的一些并行知识对你学习其他并行实现也很有帮助。还有个OpenACC,显卡巨头英伟特的私人推介,能利用显卡帮助运算的,用来抢OpenMP和OpenCL的饭碗的,围观中。

Intel Threading Building Blocks,也就是TBB,是一个用标准C++和模板实现的库,任何支持ISO C++的编译器都能直接编译TBB程序,而且现已基于GPLv2开源。

书籍《Intel Threading Building Blocks》(O'REILLY出版社,中文版由机械工业出版社合作出版),所需东西到下面网址去找。

http://threadingbuildingblocks.org/

微软的PPL,一个TBB的仿品,就像C#模仿JAVA那样,如果你只在微软的一亩三分地打滚的话,学吧。《我的第一本C++书》(陈良乔 著)里边介绍到。

相对来说我比较喜欢TBB,毕竟要到Linux下做些东西。MPI和OpenMP是工业标准了,学了傍身。

最后邪恶一下,做程序员不要迷头做程序,要珍惜眼前人,不要花一晚上调试好程序,而TA却被别人调试过了,呵呵……