并行编程 parallel知识点大全

为什么我们需要并行编程?
比如:RAM处理器一次一个操作,PRAM处理器(PRAM代表P个RAM处理器一起,他们具备私有的memory和共享的memory)一次可以处理P个操作。所以某种程度上会快。

[PRAM种类]

[Work and Size]

[work 和 PRAM p个数的关系]

[optimality优化]

[speedup,加速]

[Amdahl’s Law]

[Gustafson’s Law]

PRAM种类

EREW、CRCW、ERCW、CREW
E = exclusive
C = concurrent
R = read
W = write
意思使同步读写等,这是多个RAM对于共享memory出现的问题。

work and size

定义T(n) 代表在顺序情况下完成n个输入的最好时间。
t(n)代表在并行下使用的并行步骤(可以理解为时间),p(n)代表总共有多少个PRAM
work = t(n) * p(n) 也就是说让所有的PRAM都全部执行的总量(其实很多时候只有部分PRAM在工作,但是work就是计算他们每一个PRAM都是busy的情况)
size = 虽有PRAM所执行的总共的操作,可以看到这里执行的操作就不再考虑每一个PRAM都需要使busy的情况了。

通常 $T(n) \leq $size(n) && $size(n)\leq $work(n) 也就是说对于总的操作来说顺序的时间会少(并行的拉成一条线所以长),但是如果使用并行后,时间可以叠在一起,运行时间就会少了。

work 和 PRAM p个数的关系

work = t(n) * p(n)
假设有work1 = t1(n) * p1(n),如果想用p2(n)个PRAM来代替,则t2(n) = $ \lceil \frac{p1}{p2} \rceil $* t1(n)
所以 work1 = t2(n) = $ \lceil \frac{p1}{p2} \rceil $* t1(n) * p2(n)。这是合理的,不过从多往少转变很容易二从少想多转变就会很困难(并行化很困难)。

optimality优化

考虑一个算法是不是优化算法,n为问题的规模,T(n)为顺序程序的时间,新的PRAM使用p(n)个处理器且并行时间为t(n)。
该算法是优化的需要满足:

  • t(n) = O(logcn) c 为一个常数。
  • work = t(n) * p(n) = O(T(n)).(这和[Work and Size]有区别,所以之前的肯定不是优化的算法。)
  • 一个常见的作法就是使用logcn个processors这是work = t(n)*O(logcn), t(n) = O(logcn)

speedup,加速

S§ = T(n)tp(n)\frac {T(n)}{tp(n)} T(n)指顺序算法时间复杂度,tp(n)指并行下的时间复杂度。
一般来说speedup 和 processor 的个数有关,(一般来说p越多,总的复杂度就会越小,但是可以考虑Amdahl’s Law以及Gustafson’s Law)

Amdahl’s Law

S§ 代表加速比,ts代表sequential时间,f代表可以被加速的部分,p代表有多少个processors
S§ = tsfts+[(1f)ts]/p\frac {ts}{f*ts + [(1-f)*ts]/p} = p1+(p1)f\frac {p}{1+(p-1)*f} = 1/f(当有很大的p时)
举个例子:sort 当中,顺序执行时间为O(nlogn),比如归并,快排等算法。

Gustafson’s Law

gustafson law 和Amdahl类似,只不过gustafson law 给出了并行r和顺序s各占的比例(s + r = 1),一个处理器完成任务则需要总时间s + p r, (p 为处理器数量),而多个处理器完成则需要s + r,所以sp = s+prs+r\frac {s+pr}{s+r} = p + (1-p)s

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章