关键词:
并行算法的设计基础
并行算法的定义和分类
- 并行算法:一些可同时执行的诸进程的集合,这些进程互相作用和协调动作从而达到给定问题的求解。
并行算法分类
- 数值计算与非数值计算
- 同步算法和异步算法
- 分布算法
- 确定算法和随机算法
并行算法的表达
描述语言
- 可以使用类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)并行运行多种机器学... 查看详情