GPU世界:这次非常感谢风辰大神能来到GPU世界来做专访。之前就听说风辰已经活跃于OpenGPU等专业的并行计算社区,对于并行计算领域也从事了好多年,在此是否能请您进一步介绍一下自己以及自己所属的这一行业?

 风辰:我叫刘文志,网名风辰,毕业于中科院研究生院,毕业后在英伟达干了近三年;之后在百度IDL异构计算组跟着吴韧老师;现在在一家深度学习创业公司做异构并行计算相关的内容。

在深度学习领域,无论是训练还是部署对计算能力的需求都非常大。一次训练使用单X86 CPU来做,可能需要一年,使用8核CPU来做,也需要一个半月到两个月,但是使用单GPU来做,只需要一周,但是一周对实际生产来说已经非常慢了,我们希望一天两天、甚至是几个小时训练就能够得到结果。在部署的时候,计算平台通常是X86和ARM,提高其计算性能对用户的使用体验非常重要。基于这些原因,深度学习应用领域应用对并行化、代码性能优化非常重视。 

GPU世界:哈哈,现在深度学习与大数据也是被炒得非常火热哇。现在很多互联网和移动互联网公司手头有很多用户数据,如何利用好这些数据,给用户推出一些增值服务也是不少商家和技术工作所要面临的问题。现在本月看到您亲自写的《并行算法设计与性能优化》、《并行编程方法与优化实践》以及《科学计算与企业经应用的并行优化》这三本书已经出版发行。是否能谈谈写这三本书的初衷?另外前两本书的名字很相近,是否能谈谈其中的区别,并且对这些书做一些深入介绍?

风辰:第三本《科学计算与企业经应用的并行优化》刚在7月末上线,三部曲全部完成。最开始写这几本书是为了总结知识,便于跟踪最新发展,避免由于记忆力导致的学了又忘,所以写作后的内容基本上只有我一个人能够看明白。后来华章出版社联系了我,我才想把它们出版出来,因此花了大约一年的时间来整理让它们更有系统、更有可读性,当然也去掉了一些容易引起口水或硬件厂商不满的内容。

《并行算法设计与性能优化》侧重在要做代码性能优化和并行化需要的基础知识,比如一些常见的串行代码优化方法、并行化程序/算法需要的理论基础知识、硬件和操作系统相关的一些和优化密切相关的知识。这本书比较适合想打好基础的学生和想要在并行计算领域深耕的软件开发人员。

《并行编程方法与优化实践》侧重在不同的并行程序设计库、语言的基本概念,使用模式,比如X86处理器支持的SSE/AVX指令集,ARM Neon指令集的使用,以及OpenCL和CUDA的理念和基于GPU的异构计算的理论,最后两章本书给了图像处理领域和稠密矩阵计算领域的示例。本书比较适合想要立刻上手的软件开发人员,学生也可以通过本书了解目前并行计算领域的主要编程语言和编程工具。

《科学计算与企业经应用的并行优化》关注在如何使用《并行编程方法与优化实践》中的工具来优化分子动力学、偏微分方程求解、深度学习等领域的算法和应用。这本书适合想要提升并行和代码优化实战能力的软件工程师,我更希望读者能够对我在书中提出的解决方法做优化。

GPU世界:嗯嗯,也就是说《并行算法设计与性能优化》更偏向理论,而《并行编程方法与优化实践》偏向于实际工程运用,而《科学计算与企业经应用的并行优化》则是专注于更专业的科学工程研究领域是吧~您在《并行算法设计与性能优化》这一书中谈到了“为什么向量化或并行难”,关于这一小节的内容我们看过之后都觉得很犀利,可谓业界良心之笔。您是否能谈谈市场关于这方面技能的需求是否真的比较大,然后程序员的能力与老板的期望和支出之间是否也存在博弈呢?

风辰:市场对异构并行计算领域人员的需求已经很大了,无论是BAT、360还是一些创业公司(如商汤集团、NovuMind、大疆创新、华为、NVIDIA、Intel),都在招聘相关的人才(51job和智联招聘上也有许多招聘信息)。

软件开发人员的能力和老板期望和支出之间肯定存在博弈,在某种程度上这是敌对的双方☺。对于异构并行计算领域的人员来说,这个博弈对程序员有点不公平,因为职业特点要求异构并行计算领域的从业人员要比算法设计人员更了解算法实现细节、要比算法实现人员更了解算法的应用场景,再加上编程上的难度和需要付出更多的时间。但是由于行业刚形成不久,老板们并没有意识到这一点,他们还只是把异构并行计算从业人员当成普通的开发者,矛盾就产生了。当然老板的这种印象更多的是一些大厂商不负责任的宣称并行计算和代码优化是多么的简单导致的,我就不点名了☺,只是有点想说:如果真简单的话,你们出那么多工具、库的宣传干什么。

GPU世界:太有理了!不过现在确实有很多新兴的高科技产品需要高性能计算。上面提到的大疆似乎在无人机领域上在国内也算是做得很不错的。很多智能设备、包括可穿戴设备在性能功耗比上的要求也非常高,所以现在异构并行计算也开始火了起来。据说今年冬天你们还将发布关于OpenCL异构并行的书,那么您对传统基于CPU的并行计算与异构并行计算有何看法,或者说更看好哪一个的发展前景?

风辰:由于工艺制程的影响,芯片的集成度提升会越来越难,现在14nm,未来7nm,Intel通过制程领先一代的优势会消失。那么Intel X86 CPU对GPU、ARM等的制程优势将会消失。Intel 想通过X86架构打通移动、嵌入式、甚至GPU,这个努力基本上失败了,所以才有了Xeon Phi和新的GEN集成GPU。基于传统CPU的并行计算和异构并行计算也会接着往前发展,相对来说,我想硬件厂商比我更看好异构并行计算的发展(NVIDIA、Intel、AMD和ARM等已经在做了),其实完全 可以把基于传统CPU的并行计算看成异构并行计算的一部分。

GPU世界: 嗯嗯,确实~像以AMD为首的很多企业,包括ARM、高通、Imagination Technology等等还一起成立了HSA(Heterogeneous System Architecture)基金会,专门针对异构系统做出一套标准的系统框架。如果说后面大的发展趋势是异构并行计算的话,再加上您在《并行编程方法与优化实践》一书中列出了那么多现成可用的并行化工具,那么您个人认为开发者现在再去学CPU上像x86的SSE/AVX,ARM上面的NEON这种向量操作指令集是否还有必要?而这些CPU设计商是否会弱化对CPU向量操作的发展?

风辰:目前学习SSE/AVX,NEON还是有必要的,主要是OpenCL、OpenMP编译器现在并不好用,即便未来好用了,还是需要参考编译器生成的汇编代码来指导优化。

我认为CPU设计商会强化CPU SIMD操作的发展,未来X86和ARM支持的向量长度会越来越长,同时处理器的向量处理能力也会进一步提升。

GPU世界:嗯嗯,确实如此。据说Intel下一代处理器Skylake将引入512比特宽度的AVX指令集,当然这个其实已经在Xeon Phi上实现了,不过能在家用处理器上引入这个特性还是非常令人期待的。尤其在某些图形图像处理密集的应用中,通过CPU的向量操作把一些密集计算从GPU上解放出来也是有所必要的,呵呵。不过话说现在并行计算的工具太多了,比如基于任务级并行的OpenMP;基于集群通信的MPI;而针对数据级并行的就更多了,像CUDA、OpenCL、OpenACC、C++ AMP,HSA再加上Direct3D、OpenGL、Metal等原本用于3D图形渲染的库所自带的Compute Shader。您认为今后并行计算工具仍然会如此百花齐放,还是说最终只会一两家独大?

风辰:现在是异构计算的时代,竞争的领域更广,如服务器、桌面、移动、嵌入式等等,都正在引入或已经很好的利用了异构计算,这涉及了太多的领域,市场容量也是非常大,不是一家公司能够搞定的,所以未来必定是百花齐放。