Mapreduce课程接近尾声,在此将之前课上的内容做一个简要的总结。
第一章 .并行计算与大数据处理技术简介
围绕着五大问题:为什么需要并行计算?并行计算技术的分类有哪些?并行计算存在的主要技术问题是什么?MPI并行程序设计模式的基本内容是什么?为什么我们现在需要打过么数据并行处理技术?展开。
为什么需要并行计算?
(1)不断提高计算机的性能是从计算机一开始被实际的制造出来enginner就已经开始追求的目标!
之前如我们在学习组原时所主要学习的体系结构上的哪些优化设计方法就是围绕着这一目标的:
1,提高处理器字长;2,提高芯片上的集成度(Moore‘s Law);3,多级流水线等微体系结构技术;4,提高处理器的频率(clock rate)。问题是正如摩尔定律已经接近失灵一样,这些单核的性能处理技术存在着物理上的upper bound或者说工程技术难度上的ceiling。(集成度墙、ILP墙、存储墙、功耗墙)
接着人们将关注点转向多核/众核技术。
(2) 人类对计算机技术的应用越来越广泛,对计算性能的需求也越来越大!超大实时数据处理量、超大计算量、计算复杂度任务。
而这一切问题,目前最好的solution就是使用并行计算技术!
对于programmer而言则是:
并行计算技术的分类有哪些?
按不同的标准有不同的分类方法:
(1)按数据和指令处理结构分类:弗林(Flynn)分类: SISD、SIMD、MISD、MIMD。
(2)按并行的类型(层次):位级并行、指令级并行、线程级并行(数据型并行、任务型并行)。
(3)按不同的存储访问结构分类:shared Memory、distributed and shared memory、distributed memory。
、
(4)按系统类型分类:Multicore/Manycore、SMP(SymmetricMultiprocessing、MPP(MassiveParallel Processing、Cluster、Grid(5)按计算特征分类:数据密集型、计算密集型、两者混合型
(6)按并行程序设计模式/方法分类:共享内存变量、消息传递(如MPI)、MapReduce方式)。
并行计算存在的主要技术问题是什么? 怎么存 以及怎么算的问题!
S是加速比,P是程序可并行比例 N是处理器数目 (可推出一个并行程序可加速程度是有限制的,并非可无限加速,并非处理器越多越好)
(具体的看,这些技术问题在上一问题,如何分类,中的各种不同角度上具有体现,所以解决这一问题是一个综合性问题。)
MPI并行程序设计技术
主要是介绍这一在MapReduce之前出现的较为流行的编程模型的基本内容,看看并行编程模式的一般需求以及之前解决方案的优缺点。
MPI主要功能
用常规语言编程方式,所有节点运行同一个程序,但处理不同的数据
提供点对点通信(Point-point communication)
提供节点集合通信(Collective communication)
MPI并行程序设计接口
基本编程接口
MPI提供了6个最基本的编程接口,理论上任何并行程序都可以通过这6个基本API实现
1. MPI_Init(argc,argv) : 初始化MPI,开始MPI并行计算程序体
2. MPI_Finalize(): 终止MPI并行计算
3. MPI_Comm_Size(comm, size): 确定指定范围内处理器/进程数目
4. MPI_Comm_Rank(comm, rank) : 确定一个处理器/进程的标识号
5. MPI_Send(buf, count,datatype,dest, tag, comm): 发送一个消息
6. MPI_Recv (buf, count,datatype, source, tag,comm, status): 接受消息
size:进程数,rank:指定进程的ID
comm:指定一个通信组(communicator)
Dest:目标进程号,source:源进程标识号,tag:消息标签
点对点通信
同步通信:阻塞式通信,等待通信操作完成后才返回
MPI_Send (buf, count,datatype,dest, tag, comm):发送一个消息(tag是为了指定某一次通信session?!)
MPI_Recv (buf, count,datatype, source, tag,comm, status):接受消息
同步通信时一定要等到通信操作完成,这会造成处理器空闲,
因而可能导致系统效率下降,为此MPI提供异步通信功能
异步通信:非阻塞式通信,不等待通信操作完成即返回