汪道之

有人的地方就有江湖

0%

分布式-chapter1

什么是并行计算

Parallel computing:the use of two or more processors (computers), usually within a single system, working simultaneously to solve a single problem.

并行计算:使用两个或两个以上的处理器(计算机),通常在一个系统内,同时工作,以解决单个问题。

Distributed computing:any computing that involves multiple computers remote from each other that each have a role in a computation problem or information processing.

分布式计算:任何涉及多个计算机彼此远程的计算,每个计算机在计算问题或信息处理中都发挥作用。

什么是并行计算机

并行计算机就是一个支持并行程序的多处理器的计算机系统

两类并行计算机:

  1. 多机:用多台计算机和互连网络构建起来的并行计算机(通过消息)
  2. 集中多处理器(对称多处理器或SMP):一个所有CPU共享一个全局内存的更加高度集中的系统(通过全局内存通信和同步)

并行系统和分布式系统的比较

并行系统 分布式系统
内存 紧密耦合共享内存、UMA、NUMA、分布式内存、消息传递 分布式内存、消息传递、RPC、和/或用于分布式共享内存
控制 全局时钟控制、SIMD、MIMD 没有全局时钟控制、需要同步算法
进程互连 按Tbps组织、总线、网格、树、树网、超立方体网络 按Gbps组织、以太网(总线)、令牌和SCI、以太网(交换网络)
粒度 精细
可靠性 假定 未假定
主要关注 性能(时间和规模)、科学计算 性能(成本和可扩展性)、可靠性/可用性、信息/资源共享

为什么并行计算

科技趋势

微处理器计算能力不断提升,摩尔定律:每1.5年每个芯片上晶体管数量翻倍

但是有诸多限制:

  1. 功率密度限制,由于“立方效应”,并不是越多的晶体管串行处理器的能力就提升越多
  2. 系统架构更改
  3. 芯片收益率限制

应用程序推动

  1. 传统实验有很多局限性,利用计算机进行仿真可以克服这些缺点
  2. 科学数据集呈指数增长
  3. 一些特别具有挑战性的计算

并行计算的问题

硬件问题

  1. 流水线,ILP……
  2. 缓存一致性
  3. 连接问题:单个共享总线与网络
  4. UMA、NUMA……

程序模型问题

  1. 数据共享——单个地址空间与多个地址空间
  2. 过程协调——使用锁、消息、其他方法同步
  3. 分布式与集中式内存
  4. 容错性/可靠性

性能问题

  1. 指标
  2. 型号
  3. 评估并行算法方法

其他问题

  1. 并行计算机语言
  2. 并行编程工具
  3. 便携式并行程序
  4. 并行计算机的自动编程
  5. 并行计算机哲学教育

怎样写并行计算程序

以n个数的求和为例,我们有p个核,p<<n

方法一

每个核求n/p个数的和,最后把结果发给0号核由其求总和

改进

让大家一起完成汇总的工作,0号核汇总0号和1号、2号核汇总2号和3号、等等,循环,直到都汇总给0号核

image-20210531103548461

分析

方法一中,主核心需要完成7次接收和加法;
改进后,主核心只需要完成3次接收和加法

编写并行程序的几个步骤

  1. 任务并行化

    划分各种任务,解决核心问题

  2. 数据并行化

    将用于解决核心问题的数据进行分区,每个核心都对数据的一部分执行类似的操作

核之间需要协调工作

  1. 通信
  2. 负载平衡
  3. 同步

小思考

对于n个数求和的并行代码中,如下图,怎么设计my_first_i和my_last_i呢?(假设n可以被p整除)

image-20210531202147830

参考:为了均分,我们肯定是将任务等分成p份,每份计算数的数量n/p,我们假设变量id表示进程(核)id号,范围是0-(p-1),那么my_first_i=id*(n/p),my_last_i=(id+1)*(n/p)-1。这样分完以后i的范围是0-(n-1)。