一、Flynn分类法
single instruction multiple data(SIMD):GPU,专注于单一任务,并具有很高的效能;
multiple instruction multiple data(MIMD):CPU,同时及处理多个不同的任务,但是系统复杂的也随之升高;
其他类型(不常见):SISD(单核处理器),MISD。
二、从内存的角度分类
1.共享内存:多个CPU共享一个存储空间
2.分布式内存:微机集群,超级计算机(注重计算性能),数据中心(注重数据的存储,调度,服务)
对于后者,不同的处理器对应不同的存储空间,相互不共享。当一个处理器要使用其他处理器对应的存储数据时,需要通过网络进行沟通。
三、从编程模型的角度分类
1.shared memory编程模型:Pthread(低级,偏底层), OpenMP(高级,不用考虑细节)
2.message passing编程模型:MPI。通过编写MPI程序,在不同设备的任务之间(如微机集群)完成信息的发送、接收等操作,如下图:
编写MPI最常见的bug是send和receive不匹配。
多数情况下编程模型与硬件架构相互匹配,也可以说,并行程序编程模型是对硬件的抽象。一般来讲,前者对应于shared memory machine, 后者对应于distributed memory machine。但实际上,编程模型与硬件架构也可以是不匹配的。