Presentation is loading. Please wait.

Presentation is loading. Please wait.

第六讲 并行算法设计与并行模式 课程网站:CourseGrading 主讲教师: 赵长海

Similar presentations


Presentation on theme: "第六讲 并行算法设计与并行模式 课程网站:CourseGrading 主讲教师: 赵长海"— Presentation transcript:

1 第六讲 并行算法设计与并行模式 课程网站:CourseGrading http://judge.buaa.edu.cn 主讲教师: 赵长海
主讲教师: 赵长海 办公室: 新主楼G910 Spring 2013

2 本章内容 6.1 并行算法设计基本方法 6.2 常用的并行模式 6.3 Google的MapReduce编程框架

3 分解(decompositon) 执行 6.1 并行算法设计基本方法 并行设计关键步骤 将计算分成很多小的计算
将计算分到不同处理器上并行执行

4 例 数据分解 (Data Decomposition) 一.数据分解 第四讲的矩阵相乘 第五讲的统计数组中10的个数
即,数据并行。将数据分成很多块,每个计算任务处理一部分数据 数据分解 (Data Decomposition) 第四讲的矩阵相乘 第五讲的统计数组中10的个数 Google的MapReduce

5 数据分解方法:

6 例 功能分解 (Functional Decomposition) 二.功能分解 Office Word QQ ...
即,任务并行。将计算根据功能划分,每个任务处理整个工作的一部分。 功能分解 (Functional Decomposition) Office Word QQ ...

7 6.2 并行模式 流水线并行(pipeline) 常用的并行模式 主从(Master/worker) 线程池(thread pool)
分而治之(Divide & Conquer)

8 流水线并行模式 一.流水线 流水线是生产者-消费链。数据流通过一串计算任务,前一计算任务的输出是下一个计算任务的输入。 Stage 1
Time C1 C2 C3 C4 4个阶段的流水线

9 流水线分类: 线性流水线 非线性流水线 Stage 1 Stage 2 Stage 3 Stage 4 Stage 1 Stage 2

10 主从(master-worker)并行模式:
二.主从 一个进程(线程)作为master,其它进程(线程)作为worker: master产生和管理任务; master调度并分派任务给worker; worker完成分派的任务之后,向master请求更多 的任务 主从(master-worker)并行模式: A B D E tasks queue C master worker

11 线程池(thread pool)并行模式:
四.线程池 创建一定数量线程,配备一个任务队列,存放其它线程提交的任务。线程池内的线程从队列中取任务执行,如果队列中没任务,线程池内的线程挂起。 线程池(thread pool)并行模式:

12 应用 消除频繁创建撤销线程的开销 较快的响应速度 避免过量占用系统资源(相比每到达一个任务就创建一个线程的方式) 使用线程池的优势
Web服务器,例如Tomcat服务器可以配置线程池内的线程数 应用

13 例:TCP服务器 创建线程池 int main(int argc, char **argv) { ……
参考:Network Programming Volume 1, Third Edition: The Sockets Networking API 创建线程池 int main(int argc, char **argv) { …… listenfd = Tcp_listen(argv[1], argv[2], &addrlen); for (i = 0; i < nthreads; i++) Pthread_create(&tptr[i].thread_tid, NULL, &thread_main, (void *) i); Signal(SIGINT, sig_int); for ( ; ; ) pause(); /* everything done by threads */ }

14 一个线程处理一个客户端的请求 void * thread_main(void *arg) { int connfd;
void web_child(int); socklen_t clilen; struct sockaddr *cliaddr; cliaddr = Malloc(addrlen); for ( ; ; ) { clilen = addrlen; Pthread_mutex_lock(&mlock); connfd = Accept(listenfd, cliaddr, &clilen); Pthread_mutex_unlock(&mlock); web_child(connfd); /* process request */ Close(connfd); }

15 分而治之 (divide & conquer)并行模式:
五.分而治之模式 将问题被分成许多并行的子问题,最后合并结果。 分而治之 (divide & conquer)并行模式: problem subproblem Compute solution merge split

16 思 考 6.3 Google的MapReduce分布式编程框架
编写一个能够在数千台机器运行,处理数TB~PB数据的并行程序,有哪些关键问题或难点

17 编写能够在上千节点上执行,且可扩展的并行程序难点
并行控制 机器故障 负载均衡 数据I/O 网络瓶颈

18 MapReduce: MapReduce等同于分而治之并行模式,Google创造性的实现了基于该并行模式的分布式编程框架,简化并行编程难度。
copy/sort/merge阶段 数据split 阶段 Map阶段 Reduce阶段

19 MapReduce实现的单词计数伪代码 map(String key, String value) {     // key: document name     // value: document contents     for each word w in value:         EmitIntermediate(w, “1”); } reduce(String key, Iterator values) {     // key: a word     // values: a list of counts     int result = 0;     for each v in values:         result += ParseInt(v);     Emit(AsString(result)); }

20 MapReduce深入学习 学习路线 http://hadoop.apache.org/ 1. 学会安装配置 2. 运行例子程序
3. 了解系统架构 4. 读MapReduce源代码

21

22 2. 并行模式 4. Google的MapReduce 并行算法设计与 并行模式 1. 并行算法设计 数据分解 功能分解 流水线并行
1. 并行算法设计 数据分解 功能分解 并行算法设计与 并行模式 2. 并行模式 流水线并行 主从模式 线程池 分而治之 4. Google的MapReduce 简化编写大规模并行程序的难度 隐藏并行控制、故障处理、负载均衡、数据I/O MapReduce的限制 不是一个通用的编程框架,只适合分而治之并行模式的应用


Download ppt "第六讲 并行算法设计与并行模式 课程网站:CourseGrading 主讲教师: 赵长海"

Similar presentations


Ads by Google