您的位置:首页 > 其它

MPI学习笔记之并行程序概述

2017-04-06 22:03 246 查看
在学习CUDA和CAFFE后,我又准备把MPI看一下,主要是了解一下。主要是对并行计算的强烈性趣。。。。。额,兴趣。

一、前言

1、实现方式:

并行程序的两种实现方式:

任务并行:将任务分配带若干计算核上;

数据并行:将数据进行分割,然后由不同的计算核进行处理,每个核在规模相当的数据集上大致采用相同的操作。这不由使我想到了CAFFE中的对GPU的运用来实习并行训练的思路,就是将数据集进行分割,每个GPU并行处理各自对应的数据集,我认为是很占便宜的。

2、并行硬件和软件

硬件大概是单指令多数据流、多指令多数据流比较占优势。

多指令多数据流又分为分布式内存系统和共享内存系统。

分布式内存系统:

每个处理器由独立的内存,通过消息传递函数来通信。

共享式内存系统:

多个处理器能访问内存系统中的相同内存,通过共享内存进行通信。

MPI就是用来在分布式系统中为各处理器进行消息传递的API。

引:

各个核能够直接访问自己的内存,而运行在不同核之间的进程需要交换内存数据的时候,只能通过消息传递API来实现。消息传递的API至少要提供一个发送函数和接收函数。进程之间通过它们的序号(rank)进行识别。

3、并行程序的流程

a、任务或者数据划分,就是要识别出任务中可以进行并行执行的部分。

b、不同任务之间的通信;

c、聚合,将任务和通信进行集合,聚合成更大的任务;

d、分配,将聚合的任务分配到进程或线程中。

二、MPI简介

1、MPI是进程级别的,通过通信在进程之间进行消息传递。

2、编程模型复杂:

a、需要进行任务划分;

》》》》》》》》》》》》》》》》》》》》》》》》》》》

b、通信延迟和负载不均衡;通信延迟很好理解,负载不均衡是因为分布式的系统,每个处理的任务量不同?待进一步的解释

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

c、可靠性差,一个进程出错,整个程序崩溃。第一感觉就是这简直是MPI的命门。在分布式系统中某一个进程出错是很容易的,为MPI的命运担忧。。。

三、其他并行实现手段的介绍

1、pthread、boost::thread

多线程系统,比如C++的boost中的thread可以在多个平台移植。采用的是共享内存。

2、OpenMP

同样是线程级别的,采用共享内存,了解不多。

3、OpenCL

是为异构平台编写的框架,OpenCL提供了基于任务分割和数据分割的并行计算机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: