首页人文社科类社会科学《科学计算与企业级应用的并行优化》刘文志著
comics

文档

181

关注

0

好评

0
PDF

《科学计算与企业级应用的并行优化》刘文志著

阅读 523 下载 0 大小 418.1K 总页数 23 页 2022-09-19 分享
价格:¥ 10.00
下载文档
/ 23
全屏查看
《科学计算与企业级应用的并行优化》刘文志著
还有 23 页未读 ,您可以 继续阅读 或 下载文档
1、本文档共计 23 页,下载后文档不带www.pdfdz.com水印,支持完整阅读内容。
2、古籍基本都为PDF扫描版,所以文档不支持编辑功能,即不支持文档内文字的复制粘贴。
3、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
4、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
5、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。
序到这里,终于可以松一口气了,一个持续多年的工作总算可以告一段落了。本系列起源于我2012年想写的《并行乱弹》一书,乱弹是乱弹琴的意思。按我的本意,并不想把它写成一本非常严谨的著作,当时更无意出版,因此并不是非常注意全书逻辑的严密性,虽然经过我和编辑的多次修改,但想必问题依旧难以避免,在此诚恳地请求读者谅解。本系列的3本书相互之间有联系,也有其独立性:《并行算法设计与性能优化》介绍常见的串行代码优化方法和并行算法的设计:《并行编程方法与优化实践》介绍常见的向量化和并行编程环境及一些实例:《科学计算与企业级应用的并行优化》则价绍领域相关的算法与应用的性能优化。如果说要写一本简短的武侠小说来描写主角是如何学习这3本“秘笈”的话,我想故事是这样的:在2015年,主角是某位内向宅男码农hpc,因为程序速度太慢天天被产品经理骂,受经理白眼,每天工作到晚上10点,遭到家人埋怨。在某个月黑风高的晚上,某条街道上那位江湖人称“风辰”的“HPC帮”护法长老收hpc为不记名弟子,并传授给hpc《并行算法设计与性能优化》《并行编程方法与优化实践》及《科学计算与企业级应用的并行优化》3本“秘笈”,“风辰”临走时收了传功费用1024万元。c如获至宝,休假一月潜心修炼。一月后出关,容光焕发,程序速度大幅度提升,产品经理天天请吃大餐,经理忙着加奖金。此后,hpc每天下午S点即下班回家,修身养性,陪家人一起吃饭、购物。愿这3本书能够真正成为改变读者生活的良师益友!风辰2015年5月17日于深圳前言T行业急需这本书和本系列的前两本书一样,在解释为什么笔者认为软件工程师需要这本书之前,笔者先来介绍并行、并发和代码性能优化这3个概念,因为理解这3个概念是阅读本系列3本书的基础。·并行对应的英文单词是paralleli,是指在具有多个处理单元的系统上,通过将计算或数据划分为多个部分,将各个部分分配到不同的处理单元上,各处理单元相互协作,同时运行,以达到加快求解速度或者提高求解问题规模的日的。·并发对应的芙文单词是concurrency,是指在一个处理单元上运行多个应用,各应用分时占用处理单元,是一种微观上串行、宏规上并行的模式,有时也称其为时间上串行、空间上并行。·代码性能优化是指通过调整源代码,使得其生成的机器指令能够更高效地执行,通常高效是指执行时间更少、使用的存储器更少或能够计算更大规模的问题。从大的方面来说,并行和并发都是代码性能优化的一种方式,但是今天并行和并发已经是如此重要,以至于需要“开宗立派”。为了明晰并行、并发和代码性能优化的边界,在本书中,代码性能优化特指除了并行和并发以外的代码优化方法,比如向量化和提高指令流水线效率。在本书中,笔者将向量化独立出来解说。2003年以前,在摩尔定律的作用下,单核标量处理器的性能持续提升,软件开发人员只需要写好软件,而性能的提升就等待下次硬件更新来解决,在2003年之前的几十年里,这种“免费午餐”模式一直在持续。2003年后,主要由于功耗的原因,这种“免费午餐”已经不复存在。为了生存,各硬件生产商不得不采用各种方式提高硬件的计算能力。目前最流行的3种方式如1)让处理器在一个周期处理多条指令,多条指令可相同可不同。如ntel Haswell处理器一个周期可执行4条整数加法指令、两条浮点乘加指令,而访存和运算指令也可同时执行。2)使用向量指令,主要是D和VLIW技术。SIMD技术将处理器一次能够处理的数据位数从字长扩大到128或256位,也就提升了计算能力。3)在同一个芯片中集成多个处理单元,根据集成方式的不同,相应地称为多核或多路处理器。多核处理器是如此重要,以至于现在即使是手机上的嵌入式ARM处理器都已经是四核或八核了。目前绝大部分应用软件都是串行的,因为串行执行过程符合人类的思维习惯,易于理解、分析和验证。由于串行软件只能在多核CPU中的一个核上运行,和2003年以前的CPU没有多少区别,这意味着花多核CPU的价钱买到了单核的性能。通过多核技术,硬件生产商成功地将提高实际计算能力的任务转嫁给软件开发人员,而软件开发人员没有选择,只有直面挑战。标量单核的计算能力没有办法继续大幅度提升,而应用对硬件计算能力的需求依旧在提升,这是个实实在在的矛盾。在可见的将来,要解决这个矛盾,软件开发人员只有代码性能优化和并行可以选择。代码性能优化并不能利用多核CU的全部计算能力,它也不要求软件开发人员掌握并行开发技术,另外通常也无需对软件架构做效动,而且串行代码优化有时能够获得非常好的性能(如果原来的代码写得很差的话),因此相比采用并行技术,应当优先选择串行代码性能优化。一般来说,采用并行技术获得的性能加速不超过核数,这是一个非常大的限制,因为目前CPU硬件生产商最多只能集成十几、几十个核。从20O6年开始,可编程的GPU越来越得到大众的认可。GPU是图形处理单元(Graphics Processing Unit))的简称,最初主要用于图形渲染。自2O世纪90年代开始,NVIDIA AMD(ATI)等GPU生产商对硬件和软件加以改进,GPU的可编程能力不断提高,GPGPU(General--purpose computing on graphics processing units))比以前容易许多。另外由于GPU具有比CPU强大的峰值计算能力,近年来引起了许多科研人员和企业的兴趣。近两三年来,在互联网企业中,GPU和并行计算越来越受到重视。无论是国外的Google、Facebook,还是国内的百度、腾讯、阿里和360,都在使用代码性能优化、并行计算和GPU来完成以前不能完成的任务。10年前,并行计算还是实验室里教授们的研究对像,而今天多核处理器和GPU的普及已经使得普通人就可以研究它们。对于软件开发人员来说,如果不掌握并行计算和代码性能优化技术,在不久的将来就会被淘汰。作为本系列的压轴之作,本书专注于领域相关的算法和应用的并行与性能优化。笔者介绍了如何优化线性代数、偏微分方程求解、分子动力学和机器学习领域的一些重要算法。如果以武侠中的功夫来比喻的话,本系列的第一本书《并行算法设计与性能优化》专注于理论基础和实践的结合,是“内功”和“心法”的修炼:本系列的第二本书《并行编程方法与优化实践》专注于程序设计语言的核心内容的应用,是“招式”的学习:而本书则是“内功心法”和“招式”的具体运用。“内功心法”好意味着基础好、潜力大,以后发展空间广泛;“招式”好则能够通过“奇招”“怪招解决问题;而只有将“内功心法”和“招式”完美融合,做到“心中无招而手中有招,无招胜有招,无招即有招”,才能成为异构并行计算这个领域真正的集大成者。愿读者和笔者一起向这个目标前进。本书完全是“干货”,是一本真正将业界最佳实践和“只可意会,不可言传”的领域知识简洁明了地贡献出来的著作。为了帮助读者理解,本书使用了大量的示例。开发人员通常比较忙,因此本书力求简洁明了,点到为止。读者对象由于多核处理器和GPU已经非常便宜,而代码性能优化、向量化和并行已经深入T行业的骨髓,所有T行业的从业者都应当阅读本书。如果非要列一个读者清弹,笔者认为下列人员应当阅读本书:·互联网及传统行业的IT从业者,尤其是希塑将应用移植到多核向量处理器的软件开发人员:·对向量化和并行化感兴趣的职业工作者;·线性代数、偏微分方程、分子动力学和机器学习相关倾域的科技工作者;·大中专院校及研究所的学生、教师:·关注异构并行计算和高性能计算的人们。如何阅读本书本系列炮括3本书,本书是此系列的第三本。本书重点介绍如何利用目前主流的℃语言的各种特定硬件或平台的向量化扩展、并行化库,来设计性能优良的向量化和并行代码。而本系列的第一本《并行算法设计与代码优化》关注并行优化和并行计算相关的理论、算法设计及高层次的实践经验:本系列第二本《并行编程方法与优化实践》关注C程序设计语言的向量化和并行化扩展及算法到硬件的映射:本书则关注如何将线性代数、偏微分方程求解、分子动力学和机器学习领域的常见算法优良地实现出来。本书不但包括如何使用SSE/X向量化扩展、OpenMP编译制导语句来优化运行在X86多核处理器上的代码性能,还包括使用NEON向量化扩展、OpenMP编译制导语句优化运行在移动处理器(ARM)的代码性能,以及使用CUDA和OpenCL优化运行在图形处理器(GPU)的代码性能。笔者希望通过这种方式能够让阅读本书的软件开发人员了解和掌握如何将常见算法映射到具体硬件上以获得高性能,以及如何依据硬件和算法的特点进行代码性能优化。本书分为以下几章:第1章介绍常见的并行编程基于的多核/众核向量处理器的架构、OpenCL程序如何映射到这些平台上执行及OpenCL程序在这些硬件上运行时具有哪些不同。先介绍Intel Haswell、,ARMA15、Intel MIC、AMD GCN GPU和NVIDIAKepler/Maxwell GPU的架构。然后介绍OpenCLi程序如何映射到Intel Haswell处理器、AMD GCN GPU和NVIDIAKepler/Maxwell GPU上执行。最后介绍OpenCL程序在这些处理器上运行时的细微区别。第2章介绍如何在X86.ARM和GPU上优化常见的线性代数运算,如计算稀疏矩阵向量乘法,求解下三角线性方程组,计算矩阵乘法等。对于电子电路模拟、计算流体力学相关的领域来说,稀疏矩阵向量乘法是非常重要的。本章还介绍如何在主流的X86.ARM和NVIDIA GPU上优化稀疏矩阵向量乘法运算。第3章介绍如何在X86和GPU处理器上优化偏微分方程的求解,主要介绍如何求解热传递问题和三维Stencill问题。第4章介绍如何在X86处理器和GPU上优化常见的分子动力学算法,如邻居搜索、范德华力计算、键长伸缩力计算和径向分布函数计算。
返回顶部