铛铛铛~软挑课堂干货分享时间!
本期为你带来
《并行编程基础技术(一)》
并行编程模式
1.共享内存
程序由多个共享内存的并行任务组成,数据的交换通过隐含地使用共享数据来完成。一般仅需指定可以并行执行的循环,而不需考虑计算与数据如何划分,以及如何进行任务间通信,编译器会自动完成上述功能,以openMP为代表。
2.消息传递
程序由多个并行任务组成,每个并行任务拥有自己的数据并对其进行计算操作,任务之间数据的交换是通过显式的消息传递语句来完成的。以MPI、PVM为代表。
3.数据并行
程序由多个并行任务组成,通过对数据进行分解交给多个任务同时执行相同的处理。以MapReduce、HPF为代表。
4.其它
混合模式(Hybrid)
单进程多数据(SPMD)
多进程多数据(MPMD)
并行编程方式
1.并行语言
语言语法本身支持并行设计,通过创建协程执行并发任务,可支持大量并发。以Go、Erlang语言为代表。
2.扩展语法
扩展串行语言语法支持并行特征,编译器对扩展语法进行识别,生成对应的并行程序,从而屏蔽了线程创建、同步互斥以及通信等细节。以OpenMP为代表。
3.并行库
原始并行库:需要显式管理并发任务执行和通信,开发难度高、效率低、容易出错,但能最大限度发挥性能。以WindowsAPI、Pthreads为代表。
并行库:封装了执行流,提供了通信接口,开发难度较高。以MPI、PVM为代表。
并行框架:提供了并行库甚至管理软件,以支持程序的开发和部署,以Hadoop、Openstack为代表。
并行编程算法
1.区域分解
将问题相关的数据划分成多个相对独立操作的单元,每个任务处理一个单元。
分解方式
2.功能分解
将问题分解成多个相互独立并行执行的任务。
3.流水线
将对输入的处理化分成多个阶段,每个阶段使用不同的任务进行处理,每个任务上一阶段处理完,即可进入下一阶段。
4.分而治之
将问题分解成多个并行的子问题,每个子问题通过一个任务单独解决,再将多个子问题的结果合并成原来问题的结果。
并行化程序开发过程
下期预告《并行编程基础技术(二)》
Go语言、OpenMP、MPI、p无锁编程
请准备好你们的小板凳
更多赛制、福利、报名等信息
长按识别