多核编程中的负载平衡难题_PHP教程
多核CPU中,要很好地发挥出多个CPU的性能的话,必须保证分配到各个CPU上的任务有一个很好的负载平衡。否则一些CPU在运行,另外一些CPU处于空闲,无法发挥出多核CPU的优势来。
要实现一个好的负载平衡通常有两种方案,一种是静态负载平衡,另外一种是动态负载平衡。
1、静态负载平衡
静态负载平衡中,需要人工将程序分割成多个可并行执行的部分,并且要保证分割成的各个部分能够均衡地分布到各个CPU上运行,也就是说工作量要在多个任务间进行均匀的分配,使得达到高的加速系数。
静态负载平衡问题从数学上来说是一个NP完全性问题,Richard M. Karp, Jeffrey D. Ullman, Christos H. Papadimitriou, M. Garey, D. Johnson等人相继在1972年到1983年间证实了静态负载问题在几种不同约束条件下的NP完全性。
虽然NP完全性问题在数学上是难题,但是这并不是标题中所说的难题,因为NP完全性问题一般都可以找到很有效的近似算法来解决。
2、动态负载平衡
动态负载平衡是在程序的运行过程中来进行任务的分配达到负载平衡的目的。实际情况中存在许多不能由静态负载平衡解决的问题,比如一个大的循环中,循环的次数是由外部输入的,事先并不知道循环的次数,此时采用静态负载平衡划分策略就很难实现负载平衡。
动态负载平衡中对任务的调度一般是由系统来实现的,程序员通常只能选择动态平衡的调度策略,不能修改调度策略,由于实际任务中存在很多的不确定因素,调度算法无法做得很优,因此动态负载平衡有时可能达不到既定的负载平衡要求。
3、负载平衡的难题在那里?
负载平衡的难题并不在于负载平衡的程度要达到多少,因为即使在各个CPU上分配的任务执行时间存在一些差距,但是随着CPU核数的增多总能让总的执行时间下降,从而使加速系数随CPU核数的增加而增加。
负载平衡的困难之处在于程序中的可并行执行块很多要靠程序员来划分,当然CPU核数较少时,比如双核或4核,这种划分并不是很困难。但随着核数的增加,划分的粒度将变得越来越细,到了16核以上时,估计程序员要为如何划分任务而抓狂。比如一段顺序执行的代码,放到128核的CPU上运行,要手工划分成128个任务,其划分的难度可想而知。
负载划分的误差会随着CPU核数的增加而放大,比如一个需要16个时间单位的程序分到4个任务上执行,平均每个任务上的负载执行时间为4个时间单位,划分误差为1个时间单位的话,那么加速系数变成 16/(4 1)=3.2,是理想情况下加速系数 4的80%。但是假如放到一个16核CPU上运行的话,假如某个任务的划分误差假如为0.5个时间单位的话,那么加速系数变成16/(1 0.5) = 10.67,只有理想的加速系数16的66.7%,假如核数再增加的话,由于误差的放大,加速系数相比于理想加速系数的比例还会下降。
负载划分的难题还体现在CPU和软件的升级上,比如在4核CPU上的负载划分是均衡的,但到了8核、16核上,负载也许又变得不均衡了。软件升级也一样,当软件增加功能后,负载平衡又会遭到破坏,又需要重新划分负载使其达到平衡,这样一来软件设计的难度和麻烦大大增加了。
假如使用了锁的话,一些看起来是均衡的负载也可能会由于锁竞争变得不平衡起来。
4、负载平衡的应对策略
对于运算量较小的软件,即使放到单核CPU上运行速度也很快,负载平衡做得差一些并没有太大影响,实际中负载平衡要考虑的是大运算量和规模很大的软件,这些软件需要在多核上进行负载平衡才能较好地利用多核来提高性能。
对于大规模的软件,负载平衡方面采取的应对策略是发展划分并行块的宏观划分方法,从整个软件系统层面来进行划分,而不是象传统的针对某些局部的程序和算法来进行并行分解,因为局部的程序通常都很难分解成几十个以上的任务来运行。
另外一个应对策略是在工具层面的,也就是编译工具能够协助人工进行并行块的分解,并找出良好的分解方案来,这方面Intel已经作出了一些努力,但是还需要更多的努力让工具的功能更强大一些才能应对核数较多时的情况。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

本站7月28日消息,根據外媒TechRader報道,富士通詳細介紹了計劃於2027年出貨的FUJITSU-MONAKA(以下簡稱MONAKA)處理器。 MONAKACPU基於「雲端原生3D眾核」架構,採用Arm指令集,面向資料中心、邊緣與電信領域,適用於AI運算,能實現大型主機層級的RAS1。富士通表示,MONAKA將在能源效率和性能方面實現飛躍:得益於超低電壓(ULV)製程等技術,該CPU可實現2027年競品2倍的能效,冷卻無需水冷;此外該處理器的應用性能也可達對手2倍。在指令方面,MONAKA配備的向量

英特爾ArrowLake預計將基於與LunarLake相同的處理器架構,這意味著英特爾全新的LionCove效能核心將與經濟體的Skymont效率核心結合。

如果您最近購買了 MagicX XU Mini M,這個消息可能會讓您感到驚訝。對新發布的手持式遊戲機的硬體和軟體拆解顯示,廣告中的 RK3562 CPU 實際上是規格較低、較舊的 RK3326 處理器。

本站8月22日訊息,X平台用戶포시포시(@harukaze5719)注意到,英特爾在其官網DESIGN-iNTOOLSstore上架了兩款適用於LGA9324-OKS-AP平台供電測試的轉接板。 ▲BLU版本轉接板,此外還有RED版英特爾在這兩款產品的描述中寫到,LGA9324-OKS-APOakStream平台支援DiamondRapids,正面證實了至強6「GraniteRapids」後的下代至強性能核處理器與對應平台的存在。目前有關DiamondRapids處理器和OakStream平台的

本站7月3日訊息,部落客金豬升級包近日在微博動態下方的回應中表示,AMDKrackanPoint處理器隸屬於RyzenAI300產品線,將於明年推出。 AMD在2024台北國際電腦展上發表了RyzenAI300處理器,目前推出的兩款產品均基於StrixPoint系列,核心規格如下:AMDRyzenAI9HX370:12核心(4×Zen5+8×Zen5c)CPU,16CU規模RDNA3.5架構Radeon890M核顯;AMDRyzenAI9365:10核心(4×Zen5+6×Zen5c)CPU,12CU規模

13代14代處理器出現遊戲崩潰、藍屏死機、電腦自動重啟等故障,之前懷疑是nvidia顯示卡導致,後nvidia查詢後是英特爾處理器的鍋,最近英特爾將第13/14代處理器穩定問題歸咎於主機板和BIOS系統製造商。現英特爾也提出了解決方法,以下與小編一起看看吧。 600和700系列主機板BIOS中涉及13代和14代酷睿處理器電壓、頻率、功耗和穩定性方面的設定選項,不正確設定、或設定值超出英特爾官方所允許的範圍之外,均有可能會導致、或增加處理器運作不穩定的風險,英特爾方面的建議設定如下(請參閱下圖):【C

Inteli5-12600以上CPU,i5-13400以上CPU都有P-Core性能核(大核)和E-Core能效核(小核),因「大小核」的調度問題,導致某些遊戲掉幀、卡頓,還不如之前的老CPU,其實是系統覺得應付當前場景,小弟就能搞定,沒必要出動大哥,所以大核一直在休息沒有幹活導致。下面小編教大家如何解決這個問題。在桌面上新建一個文字文檔,複製下面內容,另存為1.reg,然後右鍵合併。 WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SY

AMD 最近推出了 Granite Ridgedesktop 系列處理器,但 Raphael 系列的 X3D CPU 仍然是遊戲和生產力方面的最佳處理器。 Ryzen 7 7800X3D 就是一個很好的例子,但現在詐騙者正在採取完整的廣告
