Amdahl's Law 是 1967 年 Amdahl 發表的論文提出的法則。
當時的命題是,在平行運算的研究領域中,一個程式可以分為可被平行運算與不能被平行運算兩個部分,當我們針對平行運算做效能提升的研究時,應該把時間跟經費做最有效率的投資,但究竟平行運算可以帶來多少效益?
T=程式以序列運算的總時間B=程式中,無法被平行化運算的部分的運算時間T−B=可被平行化運算的總時間N=numberofThreads/CPUsT=B+(T−B)(T−B)部分可被平行化,變成耗費時間(T−B)/N
假設 T 為 1
if N=2=>T(N)=B+(T−B)/2if N=3=>T(N)=B+(T−B)/3
可得到程式運算的總時間
T(N)=B+(T−B)/N
假設 T = 1, 只能序列運算的部分 B = 0.5, N = 2
T(2)=0.5+(1−0.5)/2=0.5+0.5/2=0.75
當 Thread/CPU 越多,就代表程式運算的總時間會減少。
另外有一個程式加速的指標參數
Speedup=OriginalExecutionTimeExecutionTimeAfterEnhancement=1B+(1−B)/N
如果程式有一半的部分可被平行化加速
N=2,Speedup=10.5+(1−0.5)/2=1.33N=4,Speedup=1.6N=100,Speedup=1.98N=1000,Speedup=1.998N=10000,Speedup=1.99998N=∞,Speedup=2
意思就是,就算平行化運算可以無限的加強效能,減少運算時間,程式的總運算時間,會被無法平行化運算加速的部分限制住。
如果有兩件事,我們不知道應該去做哪一項時,也可以利用這個法則決定,取效益比較高的那一個。例如:讀書時不知道要先讀數學還是英文,先假設數學是無法提升的部分,算出 Speedup,再用英文為B,算出 Speedup,兩個互相比較,就可以知道哪一個效益較高。
但真實世界也不是那麼簡單的事,因為我們無法預先知道,最佳化後的成果,是不是跟預先假設的成果效益一樣。另外以讀書為例,我們也不知道一直都看不懂的英文,要花多少時間,才能改進並得到效益,反而是比較熟悉的數學還有進步空間,因為看不懂的東西,再怎麼看也不懂,就算看懂以後的效益很高也沒有用。
References
OpenMP: Amdahl's Law - YouTube
Day27:阿姆達爾定律(Amdahl's law)——資源配置的哲學 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
沒有留言:
張貼留言