1 / 33

Pipelined Computations 流水线计算

Lecture 6, Chapter 5. Pipelined Computations 流水线计算. Pipelined Computations. 问题被分成一系列必须是一个接一个完成的任务 ( 顺序程序设计的基础 ). 每个任务由独立的进程或处理器所执行. 例一:求和. 将数组 a 元素累加求和 : for (i = 0; i < n; i++) sum = sum + a[i]; 此 for 循环语句可拆成下面的语句 sum = sum + a[0]; sum = sum + a[1]; sum = sum + a[2];

merrill
Download Presentation

Pipelined Computations 流水线计算

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 6, Chapter 5 Pipelined Computations 流水线计算

  2. Pipelined Computations 问题被分成一系列必须是一个接一个完成的任务 (顺序程序设计的基础). 每个任务由独立的进程或处理器所执行.

  3. 例一:求和 将数组 a元素累加求和: for (i = 0; i < n; i++) sum = sum + a[i]; 此for循环语句可拆成下面的语句 sum = sum + a[0]; sum = sum + a[1]; sum = sum + a[2]; sum = sum + a[3]; sum = sum + a[4]; . . .

  4. 用流水线法

  5. 例二 频率过滤器- 目标是从数字化信号f(t)中去掉特定的频率 (f0, f1, f2,f3, etc.) 信号从流水线的左方进入,每一级负责去掉一个频率:

  6. 流水线计算适用范围 假设问题可分解成一系列的顺序任务,下面三种计算类型可以用流水线方法来加速: 类型1. 如果需要对该问题运行多个实例的。 类型2. 如果必须处理一系列数据的,而每个数据需要多次操作的。 类型3. 如果进程在完成自己的所有内部操作之前能够把下一个进程启动所需要的信息向前传送的。

  7. “类型1” 流水线 时空 图表 每个实例(instance)需要依次经历6个顺序进程

  8. 类型1的另一种时空图标 个人感觉:此问题还不如对每个实例按照工作池(work pool)的动态方法好

  9. “类型2” 流水线时空图表 个人感觉还是工作池的方法要好

  10. “类型3” 流水线 时空图表 在前一个进程结束之前就将信息从当前进程传到下一级。

  11. If the number of stages is larger than the number of processors in any pipeline, a group of stages can be assigned to each processor: 如果阶级数大于进程数,就将级分组成批给每个进程

  12. Computing Platform for Pipelined Applications Multiprocessor system with a line configuration 线性结构的多处理器系统:方便,廉价, 相邻的处理器支持同时消息传递。 以太网

  13. 流水线程序举例 (Examples of each type of computation)

  14. Pipeline Program Examples 多组数 进行组内数的相加 ai ai ai ai ai 类型1的流水线计算

  15. 中间的每个进程 Pi : recv(&accumulation, Pi-1); accumulation = accumulation + number; send(&accumulation, Pi+1); 第一个进程, P0, send(&number, P1); 最后一个进程, Pn-1, recv(&number, Pn-2); accumulation = accumulation + number;

  16. SPMD program 各进程的程序可以合写成: if (process > 0) { recv(&accumulation, process-1); accumulation = accumulation + number; } if (process < n-1) send(&accumulation, process+1); 在最后进程中得到结果。 除了加法运算,其他算术运算都可如此编程。 数多了,应该采用数据划分来减少通信开销。

  17. Pipelined addition numbers Master process and ring configuration

  18. Sorting Numbers A parallel version of insertion sort. (插入排序)

  19. Pipeline for sorting using insertion sort 类型2的流水线计算

  20. 进程 Pi 的基本算法 recv(&number, Pi-1); if (number > x) { send(&x, Pi+1); x = number; } else send(&number, Pi+1); 对于n 个数, 第i个进程要接收 n - i个数。 对于进程i,除了保留一个数外,其他n - i – 1个数要继续传下去。可以使用一个简单的循环语句:

  21. right_procNum=n-i-1; recv(&number, Pi-1); for(j=0;j<right_procNum;j++){ if (number > x) { send(&x, Pi+1); x = number; } else send(&number, Pi+1); }

  22. Insertion sort with results returned to master process using bidirectional line configuration Send(&x, Pi-1); /*把进程i的最终数往前一进程传*/ For(j=0;j<right_procNum;j++){ /*把进程i以后各进程排好的数往前传*/ recv(&number,Pi+1); send(&number,Pi-1); }

  23. Insertion sort with results returned

  24. Prime Number Generation质数生成 Eratosthenes筛选 • 所有的一系列整数从数2开始产生. • 第一个数, 2, 是质数保留. • 所有当前数(2)的倍数都被删除. • 对下一个留下的数(3)重复上面的步骤. • 算法移去所有的非质数,保留质数。 类型2 流水线计算 注意:为了找到n为止的质数,只需考察从头到 的数。

  25. The code for a process, Pi, could be based upon recv(&x, Pi-1); /* repeat following for each number */ recv(&number, Pi-1); if ((number % x) != 0) send(&number, P i+1); 每个进程将接收不同数目的数且事先也不知道数的多少,肯定不会超过n个,用for语句加上在数的序列末尾加“terminator” 信息就可令其终止。每个进程的程序: recv(&x, Pi-1); for (j = 0; j < n; j++) { recv(&number, Pi-1); If (number == terminator) break; (number % x) != 0) send(&number, P i+1); }

  26. Solving a System of Linear Equations 上三角形方程组求解 where a’s and b’s are constants and x’s are unknowns to be found.

  27. Back Substitution First, unknown x0 is found from last equation; i.e., Value obtained for x0 substituted into next equation to obtain x1; i.e., Values obtained for x1 and x0 substituted into next equation to obtain x2: and so on until all the unknowns are found.

  28. Pipeline Solution First pipeline stage computes x0 and passes x0 onto the second stage, which computes x1 from x0 and passes both x0 and x1 onto the next stage, which computes x2 from x0 and x1, and so on. Type 3 pipeline computation

  29. The ith process (0 < i < n) receives the values x0, x1, x2, …, xi-1 and computes xifrom the equation:

  30. Sequential Code Given constants ai,jand bkstored in arrays a[ ][ ] and b[ ], respectively, and values for unknowns to be stored in array, x[ ], sequential code could be x[0] = b[0]/a[0][0]; /* computed separately */ for (i = 1; i < n; i++) { /*for remaining unknowns*/ sum = 0; For (j = 0; j < i; j++) sum = sum + a[i][j]*x[j]; x[i] = (b[i] - sum)/a[i][i]; }

  31. Parallel Code Pseudocode of process Pi(1 < i < n) of could be for (j = 0; j < i; j++) { recv(&x[j], Pi-1); send(&x[j], Pi+1); } sum = 0; for (j = 0; j < i; j++) sum = sum + a[i][j]*x[j]; x[i] = (b[i] - sum)/a[i][i]; send(&x[i], Pi+1); Now have additional computations to do after receiving and resending values.

  32. Pipeline processing using back substitution

More Related