SD2.讲师周伟明专访:多核编程高处并不“寒”

今年12月的SD2.0大会,在“语言与工具”专场,我们邀请到多核编程专家周伟明先生,为开发者们详细介绍“多核编程模式”。本刊记者就多核编程的相关知识对周伟明先生做了专访,下面为采访内容。

CSDN:请问,您是从什么时候开始关注多核编程技术的?为什么选择这个做研究领域?

周伟明:从97年开始,我开始接触多线程程序方面以及分布式计算机环境(DCE)方面的开发,之后接触了多处理服务器方面的软件开发,并对它怀有浓厚的兴趣。到了2002年后,发现多核处理器已经成为大势所趋,因此开始关注多核编程技术。

在我的职业生涯中,发现大多数程序员没有掌握如何写好多线程程序的基本技术。在多处理器的多线程编程中,比以往单核时代的多线程编程要求高得多,可以说多核编程是一门比较新鲜且富于挑战的技术,同时它又能产生巨大的社会价值,所以选择它做研究领域。

CSDN:请您谈谈,多核编程技术都包括哪些方面?

周伟明:从大的方面讲,多核编程技术主要包括并行计算、共享资源分布式计算、任务分解与调度、Lock-Free编程等内容。其中共享资源分布式计算、任务分解与调度是最重要的内容,也是大多数程序员未接触过的内容。许多并行算法都可以通过共享资源分布式计算、任务分解与调度来实现。

CSDN:您之前说过,“像使用内存一样使用CPU”,能具体阐述下吗?

周伟明:在多核编程时,很重要的一个需求就是要做到当硬件升级,CPU核数增加后,程序不用修改,即保证程序随CPU核数增长的扩展性。“像使用内存一样使用CPU”主要是针对计算量不足情况下的一种处理措施,因为创建线程存在开销,计算量不足时,创建过多的线程不仅不能使程序运行得更快,甚至会使程序变慢,而且还会增加能源消耗。比如一段和创建一个线程的计算量相当的计算运行在8核CPU上,显然不能使用8个硬件线程来运行它,只使用一个硬件线程就足够了。

CSDN:您认为,多核编程模式有什么重要的意义吗?您选择这个作为今年SD大会的议题,是由于什么考虑?

周伟明:多核编程模式主要是提供一种多核并行与分布式编程的普遍方法,这些思想很容易被普通程序员甚至普通人理解和掌握。有了这些编程模式后,程序员不再需要去学习各种复杂的并行算法,它可以复用现有的串行算法,轻易地实现并行和分布式计算。

之所以把这个作为今年SD大会的议题,主要是因为个人觉得多核编程模式是多核编程技术的精华部分,希望能和大家一起分享。

CSDN:很多人认为多核编程技术,特别高深,不易学习,您怎么看待这个问题?

周伟明:也许是有些人把多核编程技术理解成了并行计算技术的缘故,加上近些年学术界对复杂度高得出奇的Lock-Free编程研究非常热,致使认为它特别高深,学习难度高,非要达到计算机博士水准才能掌握。

实际上大音希声、大道至简,最实用的多核编程技术并不是那些复杂的并行算法和Lock-Free算法。最实用的多核编程技术往往只要用到一些最简单的串行编程技术,然后使用一定的模式把它并行化。比如多核中的查找算法,仅仅用最简单的有序数组的查找,就可以通过分布式数据结构模式把它并行化。

在多核编程模式中,也没有用到任何高深的思想,相反它用到的思想却是来自人类社会中最原始、最普遍、最简单的一些东西,如贪婪、自私、偷窃等。这些思想普通人都可以理解,更不用说程序员了。

许多复杂的并行计算现在都可以通过新的方法来实现,在去年的SD大会上,Intel的市场总裁James Reinders就讲过了用任务调度来实现并行计算的通用方法。比如要写一个并行排序算法,程序员只要懂得如何写串行的排序算法,就可以使用任务调度方法把它自动变成并行算法,并且这种通过任务调度实现的并行算法比传统的并行算法性能更好。

值得庆幸的是,将简单串行算法并行化的各种模式都可以写成象标准库一样的东西给程序员使用。Intel公司就提供了一个开源项目TBB给大家使用。所以对于普通程序员来说,掌握多核编程技术并不是一件难事,只要有多线程编程基础的程序员都可以掌握。当然,就像C++标准模板库STL一样,掌握其基本原理和使用它对每个程序员都不是难事,但是要自己去实现它并不是每个程序员能做到的。多核编程技术也一样,普通程序员掌握其基本原理和使用它不是难事,当然要实现一个基础库有一定难度,不是所有的程序员有能力能做到的事。

CSDN:如果有网友想提升自己在多核编程方面的水平,您有什么建议?应该怎么学习?采用怎样的步骤?需要掌握哪些工具或技术,应注意什么问题?

周伟明:要提高多核编程水平,首先要掌握多线程编程基础技术和OpenMP编程技术,其次,要掌握多核处理器的一些特殊地方,如Cache方面的伪共享问题,原子操作等,这是做多核编程的基础。

有了上面的基础后,就可以开始学习如何将计算均摊到各个CPU核上的方法,这里主要涉及到并行计算、共享资源分布式计算、任务分解与调度方面的技术。

由于市面上暂时还缺乏共享资源分布式计算、任务分解与调度方面的书籍资料,所幸的是Intel的开源项目TBB中有一些共享资源分布式计算、任务分解与调度方面的源代码。所以这方面的内容暂时可以通过Intel的开源项目TBB的源代码去学习。当然也可以到ACM, IEEE, Elsevier里去找一些相关的论文看看。

并行计算方面的内容可以通过许多书籍以及一些这方面的开源项目去学习。由于可以通过任务调度的方法进行并行计算,因此对于普通程序员,这方面的内容并不用学很多,有所了解即可。

当然,还需要学习多线程调试测试方面的技术,这牵涉到代码静态分析方法,如何设计测试用例使程序中的问题暴露出来,如何调试定位问题等内容。也有些工具可以辅助程序员检查程序中的错误,如Intel的C++编译器里带有一些检查多线程程序错误的辅助工具。同时Intel的网站上还提供了能耗测试的工具可以检查程序的能源消耗情况,可以帮助程序员进一步优化程序,写出更环保的程序来。

如果要更深入的掌握多核编程技术,Lock-Free编程技术也是需要有一定了解的,在具有垃圾收集机制的编程环境中,Lock-Free编程技术在某些情况下有它的使用价值。学习Lock-Free编程技术并一定需要去使用它,而是通过它可以更好地理解多线程编程方面所面临的复杂问题,对于提高程序员对多线程编程方面的理解和代码质量会有一定的帮助。

在学习多核编程技术时,最重要的是掌握如何将计算均匀分摊到各个CPU核上的原理和方法,并不需要去死记一些算法。

CSDN:您能否介绍推荐一些多核编程方面的书籍?

周伟明:目前市面上专门关于多核编程的书较少,有大影响力的书籍几乎没有。虽然如此,但是还是有些书籍有很好的参考和借鉴价值。

《多核程序设计技术——通过软件多线程提升性能》一书由Intel公司的工程师写作而成,讲解了Intel处理器相关的多线程基础知识,同时也讲解了一些OpenMP方面的编程知识,可以当作一本多线程方面的基础参考书籍。

《Intel Threading Building Blocks》一书由Intel的市场总裁James Reinders写作而成,由O’Reilly出版,详细介绍了Intel的开源项目TBB库的使用方法,唯一的不足是这本书没有剖析其中的原理,也许是觉得代码难度过高的原因。这本书在国内的购书网站上可以买到英文版的,不过价格比较高。

《多处理器编程的艺术》由一位美国大学教授和一位Sun实验室的技术人员合著。这本书的学术性内容较强,重点内容为Lock-Free方面的编程技术,有较高的难度,对于想深入学习和使用Lock-Free编程技术的人员(特别是使用Java和C#编程语言的人员),不妨参考一下这本书的一些内容。这本书已经由国内出版社引进了英文版,可以在国内买到。

对于并行计算方面的书籍,国内已经出版了很多。有很多翻译过来的,如《并行计算导论》、《并行计算综论》、《并行程序设计》、《并行编程模式》、《MPI与OpenMP程序设计》、《并行处理基本原理》等。也有国内人原创的,如陈国良编著的《并行计算——结构•算法•编程》,《并行算法的设计与分析》,《并行算法实践》等。请恕我不能一一列出,这些书可以作为并行算法方面的参考书籍,美中不足的是这些书都不是专门针对多核环境而写的,所以普通程序员看了之后要把它变成多核环境中的程序也许会有一定难度。

对于多核程序调试测试方面的书籍,目前国内还没有发现这方面专门的书籍。前面介绍的书籍中,有些书籍也谈到了一些多核程序调试测试的方法。对于多线程程序的调试,《软件调试》这本书中有些内容值得参考。对于如何设计测试用例、写测试程序将程序中的问题暴露出来,虽有自夸之嫌,但还是要推荐大家不妨参考一下我写的《软件测试实践》中的一些方法。

CSDN:听说您最近在撰写一本有关多核编程的书,这是怎样的一本书?请简单介绍一下。

周伟明:从去年6月开始,我就在使用全职时间写作一本名为《多核计算与程序设计》的多核编程方面的书。

这本书的核心内容就是共享资源分布式计算、任务分解与调度方面的内容,这些内容需要使用今年将在SD大会上讲的各种多核编程模式。同时也有一部分并行计算方面的内容,不过与以往的并行计算方面的书不同的是,这本书的并行计算方面的内容是专门针对多核环境的,如并行搜索、并行排序、并行数值计算等内容都会涉及到CPU核数的扩展性,CPU Cache的伪共享问题等多核相关的内容。

当然书中也介绍了一些多线程编程基础知识、OpenMP编程基础知识、Lock-Free编程基础知识等基础内容。

这本书目前正在出版社内进行编辑加工,如不出意外,明年4月份左右估计可以上市。

CSDN:对于今年的SD大会,您有什么期望或者祝福吗?

周伟明:从去年的SD大会举办情况来看,它举办得非常成功,毫不夸张地说它已经成为了我国IT行业内影响力最大的一个技术盛会。非常好地促进了先进技术在我国软件行业的交流和推广,对提升我国软件企业的技术水平起了很好的引导作用。

对于今年的SD大会,自然希望有更多的技术人员参加,有更多的各个专业领域的重量级的最先进技术在会上进行演讲和交流,使之成为影响和提升中国软件技术发展的一场盛会。

被采访者简介:

周伟明先生,毕业于上海交通大学,1994年开始从事专业软件开发,曾工作于美国加州硅谷的DASCOM Inc公司(现为IBM的全资子公司)和华为技术有限公司等企业。在网络安全软件、服务端软件、机器翻译软件、工具软件、嵌入式系统等领域都拥有丰富的专业实践经验。近年来周伟明先生潜心研究多核编程技术,于2006年编著出版了国内第一本专门研究多任务情况下数据结构与算法的专著,获得业界的好评。此后周伟明先生再接再厉,更加深入地研究多核程序设计中范围更加广泛的重要的主题,提出多核程序设计的新观念——“象使用内存一样使用CPU”,并且致力与编写一本新的多核编程技术著作,将自己的研究成果和技术思路总结出来。

你可能感兴趣的:(多线程,编程,算法,分布式计算,任务调度,任务)