並行編程 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

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