并行计算 PCAM方法学

并行计算 PCAM方法学

  • 零、what
  • [一、 划分](#一、 划分)
    • [1、 划分方法描述](#1、 划分方法描述)
    • [2、 域分解](#2、 域分解)
    • [3、 功能分解](#3、 功能分解)
    • [4、 划分判据](#4、 划分判据)
  • [二、 通信](#二、 通信)
    • [1、 方法描述](#1、 方法描述)
    • [2、 四种通讯模式](#2、 四种通讯模式)
    • [3、 通讯判据](#3、 通讯判据)
  • [三、 组合](#三、 组合)
    • [1、 方法描述](#1、 方法描述)
    • [2、 表面-容积效应](#2、 表面-容积效应)
    • [3、 重复计算](#3、 重复计算)
    • [4、 组合判据](#4、 组合判据)
  • [四、 映射](#四、 映射)
    • [1、 方法描述](#1、 方法描述)
    • [2、 负载平衡算法](#2、 负载平衡算法)
    • [3、 任务调度算法](#3、 任务调度算法)
    • [4、 映射判据](#4、 映射判据)

零、what

PCMA方法学是指划分(partitioning)、通讯(Communication)、组合(Agglomeration)、映射(Mapping)

一、 划分

1、 划分方法描述

  • 划分一般先进行数据划分(域分解,domain decomposition),再进行功能分解(functional decomposition)
  • 划分阶段忽略目标机器的处理器核心数和体系结构

2、 域分解

域分解划分的对象是数据,将数据划分成大致相等的小数据片(划分时考虑数据上的相应操作,如果一个任务需要别的任务的数据,则会产生任务间的通信)


3、 功能分解

功能分解的对象是计算。

划分后,研究不同任务所需的数据。

  • 如果这些数据不相交,则划分成功;
  • 如果数据有相当的重叠, 意味着要重新进行域分解和功能分解;

4、 划分判据

  1. 是否具有灵活性?
  2. 是否避免了冗余计算和存储?
  3. 任务尺寸是否大致相当?
  4. 任务数与问题尺寸是否成比例?
  5. 功能分解是一种更深层次的分解,是否合理?

二、 通信

1、 方法描述

划分产生的任务,一般不能完全独立执行,需要在任务 间进行数据交流;从而产生了通讯;

功能分解确定了诸任务之间的数据流;

各任务是并发执行的,通讯则限制了这种并发性

2、 四种通讯模式

局部|全局通信模式

结构化|非结构化通信模式(通信方式是否一致)

静态|动态通信模式

同步|异步通信


3、 通讯判据

  1. 所有任务是否执行大致相当的通信
  2. 是否尽可能的局部通信
  3. 通信操作是否能够并行执行
  4. 同步任务的计算是否能够并行执行

三、 组合

1、 方法描述

在前两个阶段(划分和通信)中,我们为了追求最大并行性,通常把任务切分得非常细(Fine-grained)。但在现实的物理机器上,管理成千上万个极小任务的开销(Overhead)是巨大的。

组合的核心目标是:在保持足够并行度的前提下,通过合并小任务来减少通信成本和管理开销。

2、 表面-容积效应

是一个几何上的概念,指随着物体尺寸,体积增长快于表面积,这里拿表面积类比通信量,容积类比计算量,随着并行任务颗粒度变大,计算量的增长是比通信量增长快,计算通信比会增加,也就是效率会增加。

3、 重复计算

4、 组合判据

  1. 增加粒度是否减少了通讯成本?
  2. 重复计算是否已权衡了其得益?
  3. 是否保持了灵活性和可扩放性?
  4. 组合的任务数是否与问题尺寸成比例?
  5. 是否保持了类似的计算和通讯?
  6. 有没有减少并行执行的机会?

四、 映射

1、 方法描述

每个任务要映射到具体的处理器,定位到运行机器上;

任务数大于处理器数时,存在负载平衡和任务调度问题;

映射的目标:减少算法的执行时间

并发的任务 → 不同的处理器

任务之间存在高通讯的 → 同一处理器

映射实际是一种权衡,属于NP完全问题

2、 负载平衡算法

3、 任务调度算法

任务放在集中的或分散的任务池中,使用任务调度算法将 池中的任务分配给特定的处理器。下面是两种常用调度模式。

4、 映射判据

  1. 采用集中式负载平衡方案,是否存在通讯瓶颈?

  2. 采用动态负载平衡方案,调度策略的成本如何?

相关推荐
破茧蝴蝶6 小时前
Python分布式爬虫完整教程
开发语言·python
大哥您好6 小时前
QEMU 11.1.2 多架构编译指南(x86_64 / aarch64 / riscv64)
linux·服务器
benchmark_cc6 小时前
量化系统架构设计:为什么应该将数据获取与策略逻辑解耦?
python·数据分析·pandas·量化交易·股票数据·quantdash
凤山老林6 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
小白快快跑哦7 小时前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
Thinker QAQ7 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
道满科技7 小时前
Function Calling 参数总出错?只修参数就行
linux·windows·python
Gauss松鼠会8 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
Android系统攻城狮8 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_prepare_read调用流程与实战(七十四)
linux·运维·服务器·gstreamer音视频·音视频进阶
杨云龙UP8 小时前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore