一、并行编程的平台和构架
并行编程目前是个趋势,无论是科学计算还是大数据处理,甚至目前爆火的AI大模型,其底层都已经与并行编程紧密不可分了。其实并行技术有很多种情况,最初是在软件上层,有不少的并行库,特别是一些大的公司都会有自己的一套并行库(比如微软PPL和谷歌的MapReduce模型等)。但后来硬件的发展也开始提供一些并行的处理技术(比如SIMD等),然后硬件厂商也开始提供并行库(如Intel和IBM等)。随着实际应用的不断推进和GPU技术的成熟,GPU并行基本已经成为目前最大的热门。而在GPU技术里,主要又分为AMD和NVIDIA两家。
同时,各种技术的不断演进,又催生出新的问题即标准的问题。这样,又出现了基于标准的开源侧和基于硬件的硬件侧。所以说现在的并行框架(库)还是比较多的,下面将对主流的进行一些初步的分析说明。
二、硬件阵营和开源阵营以及标准
刚刚提到过,硬件的并行技术发展,重点已经从CPU转向GPU(或者说二者融合)。AMD和NVIDIA两家公司作为目前世界上主要的GPU供应端,都有自己的并行框架技术,其中NVIDIA公司的CUDA(Compute Unified Device Architecture)框架是市场上的“当红炸子鸡”。而竞争对手AMD肯定不能坐视不顾,也推出了自己的并行框架ROCm(Radeon Open Compute)。其实大家往往有意无意的忽略另外一家GPU供应商,Intel。其实他在集成板卡上,占有重要的一席之地。当然,它也推出了自己的并行框架TBB。当然,目前在国内出现了不少的GPU厂商,如昇腾、摩尔在线等,但它们目前还处于一个成长阶段,还需要进一步努力和发展。
一谈到技术,就会有开源和闭源两大阵营。而作为主流的并行框架ROCm(AMD)和CUDA(NVIDIA)正如旗帜分明,前者开源后者闭源。开源对于开发者非常友好,可以提供整体流程及内部技术的深入理解和学习应用。而闭源一般提供了更好的技术支持和技术应用。目前看来CUDA以其优异的表现和成熟的生态系统,已经成为了主流。而AMD的ROCm则在奋起直追 ,不过目前看差距还是有点大。对于初学者来说,守选CUDA进入到并行编程是一个不错的选择。
而在并行技术发展过程中,标准的统一本身就是一个迫切的问题。但标准的制定又是一个复杂的博弈过程。这需要所有参与者都要向着一个共同的目标不断前进,这非常困难,但又是非常重要的。当然,它也有不少的小心思,比如打破某家的技术垄断等等。当前主要的并行标准是OpenCL,Open Computing Language,但它早已经不是单纯的并行标准而一个支持异构平台的开发的标准。它最初由苹果开发后由各大公司(AMD,IBM,INTEL等,但好像没有微软)共同合作逐步完善并最终提交到Khronos Group,进而在后面推出了OpenCL1.0,1.2,2.0,2.1,2.2,3.0等等版本。OpenCL还是一种编程框架,它主要由三部分组成即平台API,运行时API和编程语言。
三、语言及模型支持与发展
来到了开发者最关心的,这么多的框架、硬件、标准以及它们间的互相相爱相杀的过程,其实跟具体的程序员没多大关系。作为开发者,程序员更关心的怎么使用它们。而这其中最重要的一环就是开发它们需要使用什么语言。
从目前来看,直接进行这些框架的开发,普遍使用的是C/C++语言。当然,在上层的应用中,各种语言就大行其道了,特别是AI相关的Python占有绝对的主流。早期的GPU编程因为贴近于硬件,C语言是不二的选择。但随着抽象程度的增加C++被引入进来。但毕竟GPU编程不是C++设计的主要面对对象。所以在这方面,就有两个技术路线之争即异构平台上的语言模型之争。目前来看,一种是以各大厂商推出的C++ Extensions(C++语言扩展)模型为主,包括CUDA的C++,HIP(Heterogeneous-compute Interface for Portability)的C++等,它们选择以编译器扩展和原生语法的增强等方式,提供对GPU等硬件编程的优化和扩展能力。它强调对硬件的极致性能挖掘,允许对设备内存及特定的设备指令进行直接操作。另外一种则是希望能够有一种基于C++语言的更高层次的抽象的编程模型,典型的就是SYCL。它通过统一不同平台代码的编写,依靠OpenCL等底层运行时实现跨平台架构的兼容。它更倾向于可移植性和标准性,对CLang/LLVM等工具有较强的依赖性。
Intel的DPC++,也就是在前面分析TBB时需要的环境Intel oneAPI,对SYCL支持的相当不错。而且SYCL2020中全面支持了C++17标准,这是一个明显的进步。另外C++标准本身也在对并行技术不断的进行扩展和支持,有可能在不久的将来,C++标准库中就会有完全支持并行的相关库出现。
四、AI大模型与并行技术
并行技术的发展,其实与近些年AI特别是大模型的发展有着重要的关联。如果说原来并行技术在实际的应用中并不多见,到现在几乎不管搞不搞AI的都要聊一聊并行。主要原因就在于这些年不论是从国际到国内,从上层到民间,都对AI持续不断的投入有着强相关。
AI大模型一个显著的特点就是需要对大量的数据进行处理,而大数据的处理,并行技术会极大的提高处理效率;而AI模型训练和推理都需要海量计算,这些任务又具有很强的并行性(如矩阵的计算),而这恰恰又是并行技术的特长。综合之下,现在的AI技术可以简单的认为已经与并行计算绑定在了一起。最典型的就是,现在NVIDIA的高档GPU一卡难求,进而表现为其股价一飞冲天。
如果在未来的时间内仍然无法解决AI技术对算力的简单线性需求这一前提,那么GPU的需求依然会快速增长,也就是意味着并行编程框架(库)及其周围生态会成为一种天然的护城河。大家应该明白这句话的意思。CUDA开发依然会是主流。
五、总结
这篇文章不是技术文章,是对技术整体路线和发展的一个整体的概要说明,并没有深入的进行分析和对比。目的也很简单,让广大的初学者在遇到一系列的名词术语时,能够有一个清醒的认知。既不会陷入一家独大的思维,又会眼花缭乱不知所措。正如小品中说的“先混个脸儿熟”。

895

被折叠的 条评论
为什么被折叠?



