并行算法

并行算法就是用多台处理机联合求解问题的方法和步骤,其运行过程是将给定的问题首先分解成若干个尽量相互独立的子问题,然后使用多台计算机同时求解他,从而最终求得原问题的解。

1.并行算法设计

并行算法设计包括划分法、分治法、平衡树法、倍增法、指针跳跃法、流水线法、破对称法等,根据问题的特性来选择适合的设计方法。 

并行编程的模型主要有数据并行、消息传递和共享存储器。并行语言发展迅速,并行语言种类也非常多。并行语言产生的基本方法对Fortran和C/C++结合起来实现的

根据运算的基本对象不同,可以把并行算法分为数值并行算法和非数值并行算法。

根据进程之间的依赖关系可以分为同步并行算法和异步并行算法。同步并行算法步调一致,异步并行算法步调进展互不相同。同步并行算法任务的各个部分是同步向前推进的,有一个全局时钟来控制各部分的步伐。而对于异步并行算法各部分步伐是互不相同的,他们是根据计算过程的不同阶段决定等待继续或终止

特征

消息传递

共享存储

数据并行

典型代表

MPI, PVM

OpenMP

HPF

可移植性

所有主流并行计算机

SMP, DSM

SMP, DSM, MPP

并行粒度

进程级大粒度

线程级细粒度

进程级细粒度

并行操作方式

异步

异步

松散同步

数据存储模式

分布式存储

共享存储

共享存储

数据分配方式

显式

隐式

半隐式

学习入门难度

较难

容易

偏易

可扩展性

较差

一般

2.数组求和

2.1数组求总和

在PRAM模型上设计一个数字数组求和的算法。数组A[1,...,n]在全局共享存储器中,在A[1,..,n]中计算A[1]+A[2]+...+A[n],总和将在最后单元A[n]中。加上n是2的次幂。

算法:数组求和

procedure Sum(A,n)
begin
    for i=1 to logn do
        forall Pj,where 1<=j<=n/2 do in parallel
            if(2j module 2^i)=0 then
                A[2j]<——A[2j]+A[2j-2^(i-1)]
            end if
        end forall
    end for
end

 

复杂度分析:for 循环执行了log n 次,

          运行时间T(n)=O(log n),

          处理器数量P(n)=n/2,

          成本C(n)=O(nlog n)

该算法大部分处理器在大部分时间是空闲的

2.2数组求所有部分和

在PRAM模型上数字数组的所有和的算法。加上数组A[1,...n]在全局共享存储器中,在A[1,...,n]中计算A[1],A[1]+A[2],A[1]+

A[2]+A[3],....,A[1]+A[2]+A[3]+...+A[n].

算法:求所有数组和

procedure AllSum(A,n)
begin
    for i=1 to logn do
        forall Pj,where 2^(i-1)+1<=j<=n do in parallel
            A[j]<——A[j]+A[j-2^(i-1)]
        end forall
    end for
end

 

复杂度分析:for 循环执行了log n 次,

          运行时间T(n)=O(log n),

          处理器数量P(n)=n-1,

          成本C(n)=O(nlog n)

该算法几乎所有理器是活跃的。

 

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值