第一章:超级计算简史
2021年8月19日星期四
1、串行转并行:数据分解
数据分解模型:各个SPE处理一部分数据,最后,PPC汇总结果。
适用场景:数据密集,数据量大,但数据处理不是太复杂;且各个数据之间,互相独立,可以进行独立计算。比如:图像数据处理,各个像素独立处理;或者无线通信,各个不同频段的数据单独处理等。
2、串行转并行:任务分解
任务分解模型:复杂的计算,按流水线,分解成可单独执行的简单计算,各个SPE只执行部分计算任务。
适用场景:计算密集型,数据有限,但计算量比较大,比如:高阶矩阵求逆,计算复杂可以将高阶矩阵,按块进行分解成低阶矩阵单独处理。
如果数据量比较大的话,数据频繁在各个SPE之间流转,数据通路会造成瓶颈,需要仔细评估通信带宽
3、CUDA使用了和Java一样的编译原则:基于虚拟指令集的运行时编译。
优点:
兼容性好,可以硬件、软件解耦,硬件平滑升级。
可以动态生成、修改代码。
不足:
首次加载时间长
4、CUDA替代技术:
OpenCL(open computing Language):由Nvidia、AMD、Apple发起,支持GPU、CPU以及其他有OpenCL驱动的硬件。
Direct Compute:微软开发,可替换CUDA和OpenCL的产品,集成在WIN系列中。DirectX API。可以获得多厂家GPU支持(Win GPU driver)。较为容易移植。但Unix、Linux平台支持有限。
5、以CPU为基础的多节点集群,并行化集群:
OpenMP(Open Multi-Processing): 程序员在代码中插入编译指令,告诉编译器需要并行执行的代码区域,在区域内写出并行指令。编译器编译出并行进程。用于单节点内的程序并行化。
OpenACC:编译器,开源。复制openMP的方法,在代码中插入编译指令,告诉编译器在GPU上执行的代码片段、数据存放在GPU上的存储类型。然后编译器,做些辅助工作,如:数据搬移、代码编译、代码在GPU上的加载、调用、数据回传等等。
CUDA也采用了与OpenMP、OpenACC类似的方式。
OpenCL、Direct Compute的硬件假设为GPU;OpenMP、OpenACC的硬件假设为CPU。
MPI(Message Pass Interface):面向进程的多节点集群通信。
ZeroMQ:消息中间件,简单的链接库。支持跨节点消息通信。与MPI替换关系。Linux、Windows均支持。
Hadoop:Google的Map/Reduce的一个开源版本。Linux平台。文件系统GFS,支持大数据,多节点集群处理。
使用并行库也是一个快速、高效的选择