高效并行编程:英特尔的魔法帽
DOIT原创 崔昊 发表于:12年11月27日 19:00 [原创] DOIT.com.cn
高效并行编程:英特尔的魔法帽
在话题进入有关至强融核的并行编程之前,我们首先要来看看英特尔为至强融核所准备的软件开发环境。从开源工具的角度来看,虽然gcc只能编译核心,而不能编译应用程序,但用户仍然有Python可用。Debug工具和编译库也有对开源平台的相应支持,但是在分析工具、工作负载计划上,我们并未看到开源平台的踪影。
但英特尔事实上一直拥有完整的软件开发、编译生态环境支持,推出了大量的相关软件产品,包括英特尔C++编译器、Fortran编译器,以及Debug工具、VTune Amplifler XE等软件支持,而在工作负载规划上,像Altair PBS Professional、Adaptive Computing Moab等第三方工具也提供了良好的支持。总的来说,至强融核的软件开发环境是比较完整和健全的。
话题回到编程上来,英特尔并行编程传播总监James Reinders有两句话非常值得回味,其一是“Don't touch my software!Don't touch my data!(不要触碰我的软件,不要动我的数据!)”其二是“Very Important, yet Nobody Gets a Free Lunch!(并行编程很重要,但是没有人能吃到免费的午餐)”他的两句话对于了解至强融核的编程、编译、软件平台有非常重要的意义。
James Reinders以SAXPY为例,通过Fortran改写串行代码为并行,进行了至强E5处理器运行串行代码、至强E5处理器运行并行代码和至强融核运行并行代码的三个计时测试,得到的就是上面的69.097、0.460和0.197的三个数值。
注意上面的细节就会发现,要想获得性能的提升——无论是至强还是至强融核——最关键的其实是将原有的代码进行并行化改造,这种并行化改造成本和时间显然会是非常高昂的,但是其带来的性能提升又是显著的,那用户该如何取舍呢?而针对业界已经发展多年的CUDA编程及NVIDIA的GPGPU平台,到底至强融核在编程上是否有“便宜的午餐”?
首先我们需要了解,并行时代本来就是编程并行化的趋势,无论是将串行编程改变为通用并行还是高度并行的代码,无论是在并行时代使用至强还是至强融核,都需要进行并行化的编程,而目前我们绝大多数的应用程序都是基于串行编程的。
这也就意味着我们需要对大量的串行代码实现并行化改造,在这种改造中,肯定会出现可以高度并行或是只能普通并行的应用划分,但无论是哪一极,显然进行并行化编程的时候,用户都不会希望针对至强和至强融核,或者说多核主处理器和众核协处理器进行分别得编程,而基于英特尔的模式“Reality: Same source code (after we added parallelism) for Intel Xeon processor and Intel Xeon Phi coprocessor”,这显然会是一种更为简单的方式,虽然可以想见针对至强和至强融核的复杂的编程——SAXPY实在是太简单、太基础了——仍然会有一定量的代码修正工作,但是这已经极大的减少了工作量。
这就像James Reinders所说的,“不会有免费的午餐”,但是用户只要付出一定的代价,这顿午餐还是会吃的相对舒服和温饱的,而且他也指出,至强和至强融核的同步并行编程最大的优势是生态环境(开发环境)的融合复用,他表示:“如果你想用相同的语言(比如Fortran)、相同的并行编程模型、熟悉的工具满足高度并行的需要,至强和至强融核是最好的选择。”
James Reinders在演讲中也特别提到:“编程并不像看起来那么容易,并行编程更是如此。”至强和至强融核协处理器的混合架构,至少还带来一点好处:用户可以进行选择,至少增加了一项针对高度并行计算的加速方案,而编程看起来虽有困难,但仍然有可以从至强处理器原本的并行编程中可以借鉴的地方——至少编程语言可以选择Fortran和C++。
另外谈一点题外话,至强融核以PCIe插卡形式增加在服务器中,而英特尔至强E5处理器也继承了PCIe控制器和内存控制器,这对于至强+至强融核形成更好的通信低延迟表现,相信会有更好的帮助。
而从编程的角度来说,James Reinders在有关至强和至强融核的编程预览文档中给出了这样的建议:
我们如何为应用程序选择至强还是至强融核处理器呢?这里大致有两个基本考虑因素:
1、扩展性:应用程序的扩展是否准备好利用至强融核的高度并行计算能力?通常这是展现至强融核并行扩展能力最有力的证据。
2、矢量和内存的使用情况:其中分为:
a)对矢量单元有极强的需求
b)会更多的使用本地内存带宽,甚至超过了至强处理器所能提供的。
他认为,如果应用同时满足这两点,就可以计划向至强融核迁移,反之,用户则需要在考虑考虑——英特尔当然还要顾及到至强处理器的市场份额问题。