併發程式設計下的效能定律(翻譯)
理解amdahl定律
如果你想利用多核的優勢在盡可能少的時間執行盡可能多的指令,那麼就需要以並行的序列分離**。然而,大多的演算法需要執行一些序列**來調整並行執行。例如,並行執行很多**塊,最後收集他們執行的結果。那些分解並行執行工作複雜和收集執行結果的**是序列**,它是不能利用並行的優勢的。如果你的演算法中有很多這樣的**片段,那麼序列**所佔的比例就會增加,並且能夠獲取到的效能收益就會減少。
gene amdahl是乙個著名計算機架構師,當乙個系統中僅有少量的計算機改善硬體的時候,那麼能夠獲得最大的效能改善是多少呢?他做了大量與這方面有關的觀察研究。他使用這些觀察結果定義了amdable』s law,它是由乙個**使用多核處理器在理論上可以獲得最大效能改善的公式組成。它也使用於那些執行在多核處理器上的併發演算法。
maximum speedup(in times) = 1/((1-p) + p/n)
在這個公式中
p就是**中可以完全並行執行的部分。
n就是可用的執行單元的數目(處理器或者物理核心)。
圖 1-8
同樣的演算法在八核微處理器上最大速度也不會超過1.77倍。因此,這些物理核心將使執行**的時間不會少於562.5秒。
maximum speedup (in times) = 1 / ((1 - 0.50) + (0.50 / 8)) = 1.77x
圖 1-9 展示了同一演算法在擁有不同數目(1-16)物理核心的微處理器上的最大速度。正如你所看到的,執行的速度並不是一條直線,隨著核心數目的增多會浪費一些處理能力。圖1-10展示了執行乙個有90%**可以並行執行的相同演算法的相同資訊。事實上,90%的並行是乙個大的優勢,但是帶有16個核心的微處理器僅僅提速6.4倍。
圖 1-9
圖 1-10
amdabl定律考慮了物理核心數量的改變,但是並沒有考慮到你可以向現有應用程式新增潛在的新特性來利用額外的併發處理能力。例如,當你在多餘三個核心的處理器上執行其他並不能大大改善效能的演算法,你可以建立新的演算法利用這些額外的核心。你可以建立考慮了不同併發場景的設計來減少amdabl定律的影響。程式也必須考慮進像硬體所提供的的新的能力。
考慮gustafson定律
john gustafson注意到amdahl定律將演算法視為固定不變的,但是考慮了執行他們的硬體。因此,他在2023年對這個定律進行了重新的定義。他認為速度的測量應該以相對處理器的數目的問題的規模計算,而不是任務問題是固定的大小。當硬體提供的併發處理能力增強時,問題的負載就會縮小變化。
gustafson定律提供了一下的公式,它關注問題的大小來測量可以在固定時間內完成的工作單元的數目:
total work (in units) = s + (n × p)
s代表序列順序執行的工作單元。
p代表可以完全並行執行的工作單元的數目。
n代表可用的處理器或者物理核心的數目。
total work (in units) = 50 + (2 × 50) = 150 units of work
圖1-11闡釋了乙個擁有50個序列執行工作單元的演算法和乙個並行執行部分。並行部分的測量是根據物理核心的數目計算的。以這種方式,並行部分能夠處理併發的50個工作單元。並行部分的負載會隨著可用核心的數目增加。如果並行部分能夠提供額外的工作單元,這種演算法就能夠在盡可能少的時間裡產生更多的資料。相同的演算法可以執行在乙個帶有八個物理核心的微處理器上。在這種場景中,那麼使用與前邊例子相同的時間能夠處理450個工作單元。
圖 1-11
圖1-12展示了同乙個演算法的速度隨著物理核心(1-16)的數目的變化。這個速度是在增加核心數目的時候提供了足夠的並行執行的工作單元的。你可以看到,這個速度要不運用amdahl定律的結果要好的多。圖1-13展示了根據可用的物理核心的數目(1-32)需要的工作單元的總數。
圖1-14展示了很多演算法組成了序列執行和併發執行部分的一些工作單元。並行部分已可用核心的增加作為標準計量。當並行部分執行更多工作單元時,此時序列執行部分的影響也會減小。在這種情況下,有必要計算並行和序列執行的總單元數目,然後將他們應用到給定的公式來計算在八核處理器中所有的工作任務。
圖 1-12
圖 1-13
圖 1-14
併發程式設計下的效能定律 翻譯
併發程式設計下的效能定律 翻譯 理解amdahl定律 如果你想利用多核的優勢在盡可能少的時間執行盡可能多的指令,那麼就需要以並行的序列分離 然而,大多的演算法需要執行一些序列 來調整並行執行。例如,並行執行很多 塊,最後收集他們執行的結果。那些分解並行執行工作複雜和收集執行結果的 是序列 它是不能利...
併發程式設計下的blockingqueue
blockingqueue是乙個介面,定義如下 public inte ce blockingqueueextends queue blockingqueue主要用於生產者 消費者模式,讀取元素時,阻塞直到佇列非空 儲存元素時,阻塞直到佇列有可用位置 blockingqueue不支援null值,當a...
併發環境下的快取容器效能優化(下) 效能測試
需要強調一點的是,我們這裡討論的僅僅是符合我提出的特定場景的快取容器,而不是乙個 執行緒安全的字典 或者說,其實我這裡更強調的是 併發環境下 的 讀 效能,而不涉及idictionary的其他操作 如count 更不會關心如copyto remove這類功能的效能。public inte ce ic...