x40并行编程指南
2020-09-26
前言
随着核物理实验规模逐渐增大,数据量也飞速增长,单线程分析数据就比较慢了。
编写这份指南的目的是简单介绍并行编程技术,帮助大家愉快地处理数据。
这份指南将假定读者有c语言编程基础。本指南附带样例代码,并保证在指南发布日期代码是可编译、可执行的。
由于作者水平有限,代码风格鬼畜,可能出现各种错误/Undefined Behavior/代码风格杂糅/c与c++语法混杂等问题,望诸君海涵。
由于本指南并非用于出版,因此参考文献肯定是懒得标注的。
指南最开始随便介绍一下x40服务器现状。
指南第一部分介绍c语言的并行编程方法。其中SIMD的部分应该还是比较有用的,合理使用的话可以有不小的提速。多线程部分其实我也是现查的(因为我完全没使用过c/c++的线程)。(顺带一提,我个人使用golang进行并行编程,其原生提供的协程和管道简单好用,有兴趣可以试一下。)
第二部分介绍使用CUDA的GPGPU编程。如果只是想利用GPU来进行并行加速,可以直接跳到这一部分。这里有CUDA的基本使用方法,还介绍了如何使用纹理来加速插值,还有如何使用流来隐藏数据传输延迟。
附录里面简单介绍了汇编语言,浮点数的计算机表示,还有高速缓存相关内容。未来可能加入更多内容。其实这部分也挺有趣的。在高速缓存的部分还有一个样例程序,可以体验一下胡乱访问数据造成的缓存不命中带来的性能下降。
在购买显卡之前,我曾在群里跟大家沟通过,有师兄提到现在大家分析数据还在使用单线程程序,多线程都没搞定,就要买显卡?听了以后我是痛心疾首。再观察一下,大家的加速方法基本是同时运行好几个程序,这种比较原始的并行方法可能会占据过多的内存或带宽资源。
虽然我不觉得阅读了这个手册就能立即开始多线程分析,但是我希望这个可以帮助大家用“多线程”的方式思考如何解决问题,并在可以今后的程序中尝试使用并行。
本指南由R包knitr (Xie 2020b) 和 bookdown (Xie 2020a) 生成。
本指南的许多知识源于《深入理解计算机系统》 (Randal E. Bryant 2010) 和 CUDA Toolkit Documentation (nVidia 2020) .
《深入理解计算机系统》这本书还挺厉害的,是我以前旁听一门信科课程用的教材。虽然学得吊儿郎当,但是学完以后感觉对计算机系统的理解更深入了一点呢😀
关于CUDA,有不懂就要取查手册,有问题就网上搜索一下。CUDA的文档有些内容有点语焉不详,但是总体来说还可以,关于函数如何使用之类的,都可以查一下。
不知不觉就写了100多页,都快成一本小书了诶!
致谢
非常感谢老板们的支持,特别感谢杨老板提供资金为x40服务器购置显卡。
在安装显卡前,韩家兴花了许多时间备份了服务器硬盘,非常感谢他的付出。
在安装和备份之时服务器经常停止服务,也感谢同学们的理解。
最后,非常感谢各位读者花时间阅读本指南。希望这份指南能帮助您提升程序性能。
cucumber
于泡菜坛子中
参考文献
nVidia. 2020. “CUDA Toolkit Documentation V11.0.3.” https://docs.nvidia.com/cuda/archive/11.0/index.html.
Randal E. Bryant, David R. O’Hallaron. 2010. 深入理解计算机系统. Translated by 龚奕利雷迎春. 2nd ed. 机械工业出版社.
Xie, Yihui. 2020a. Bookdown: Authoring Books and Technical Documents with R Markdown. https://CRAN.R-project.org/package=bookdown.
Xie, Yihui. 2020b. Knitr: A General-Purpose Package for Dynamic Report Generation in R. https://CRAN.R-project.org/package=knitr.