并行算法设计

zhangzefei zhangzefei     2023-01-20     770

关键词:

并行算法的设计基础

并行算法的定义和分类

  • 并行算法:一些可同时执行的诸进程的集合,这些进程互相作用和协调动作从而达到给定问题的求解。

并行算法分类

  • 数值计算与非数值计算
  • 同步算法和异步算法
  • 分布算法
  • 确定算法和随机算法

并行算法的表达

描述语言

  • 可以使用类Algol、类Pascal等。
  • 在描述语言中引入并行语句。

并行算法的复杂性度量

串行算法的复杂性度量

  • 最坏情况下的复杂度(Worst-CASE Complexity)
  • 期望复杂度(Expected Complexity)

并行算法的复杂性度量

  • 运行时间t(n):包含计算时间和通信时间,分别用计算时间步和选路时间步作单位。n为问题实例的输入规模。
  • 处理器数p(n)
  • 并行算法成本c(n):c(n)=t(n)p(n)
  • 总运算量W(n):并行算法求解问题时所完成的总的操作步数。

 

Brent定理

 

  令W(n)是某并行算法A在运行时间T(n)内所执行的运算量,则A使用p台处理器可在t(n)=O(W(n)/p+T(n))时间内执行完毕。

  • W(n)和c(n)密切相关
  • P=O(W(n)/T(n))时,W(n)和c(n)两者是渐进一致的
  • 对于任意的p,c(n)>W(n)

并行算法中的同步和通讯

同步

  • 同步是在时间上强使各执行进程在某一点必须互相等待
  • 可用软件、硬件和固件的方法来实现

通讯

  • 共享存储多处理器使用:global read(X,Y)和global write(X,Y)
  • 分布存储多计算机使用:send(X,i)和receive(Y,j)

并行计算模型

PRAM模型

PRAM(Parallel Random Access Machine)模型是多指令流多数据流(MIMD)并行机中的一种具有共享存储的模型。

基本概念

  • 由Fortune和Wyllie于1978年提出,又称SIMD-SM模型。有一个集中的共享存储器和一个指令控制器,通过SM的R/W交换数据,隐式同步计算。

结构图

技术分享图片

分类

(1)PRAM-CRCW并发度并发写

  • CPRAM-CRCW(Common PRAM-CRCW):仅允许写入相同数据
  • PPRAM-CRCW(Priority PRAM-CRCW):仅允许优先级最高的处理器写入
  • APRAM-CRCW(Arbitrary PRAM-CRCW):允许任意处理器自由写入

(2)PRAM-CREW并发读互斥写

(3)PRAM-EREW互斥读互斥写

计算能力比较

  • PRAM-CRCW是最强的计算模型,PRAM-EREW可logp倍模拟PRAM-CREW和PRAM-CRCW

技术分享图片

优点

 

水平集图像分割并行加速算法设计与实现(串行openmpcuda)——串行实现篇(代码片段)

本次水平集图像分割并行加速算法设计与实现包含:原理篇、串行实现篇、OpenMP并行实现篇与CUDAGPU并行实现篇四个部分。具体各篇章链接如下:水平集图像分割并行加速算法设计与实现——原理篇水平集图像分割并行加... 查看详情

fpga算法映射思考

...处理的算法转换为FPGA系统设计的过程称为算法映射,CPU并行算法的实现与FPGA并行算法的实现是有一定区别的。1.算法系统结构图像处理算法主要有两种设计结构:流水线结构和并行阵列结构。1.1流水线结构在我看来,流水线结... 查看详情

基于spark实现并行化apriori算法(代码片段)

...实验要求????????在Spark2.3平台上实现Apriori频繁项集挖掘的并行化算法。要求程序利用Spark进行并行计算。二、算法设计2.1设计思路变量定义D为数据集,设Lk是k项频繁项集,Ck是k项候选集,每一行数据定义为一笔交易(transaction)... 查看详情

openmp并行编程应用—加速opencv图像拼接算法

OpenMP是一种应用于多处理器程序设计的并行编程处理方案,它提供了对于并行编程的高层抽象。仅仅须要在程序中加入简单的指令,就能够编写高效的并行程序,而不用关心详细的并行实现细节。减少了并行编程的难度和复杂度... 查看详情

floyd-warshall算法及其并行化实现(基于mpi)

...分别独立地提出了类似的算法。本文将主要讨论基于MPI的并行 查看详情

并行计算

...线程同步、线程通信、同步缓冲数据等等问题获得最大的并行加速系数,设计并行算法,对比测试。Console.ReadKey(true);//表示接受用户输入并隐藏输入https://msdn.microsoft. 查看详情

mapreduceterasort算法分析(代码片段)

...算法思想实际上,当我们要把传统的串行排序算法设计成并行的排序算法时,通常会想到分而治之的策略,即:把要排序的数据划成M个数据块(可以用Hash的方法做到),然后每个maptask对一个数据块进行局部排序,之后,一个red... 查看详情

奇偶排序

在《java高并发程序设计》一书中看到关于一种并行算法排序方法:奇偶排序。结合书上与网上的各项资料,在这里按自己的理解做下梳理。介绍冒泡排序:是串行算法,在每次迭代过程中,对于每个元素可能与前面元素交换,... 查看详情

floyd-warshall算法及其并行化实现(基于mpi)

...分别独立地提出了类似的算法。本文将主要讨论基于MPI的并行化Floyd算法实现。欢迎关注白马负金羁的博客http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关... 查看详情

并行编程入门

目录1.并行编程简介2.MapReduce2.1MapReduce简介2.2MapReduce框架2.3Hadoop介绍2.4Hadoop基本类2.5Hadoop编程实例1.并行编程简介1.1.并行编程作用,用途商业用途,科学计算,大数据分析1.2.并行编程兴起原因目前的串行编程的局限性使用的流水... 查看详情

openmp用法大全

 OpenMP基本概念OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++和Fortran。OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。编译器根据程序中添加的pragma... 查看详情

并行排序算法

】并行排序算法【英文标题】:ParallelSortAlgorithm【发布时间】:2010-12-2605:30:44【问题描述】:我正在寻找C#中并行化(多线程)排序算法的简单实现,它可以在List<T>或数组上运行,并且可能使用并行扩展,但那部分并... 查看详情

分段多语言并行文本

】分段多语言并行文本【英文标题】:Segmentmultilanguageparalleltext【发布时间】:2014-05-2506:46:13【问题描述】:我有多语言文本,其中包含翻译成多种语言的消息。例如:EnglishmessageRussianmessageUkrainianmessage顺序不准确。我想设计一... 查看详情

小硬核:你知道并行修正移动平均算法吗?

】小硬核:你知道并行修正移动平均算法吗?【英文标题】:Littlehardcore:Doyouknowanyparallelmodifiedmovingaveragealgorithm?【发布时间】:2013-05-0719:09:25【问题描述】:你知道任何并行修正移动平均算法吗?我想快速计算移动平均线,但不... 查看详情

并行化可以降低算法复杂度吗

参考技术A可以。并行计算是通过CPU多核并行地计算一些互相不相关的内容。根据聚类过程相对独立的特性,并行化实现SLIC超像素分割算法,可以有效降低算法时间复杂度。 查看详情

算法与并行计算常规

利用并行计算机实现软件和硬件上的并行算法的主要步骤和层次第5层是指应用层,在这一层里描述的是需要并行计算平台实现的应用和问题。对应所需的输入和输出的格式也在这层进行定义。某些输入和输出(I/O)接口的描述... 查看详情

CUDA 并行扫描算法共享内存竞争条件

】CUDA并行扫描算法共享内存竞争条件【英文标题】:CUDAparallelscanalgorithmsharedmemoryracecondition【发布时间】:2022-01-1804:17:32【问题描述】:我正在阅读“大规模并行处理器编程”(第3版)一书,其中介绍了Kogge-Stone并行扫描算法的... 查看详情

Apache Spark:多机器学习算法的并行化

】ApacheSpark:多机器学习算法的并行化【英文标题】:ApacheSpark:ParallelizationofMultipleMachineLearningALgorithm【发布时间】:2017-09-0321:54:56【问题描述】:有没有办法在Spark中并行化多个ML算法。我的用例是这样的:A)并行运行多种机器学... 查看详情