前沿计组知识入门(二)

第2页:并行计算与编程

  • 硬件
    • 多处理器
    • 多内存
    • 互连网络
  • 系统软件
    • 并行操作系统
    • 用于表达和协调并发的编程构造
  • 应用软件
    • 并行算法
  • 目标
    • 利用硬件、系统和应用软件实现加速(速度提升): T p = T s p T_p=\frac{T_s}{p} Tp=pTs
    • 解决需要大量内存的问题

第3页:并行算法/公式化

  • 并行公式化
    • 并行化串行算法。
  • 并行算法
    • 可能与串行算法完全不同。
  • 重点
    • 主要讨论如何开发并行公式化。
    • 也会涉及一些非串行算法的并行例子。

第4页:创建并行程序

  • 思考过程
    • 识别可以并行执行的工作。
    • 分割工作(以及相关数据)。
    • 管理数据访问、通信和同步。
  • 主要目标
    • 加速(其他目标包括高效率、成本、面积、功耗等,或解决单机无法容纳的大问题)。

第5页:并行算法/公式化的元素

  • 并行公式化
    • 并行化串行算法。
  • 并行算法
    • 可能是完全不同的算法。
  • 目标
    • 讨论如何开发并行公式化。
  • 元素
    • 并发执行的任务。
    • 将任务映射到多个处理器。
    • 在不同处理器之间分配输入/输出和中间数据。
    • 管理共享数据的访问。
    • 在并行执行的各个阶段同步处理器。
  • 终极目标
    • 最大化并发性,减少并行化的开销,最大化潜在加速比。

第6页:寻找并发的工作部分

  • 分解
    • 将计算分解为更小的工作单元(任务)。
    • 将问题分解为可以并行执行的任务。
    • 分解不必是静态的,可以在程序执行过程中动态识别任务。
  • 关键点
    • 创建足够多的任务以保持机器上的所有执行单元忙碌。
    • 任务是程序员定义的,被认为是不可分割的。
  • 依赖关系
    • 确定任务之间的依赖关系(或缺乏依赖关系)。
    • Amdahl定律:依赖关系限制了并行化的最大加速比。

第7页:Amdahl定律

  • 定义
    • 假设 S S S是程序中无法并行化的部分(即必须顺序执行的部分)。
    • 并行执行的最大加速比 ≤ 1 S \leq\frac{1}{S} S1

第8页:简单示例

  • 问题
    • 对一个 N × N N\times N N×N图像进行两步计算:
      1. 将所有像素的亮度加倍(每个网格元素的独立计算)。
      2. 计算所有像素值的平均值。
  • 顺序实现
    • 两步各需要 ∼ N 2 \sim N^2 N2时间,总时间为 ∼ 2 N 2 \sim 2N^2 2N2

第9页:分解计算还是数据?

  • 问题
    • 许多需要大量计算的问题是因为涉及大量数据。
    • 并行化程序可以视为分割计算(工作),也可以视为分割数据(计算与数据相关)。
  • 情况
    • 在某些情况下,任务与数据的对应关系不明确,此时自然会想到分割计算。

第10页:密集矩阵-向量乘法示例

  • 问题
    • 每个输出向量元素的计算与其他元素无关。
    • 可以将矩阵-向量乘法分解为 n n n个任务。
  • 观察
    • 任务共享数据(向量 b b b),但没有控制依赖关系(即任务不需要等待其他任务的部分完成)。
    • 所有任务在操作数上大小相同。
    • 是否可以将问题分解为更多任务?
    • 任务可以有不同的大小(任务的粒度)。

第11页:数据库查询处理示例

  • 问题
    • 执行查询:
      MODEL="CIVIC" AND YEAR=2001 AND (COLOR="GREEN" OR COLOR="WHITE")
      
    • 数据库表:
      ID# Model Year Color Dealer Price
      4523 Civic 2002 Blue MN $18,000
      3476 Corolla 1999 White IL $15,000
      7623 Camry 2001 Green NY $21,000
      9834 Prius 2001 Green CA $18,000
      6734 Civic 2001 White OR $17,000
      5342 Altima 2001 Green FL $19,000
      3845 Maxima 2001 Blue NY $22,000
      8354 Accord 2000 Green VT $18,000
      4395 Civic 2001 Red CA $17,000
      7352 Civic 2002 Red WA $18,000
  • 方法
    • 查询的执行可以分解为多个子任务,每个任务生成满足特定子句的中间表。
    • 任务之间的依赖关系通过图表示。

第12页:数据库查询处理的另一种分解

  • 问题
    • 同样的问题可以以不同的方式分解为子任务。
  • 观察
    • 不同的任务分解可能导致显著不同的并行性能。

第13页:算法与并发性

  • 并行算法
    • 任务和分解
    • 进程和映射
    • 进程与处理器的区别
  • 分解技术
    • 递归分解
    • 数据分解
    • 探索性分解
    • 投机性分解
    • 混合分解
  • 任务和交互的特征
    • 任务生成、粒度和上下文
    • 任务交互的特征

第14页:分解技术

  • 问题
    • 如何将任务分解为多个子任务?
  • 方法
    • 没有适用于所有问题的通用方法,但有一些适用于广泛问题类别的常用技术:
      • 递归分解
      • 数据分解
      • 探索性分解
      • 投机性分解
      • 混合分解

第15页:递归分解

  • 适用问题
    • 使用分治策略解决的问题。
  • 方法
    • 将问题分解为一组子问题。
    • 递归地进一步分解子问题,直到达到所需的粒度。

第16页:递归分解示例(快速排序)

  • 问题
    • 快速排序算法。
  • 方法
    • 围绕枢轴将列表分割后,每个子列表可以并发处理(每个子列表代表一个独立的子任务)。
    • 可以递归地重复此过程。

第17页:递归分解示例(寻找最小值)

  • 问题
    • 在给定列表中找到最小值。
  • 方法
    • 将问题设计为分治算法。
    • 串行代码:
      procedure SERIAL_MIN(A,n)
      begin
        min=A[0];
        for i:=1 to n-1 do
          if(A[i]
    • 递归代码:
      procedure RECURSIVE_MIN(A,n)
      begin
        if(n=1)then
          min=A[0];
        else
          lmin:=RECURSIVE_MIN(A,n/2);
          rmin:=RECURSIVE_MIN(&(A[n/2]),n-n/2);
          if(lmin

第18页:递归分解示例(任务依赖图)

  • 问题
    • 在集合{4,9,1,7,8,11,2,12}中找到最小值。
  • 方法
    • 使用递归分解策略自然地分解任务。
    • 任务依赖图展示了任务之间的关系。

第19页:递归分解评估

  • 问题
    • 递归分解产生的分解质量如何?
  • 评估指标
    • 平均并发性
    • 关键路径长度
  • 示例评估
    • 快速排序和最小值查找的分解效果如何?

第20页:数据分解

  • 适用问题
    • 操作大量数据的问题。
  • 方法
    • 通过数据的多样性来推导任务。
    • 数据分解通常分为两步:
      1. 分割数据。
      2. 根据数据分割诱导计算分割。

第21页:数据分解(选择数据)

  • 问题
    • 应该分割哪种数据?
    • 输入/输出/中间数据?
  • 方法
    • 所有这些都可以,导致不同的数据分解方法。
  • 如何诱导计算分割
    • 使用“所有者计算”规则。

第22页:“所有者计算”规则

  • 定义
    • 被分配特定数据项的进程负责与该数据相关的所有计算。
    • 对于输入数据分解,所有使用输入数据的计算都由分配到该数据的进程完成。
    • 对于输出数据分解,输出由分配到该输出数据的进程计算。

第23页:数据分解(输出数据)

  • 观察
    • 在许多情况下,每个输出元素可以独立于其他元素计算(仅作为输入的函数)。
    • 按任务分割输出自然地分解问题。

第24页:输出数据分解示例(矩阵乘法)

  • 问题
    • 乘以两个 n × n n\times n n×n矩阵 A A A B B B以得到矩阵 C C C
  • 方法
    • 将输出矩阵 C C C分割为四个任务。

第25页:输出数据分解示例(其他分解方式)

  • 问题
    • 对于相同的输出数据分布,可以推导出其他分解方式。
  • 示例
    • 分解I和分解II的任务分配不同。

第26页:中间数据分解示例

  • 问题
    • 分解中间数据结构导致任务分解。
  • 任务
    • 阶段I和阶段II的任务分配。

第27页:中间数据分解示例(任务依赖图)

  • 问题
    • 任务依赖图展示了任务之间的关系。
  • 观察
    • 任务数量和依赖关系。

第28页:输入数据分割示例

  • 问题
    • 输入数据分割的观察和方法。

第29页:输出数据分解示例

  • 观察
    • 如果交易数据库在进程之间复制,每个任务可以独立完成,无需通信。
    • 如果数据库也在进程之间分割(出于内存利用原因),每个任务首先计算部分计数,然后在适当的任务中聚合这些计数。

第30页:输入数据分割

  • 适用情况
    • 如果每个输出可以自然地作为输入的函数计算。
    • 在许多情况下,这是唯一的自然分解方式,因为输出在事先并不明确(例如,寻找列表中的最小值、排序列表等)。
  • 方法
    • 每个输入数据分割关联一个任务,任务使用其部分数据进行尽可能多的计算,后续处理将这些部分结果合并。

第31页:输入数据分割示例

  • 问题
    • 数据库计数示例。
  • 方法
    • 分割输入(交易集),每个任务为所有项目集生成部分计数,然后在后续步骤中聚合这些计数。

第32页:输入和输出数据分割

  • 观察
    • 输入和输出数据分割可以结合使用,以实现更高的并发性。
    • 以项目集计数为例,交易集(输入)和项目集计数(输出)可以同时分割。

第33页:数据分解

  • 特点
    • 最常用的分解技术。
    • 并行处理通常应用于涉及大量数据的问题,基于数据分割工作是提取高并发性的自然方式。
    • 可以单独使用,也可以与其他分解方法结合使用(混合分解)。

第34页:域分解

  • 定义
    • 通常可以视为输入数据分解。
    • 不一定是输入数据,只是计算的域。
  • 方法
    • 将域分割到任务中,每个任务负责计算其域分割部分的答案。
  • 任务通信
    • 任务可能需要通信边界值以执行必要的计算。

第35页:域分解示例(定积分)

  • 问题
    • 计算定积分 ∫ 0 1 ( 2 x + 1 )   d x \int_0^1(2x+1)\,dx 01(2x+1)dx
  • 方法
    • 将积分区间分割到任务中,每个任务计算其区间的结果,最后将所有任务的答案相加。

第36页:域分解(网格/矩阵问题)

  • 特点
    • 对于网格/矩阵问题,域分解是一种自然的方法。
    • 存在用于更复杂域分解问题的算法,后续会讨论。

第37页:探索性分解

  • 适用问题
    • 对应于搜索解空间的计算分解。
    • 通常涉及探索(搜索)解的状态空间。
  • 问题类型
    • 离散优化问题(0/1整数规划、二次分配问题等)、定理证明、游戏等。

第38页:探索性分解示例(15拼图问题)

  • 问题
    • 15拼图问题(一个瓷砖拼图)。
  • 方法
    • 通过生成当前状态的后继状态来探索状态空间,并将它们视为独立任务。

第39页:探索性分解示例(任务依赖图)

  • 问题
    • 任务依赖图展示了任务之间的关系。
  • 观察
    • 任务数量和依赖关系。

第40页:探索性分解(异常计算)

  • 特点
    • 不是通用方法。
    • 可能导致加速比异常。
    • 在许多情况下,分解技术可能会改变并行公式化的工作量。例如,找到第一个解时可以终止未完成的任务。
    • 这可能导致相对于串行执行的超线性或亚线性加速。

第41页:投机性分解

  • 适用问题
    • 在某些应用中,任务之间的依赖关系事先未知。
  • 方法
    • 对于此类应用,无法识别独立任务。
    • 有两种方法:
      • 保守方法:只在确定任务没有依赖关系时识别独立任务。
      • 乐观方法:即使任务可能出错,也会调度任务。
  • 特点
    • 保守方法可能并发性较低,乐观方法可能需要回滚机制。

第42页:投机性分解示例(离散事件模拟)

  • 问题
    • 离散事件模拟。
  • 方法
    • 中心数据结构是时间有序的事件列表。
    • 按时间顺序提取事件,处理事件,并在需要时将结果事件插入事件列表。
  • 示例
    • 将一天的活动视为离散事件系统。

第43页:投机性分解示例(网络模拟)

  • 问题
    • 模拟节点网络。
  • 方法
    • 包括各种输入、节点延迟参数、队列大小、服务率等。

第44页:投机性执行

  • 问题
    • 如果预测错误:
      • 浪费工作
      • 可能需要撤销工作
      • 恢复状态的开销(内存/计算)
  • 特点
    • 然而,这可能是提取并发性的唯一方式。

第45页:总结

  • Amdahl定律
    • 并行化的最大加速比受限于程序中的串行执行部分。
  • 创建并行程序的方面
    • 分解以创建独立工作、将工作分配给工作者、协调(协调工作者的工作处理)、映射到硬件。
  • 未来讨论重点
    • 识别依赖关系(今天重点)。
    • 识别局部性、减少同步(即将讨论)。

你可能感兴趣的:(计组,人工智能,笔记)