并行分布式计算 并行算法常用设计技术

news2024/11/28 12:46:33

文章目录

  • 并行分布式计算 并行算法常用设计技术
    • 划分设计技术
      • 均匀划分 - PSRS
      • 方根划分- Valiant 归并算法
      • 对数划分
      • 功能划分
    • 分治设计技术
      • 双调归并网络
      • 凸包问题
    • 平衡树设计技术
      • 求最大值
      • 前缀和
    • 倍增设计技术
      • 表序问题
    • 流水线设计技术
      • 卷积

并行分布式计算 并行算法常用设计技术

这里讲了很多经典并行算法~

划分设计技术

均匀划分 - PSRS

n n n 个元素, p p p 台处理器,直接将 n n n 个元素分割为 p p p 端,每段含 n p \frac{n}{p} pn 个元素,并且分配给一台处理器。

MIMD 模型上的 Parallel Sorting by Regular Sampling

请添加图片描述

这里 n = 27 n=27 n=27 p = 3 p=3 p=3 ;MIMD 的内存不共享:

均匀划分:将 n n n 个元素均匀划分为 p p p 段,按顺序分给每一个处理器;

局部排序:每个处理器调用串行排序算法进行排序;

正则采样:每个处理器在自己的段上等间距地选取 p p p 个样本;

样本排序:(比如由根进程)将采样 p 2 p^2 p2 个样本调用串行排序算法进行排序;

选择主元:(比如由根进程)将排序后的样本均匀地选择 p − 1 p-1 p1 个主元;

主元划分:每个处理器根据自己段上数字和 p − 1 p-1 p1 个主元的大小关系,划分为 p p p 个小段;

全局交换:每个处理器将自己的第 i i i 小段发送给 i i i 号处理器;

归并排序:每个处理器将自己留下的小段以及接收到的 p − 1 p-1 p1 个小段进行归并排序

瓶颈在于 ⑦ 全局交换

方根划分- Valiant 归并算法

取每第 i n   ( i = 1 ,   2 ,   ⋯   ) i\sqrt{n}\,(i=1,\,2,\,\cdots) in (i=1,2,) 个元素作为划分元素,将序列划分为若干段,再将序列划分为若干段,然后分段进行处理。

SIMD-CREW 上的 Valiant 归并算法

请添加图片描述

SIMD 共享内存、单个指令(类似GPU的环境),多个数据流需要执行同样的指令。

请添加图片描述

对数划分

取每第 i log ⁡ n   ( i = 1 ,   2 ,   ⋯   ) i\log{n}\,(i=1,\,2,\,\cdots) ilogn(i=1,2,) 个元素作为划分元素,将序列划分为若干段,再将序列划分为若干段,然后分段进行处理。

请添加图片描述

例如 X X X 中有两个数字(-13、7)比 13 小,因此 r a n k ( Y : X ) rank(Y:X) rank(Y:X) 的第一项是 2;

PRAM 多个进程、共享内存:

请添加图片描述

  • 这个问题输出是,将 B B B 对数均匀划分,并且将 A A A 按照 B B B 的大小划分进行划分,最后输出 A A A B B B 的每一段组合。(我感觉我解释得没有更好。。。)

  • 算法中的 j ( i ) j(i) j(i) 数组代表 A i − 1 A_{i-1} Ai1 的最后一个元素下标,也就是比 B i B_i Bi 小的、下标最大的 A A A 中的元素,这样 j ( i ) j(i) j(i) j ( i + 1 ) j(i+1) j(i+1) 就可以确定 A i A_i Ai 的下标范围;(注意这里是 1-index 而不是 0-index)

  • 这个问题可以作为排序问题的一个子问题,因为这样输出的 A i A_i Ai B i B_i Bi 就可以进行归并排序,而且不影响整体的有序性。

功能划分

针对具体问题的情况进行划分,往往也是将 n n n 个元素划分成 p p p 组,每组中的元素个数应大于等于 m m m ,各组可并行处理。

(m,n)选择问题

问题:求出 n n n 个元素中前 m m m 个最小者;

输入: A = ( a 1 ,   … ,   a m ) A=(a_1,\,\dots,\,a_m) A=(a1,,am)

输出:前 m m m 个最小者

算法:

功能划分:将 A A A 划分为 g = n / m g=n/m g=n/m 组,每组含 m m m 个元素;

局部排序:使用 Batcher 排序网络将各组并行进行排序(两个有序序列总是可以组成一个双调序列);

两两比较:将所排序的各组,两组两组地进行比较,从而形成 M I N MIN MIN 序列;

排序-比较:对各个 M I N MIN MIN 序列。重复执行 ② 和 ③ ,直到选出 m m m 个最小者

请添加图片描述

分治设计技术

基本步骤

  • 将输入划分成若干规模相等的子问题;
  • 并行地递归求解这些子问题;
  • 并行地归并子问题的解,直到得到原问题的解。

关键在于如何分解子问题,最好子问题之间不需要通信。

双调归并网络

双调序列:一个序列 x 1 ,   x 2 ,   ⋯   ,   x n − 1 x_1,\,x_2,\,\cdots,\,x_{n-1} x1,x2,,xn1 是双调序列(Bitonic Sequence),如果:

  • 存在一个 x k x_k xk 0 ≤ k ≤ n − 1 0\leq k\leq n-1 0kn1) 使得 x 0 ≥ ⋯ ≥ x k ≤ x k + 1 ⋯ ≤ x n − 1 x_0 \geq \cdots \geq x_k \leq x_{k+1}\cdots \leq x_{n-1} x0xkxk+1xn1 成立;

或者:

  • 此序列能够循环旋转使得第一个条件成立

Batcher 定理:给定一个双调序列 x 1 ,   x 2 ,   ⋯   ,   x n − 1 x_1,\,x_2,\,\cdots,\,x_{n-1} x1,x2,,xn1 ,对于所有的 0 ≤ i ≤ n 2 − 1 0\leq i\leq \frac{n}{2}-1 0i2n1 ,执行 x i x_i xi x i + n 2 x_{i+\frac{n}{2}} xi+2n 的交换得到 s i = min ⁡ { x i : x i + n 2 } s_i=\min\{x_i:x_{i+\frac{n}{2}}\} si=min{xi:xi+2n} l i = max ⁡ { x i : x i + n 2 } l_i=\max\{x_i:x_{i+\frac{n}{2}}\} li=max{xi:xi+2n} ,则:

  1. 所形成的小序列 M I N = ( s 0 ,   s 1 ,   ⋯   ,   s n 2 − 1 ) MIN=(s_0,\,s_1,\,\cdots,\,s_{\frac{n}{2}-1}) MIN=(s0,s1,,s2n1) 和大序列 M A X = ( l 0 ,   l 1 ,   ⋯   ,   l n 2 − 1 ) MAX=(l_0,\,l_1,\,\cdots,\,l_{\frac{n}{2}-1}) MAX=(l0,l1,,l2n1) 仍是双调序列;
  2. 对于所有的 0 ≤ i ,   j ≤ n 2 − 1 0\leq i,\,j\leq \frac{n}{2}-1 0i,j2n1 ,满足 s i ≤ l i s_i\leq l_i sili

双调归并可以用比较器网络(Comparator Network)来实现,它是由 Batcher 比较器构成的。比较器是一个双输入和双输出的比较交换单元,可以将两输入中的较小者置于上输出端,而大者置于下输出端。

Batcher 双调归并算法

输入:双调序列 X = ( x 0 ,   x 1 ,   ⋯   ,   x n − 1 ) X=(x_0,\,x_1,\,\cdots,\,x_{n-1}) X=(x0,x1,,xn1)

输出:非降有序序列 Y = ( y 0 ,   y 1 ,   ⋯   ,   y n − 1 ) Y=(y_0,\,y_1,\,\cdots,\,y_{n-1}) Y=(y0,y1,,yn1)

算法:

def bitonic_merge(x):
    for i in range(0, n/2) par-do:
        s[i] = min{x[i], x[i+n/2]}
        l[i] = max{x[i], x[i+n/2]}
    MIN = bitonic_merge(s)
    MAX = bitonic_merge(l)
	return (MIN, MAX)

请添加图片描述

凸包问题

凸多边形:多边形 Q Q Q 上任意两点的连线均处于 Q Q Q 之内,则称多边形 Q Q Q 为凸多边形(Convex Polygon)

凸包:给定平面中 n n n 点集合 S = ( p 1 ,   p 2 ,   ⋯   ,   p n ) S=(p_1,\,p_2,\,\cdots,\,p_n) S=(p1,p2,,pn) ,则 S S S 的凸包(Convex Hull)为包含 S S S 中所有点的最小凸多边形

求凸包的问题,就是要确定凸包边界上的有序定点列表 C H ( S ) CH(S) CH(S)

p p p q q q S S S x x x 轴坐标最大和最小的两点,显然 p q pq pq 将凸包分为上凸包 U H ( S ) UH(S) UH(S) 和小土包 L H ( S ) LH(S) LH(S) ,且 C H ( S ) = U H ( S ) ∪ L H ( S ) CH(S)=UH(S)\cup LH(S) CH(S)=UH(S)LH(S)

请添加图片描述请添加图片描述

输入: S = ( p 1 ,   p 2 ,   ⋯   ,   p n ) S=(p_1,\,p_2,\,\cdots,\,p_n) S=(p1,p2,,pn) ,且已按照 x x x 轴坐标大小排序;

输出:上凸包顶点列表 U H ( S ) UH(S) UH(S)

算法:

def UpperHull(S):
    if n <= 4:
        暴力求出 UH(S) 并且 return
    UH1 = UpperHull(S[1:n/2])
    UH2 = UpperHull(S[n/2:n])
    CT = CommonTangent(UH1, UH2)
    通过 UH1, UH2 和 CT 构造 UH
    return UH

平衡树设计技术

将输出元素作为叶节点构建一个平衡二叉树,中间节点为处理节点,自顶向下或自下而上进行并行处理。SIMD 非常适用于二叉树的模式。

求最大值

非常直接地两两比较,最终得到最大的那个:

请添加图片描述

前缀和

(也适用于求前缀积)串行算法需要 O ( n ) O(n) O(n) 的时间;

平衡树的并行算法如下:先自下而上地求和,在自顶向下将和播送到合适的位置。

请添加图片描述

请添加图片描述

使用平衡树采用 SIMD-SM 的结构的前缀和算法,时间复杂度为 O ( 2 log ⁡ n ) O(2\log n) O(2logn) ,需要 2 n − 1 2n-1 2n1 个处理器。相比于 PRAM 结构,渐进复杂度相等,但是更不实用。

倍增设计技术

倍增设计(Doubling Technique),又称为指针跳跃(Pointer Jumping)技术,特别适合于处理链表或有向树之类的数据结构。

当递归调用时,所要处理数据之间的距离逐步加倍,经过 k k k 步以后即可完成距离为 2 k 2^k 2k 的所有数据的计算。

表序问题

问题: n n n 个元素的链表 L L L ,求出每个元素在 L L L 中的位序 rank,即距离表尾的距离

请添加图片描述

算法:next 数组代表结点的后继节点

par-do 初始化 next[k] 和 disance[k]	  # O(1)
执行 ceil(log(n)): 	# O(logn)
    对 k par-do: 	 # O(1)
        if next[k] != next[next[k]]: # 即 k 的后继不是 0 时
            distance[k] = distance[k] + distance[next[k]]
            next[k] = next[next[k]]
    对 k par-do:
    	rank[k]=distance[k] # O(1)

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn) ,所需处理器为 p = n p=n p=n

流水线设计技术

就类似于体系结构里的流水线技术,每个进程执行流水线的一个阶段,通信模式也变得简单,只发生在相邻的阶段之间,可以完全地异步进行,可用于静态网络。可以有不止一条的流水线。

卷积

请添加图片描述

请添加图片描述

请添加图片描述

中间需要空一格是因为, x x x y y y 的序列同时往中间移动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

空调群控、智能报警,这些设备有点牛

空调绝对是夏季使用率高的电器之一&#xff0c;尤其是今年全国各地高温不断&#xff0c;说“命都是空调给的”都不为过...... 在家的时候&#xff0c;我们可以随手开关空调&#xff0c;非常方便&#xff0c;如果是学校教学楼、工厂宿舍、银行网点、办公大楼、机房等地的管理者…

原神服务端搭建架设Centos系统

原神服务端搭建架设Centos系统 我是艾西&#xff0c;今天为大家带来原神服务端centos系统的教程 Step1. 准备工具 这个端在Windows、Linux系统上都可以跑&#xff0c;本次教程基于Linux。 准备如下工具&#xff1a; 服务器1台 centos7 系统 最低配置32核32G 公网联机 2. 手…

Python采集<灵剑尊>全本内容,一次性看个爽~

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块 使用知识点: python基础语法: print 输出函数 字符…

如何在繁重的工作中持续成长?

目录 一、认知&#xff1a;打破成长误区误区 1&#xff1a;个人成长和工作相互冲突误区 2&#xff1a;做自己没了解过的事情才是成长误区 3&#xff1a;学的东西越多&#xff0c;成长越快 二、实施&#xff1a;如何高效的利用时间2.1常见的时间管理法2.2 记录&#xff1a;提醒事…

三、easyUI中的accordion(分类)组件

1.accordion&#xff08;分类&#xff09;组件的概述 分类空间允许用户使用多面板&#xff0c;但在同一时间只会显示一个。每个面板都内建支持展开和折叠功能。点击一个面板的标题将会展开或折叠面板主体。面板内容可以通过指定的href属性使用ajax方式读取面板内容。用户可以定…

NISP含金量如何?NISP一级好考吗?

国家信息安全水平测试&#xff08;NationalInformationSecurityTestProgram&#xff0c;通称NISP&#xff09;&#xff0c;是通过中国信息安全测评中心执行塑造我国网络空间安全优秀人才的一个项目。 含金量很高值得考&#xff0c;NISP分为一级、二级、三级&#xff0c;其中一…

【JAVA程序设计】(C00136)基于SSM(非maven)的养老院综合服务管理系统

基于SSM&#xff08;非maven&#xff09;的养老院综合服务管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 本项目为基于SSM养老院综合服务系统&#xff0c;本项目分为二种角色:管理员、护工&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,个人资料…

java语法(二)线程并发、Juit单元测试、反射机制、注解、动态代理、XML解析、JVM

文章目录 线程并发多线程多线程的创建Thread常用API 线程同步与通信线程同步&#xff1a;单例模式的三种写法同步代码块同步方法Lock锁 线程通信 线程池获取线程池对象ThreadPoolExecutor线程池处理runnable任务线程池处理callable任务 Executors定时器Timer调度可重复执行任务…

Springboot +Flowable,会签、或签简单使用(一)

一.简介 **会签&#xff1a;**在一个流程中的某一个 Task 上&#xff0c;这个 Task 需要多个用户审批&#xff0c;当多个用户全部审批通过&#xff0c;或者多个用户中的某几个用户审批通过&#xff0c;就算通过。 例如&#xff1a;之前的请假流程&#xff0c;假设这个请假流程…

勇于创新,全力以赴,流辰信息快速开发平台助力企业提质增效!

在科技、社会、信息都快速发展的今天&#xff0c;每一家企业都希望能跟上时代的发展步伐&#xff0c;提质增效&#xff0c;获得长远发展。如今&#xff0c;办公自动化正在迅猛发展&#xff0c;数字化转型升级成为了各大企业的发展趋势和奋斗目标&#xff0c;流辰信息快速开发平…

【大数据模型】使用Claude浅试一下

汝之观览&#xff0c;吾之幸也&#xff01;本文主要聊聊Claude使用的流程&#xff0c;在最后对国内外做了一个简单问题的对比&#xff0c;希望国内的大数据模型更快的发展。 一、产品介绍 claude官网 Claude是一款由前OpenAI的研究员和工程师开发的新型聊天机器人&#xff0c;…

chatGPT嵌入浏览器搜索

正文 看效果&#xff0c;注意右侧&#xff1a; 更牛的是你还可以继续向他回答的进行下一步更细节的提问&#xff0c;互动交流问题&#xff0c;妥妥的一对一辅导啊。 安装此插件后&#xff0c;你还可以通过选中 文字 来解读&#xff0c;真是爱了爱了&#xff0c;只想说 "&a…

数据安全治理流程设计

在上一篇讲了 政务数据分级安全保护要求(明细) 只能说可以作为前期咨询工作的理论依据之一,但数据治理具体如何展开工作?这篇简单设计下,后续会有定期更新数据安全治理这方面的文章。 数据治理是大数据发展而来也是信息技术发展而来,在之前最多是数据安全防护,当然目前很…

专业的ADAS测试记录仪ETHOS

随着ADAS驾驶辅助系统技术的快速发展及日臻成熟&#xff0c;近年来ADAS在全球汽车市场已开始快速普及和商业化&#xff0c;而如何确保ADAS系统的可靠和安全俨然成为汽车领域的重要问题。因此&#xff0c;ADAS驾驶辅助系统的测试也成为了各大整车厂及零部件厂商关注的热点。 一 …

内网搭建Jenkins自动化远程部署项目到Windows服务器

一、下载Jenkins War Jenkins Packages Jenkins War Packages This is the WAR package repository of Jenkins for installation.You will need to explicitly install a supported Java runtime environment (JRE), e.g. Eclipse Temurin.Weekly Release Line Supported Ja…

Philosophy of life: Love and Time

背景介绍: 因为爱、幸福、快乐、悲伤、富有、悲伤等交织在一起组成了人这样一个特殊的感情个体&#xff0c;现实生活中很多人忽视了爱的珍贵&#xff0c;这个故事讲的是"富有"&#xff0c;"虚荣","悲伤","狂喜" 都不能理解爱的珍贵&am…

docker安装kafka(M2芯片)

背景&#xff1a;想通过kafka做一个需求&#xff0c;之前没有用过&#xff0c;将TXT文件中的数据加载到kafka中&#xff0c;再通过logstash将kafka中的数据加载到es中。 基本操作环境介绍 操作系统苹果M2kafka镜像版本wurstmeister/kafkazookeeper镜像版本zookeeper:latestka…

ERM LABS 与 The Sandbox 战略合作,将真人密室逃脱游戏引进元宇宙

将现实生活中的体验带入一个全新的维度&#xff01;ERM LABS 专注于将现实生活中的娱乐及冒险体验以游戏独特架构设计扩展到元宇宙裡。与 The Sandbox 合作&#xff0c;该项目旨在为全球合作的真人密室逃脱场所提供无限开放形的线上虚拟世界&#xff0c;让玩家尽情享受考验智商…

【云原生进阶之PaaS中间件】第一章Redis-2.3.2哨兵模式

1 哨兵模式 由于无法进行主动恢复&#xff0c;因此主从模式衍生出了哨兵模式。哨兵模式基于主从复制模式&#xff0c;只是引入了哨兵来监控与自动处理故障。Redis Sentinel是社区版本推出的原生高可用解决方案&#xff0c;Redis Sentinel部署架构主要包括两部分&#xff1a;Red…

OpenAI是什么?

OpenAI是一家人工智能技术公司&#xff0c;成立于2015年&#xff0c;总部位于美国旧金山。它的创始人包括埃隆马斯克等多名知名人士&#xff0c;公司的目标是推进人工智能技术的发展&#xff0c;同时确保人工智能的发展不会对人类造成负面影响。 OpenAI在研究和开发各种人工智能…