為什麼5 的CPU占用會造成這麼大的效能損失?

時間 2021-05-12 01:04:36

1樓:帥理

應該是cpu時間片輪轉的原因吧,每個程序不能保證自己是最優先順序。cpu的執行順序可能是:「python程式-自己寫的程式-python程式-自己寫的程式.....

」,這樣迴圈執行,極端情況也可能是:「python程式-python程式-python程式-...-自己寫的程式-python程式-python程式-python程式-...

-自己寫的程式.....」 ,這樣迴圈執行。如果是這種情況那麼就會很嚴重的影響你所要執行的程式的速度。

而cpu的佔用率只單純計算其裝載率,和那個程序能夠盡量多的快的搶到cpu的時間片無關。

2樓:馮東

MKL 某些版本在某些平台上就是有 over subscription 的 bug。質量很低的乙個庫,雖然確實有優化的獨門。

3樓:HD Lan

我在一台雙路12核的機器上跑了下題主的程式,效能差不多是沒有干擾67s左右,加乙個死迴圈程序干擾是116s左右。

MKL利用OpenMP做並行,只占用物理核心,不會過多地發射執行緒,HT沒影響。

試了下MKL_NUM_THREADS縮掉乙個核心沒用,該慢還是慢,題主用的機器有20個核,負載均衡影響沒那麼大。

死迴圈不訪存,和cache miss應該沒啥太大的關係。

這個問題和執行緒建立、銷毀的時間有關,for迴圈10000次才跑了30s,也就是說每次函式執行大概只有3ms的時間,這樣的話大部分時間都在建立、銷毀程序、分配任務,而不是計算。有相當一部分時間是單執行緒狀態下的,所以按照核心數算5%的效能損失並不合適。另外,在這種工作狀態下,作業系統需要搞定各種各樣的鎖、同步等等,如果有個死迴圈在那不停地oversubscribe/context switch,就很容易被干擾,效能下降。

為了證明這點,我把題主程式的size擴大了10倍,相當於計算規模擴大100倍。然後迴圈砍到5次,結果如下:

情況1 無干擾 12執行緒

real 0m28.861s

user 5m30.907s

sys 0m0.906s

情況2 有干擾 12執行緒

real 0m39.559s

user 6m20.002s

sys 0m1.165s

情況3 有干擾 11執行緒

real 0m31.802s

user 5m34.870s

sys 0m0.896s

差不多這個意思,懶得反覆測試算平均值了。情況2的39秒到情況3的31秒避免了靜態負載分配不均,效能稍微好點,基本符合預期。

另外。。。題主你new個陣列不delete,傳給計算函式還不初始化,雖然應該沒啥問題但是我很難受啊!

#include "mkl.h"

const int size=10240;

int main()

for(int i=0;i<5;i++)

delete A;

delete B;

delete C;

return 0;}

4樓:李亞韜

我不了解mkl,但是有寫計算框架的經驗。有時候我們會為了榨乾效能而把thread繫結在核心上以減少context switch. 假設mkl看到你有20核,決定每個核心跑5%的工作量,那麼必然有乙個核心會和python搶那5%的資源。。。

計算結束時間由最慢的部分完成的時間決定。

software.intel.com/zh-cn/blogs/2012/03/20/intel-mkl/這個文件裡有設定執行緒數量的方法。你調成18或19試試。

PC上的QQ和TIM為什麼占用cpu這麼高?

鶖紅陌夏 不清楚,剛瞄了一眼伺服器,CPU負載居然22 上下,看了下程序,TIM居然佔了15 直接給退了,我這兒不少sql作業,退了TIM後,日常負載10 總結,不用為妙 鹹蛋 這不是偶然現象基本開幾個小時就會出現一次我懷疑是在後台挖礦只是一直沒心思逆向看看是不是哪天有空 TX你可別被我逮住了 ch...

為什麼清華學姐事件會造成這麼大的影響?

折木 這次事件此女子性質惡劣,只是一句抱歉就草草了事,學校方面也沒有任何表態,別說退學了連個表態都沒有,這可是誹謗,這學弟名聲都壞了,這學弟怎麼就不直接把她告上法庭,一告準贏 讓她死無葬身之地 厭女狂歡。跳得最起勁的那些人中有幾個人在之前為任何一名女性受害者說過話?這次這麼積極難道真的是在維護社會正...

為什麼電腦 CPU 這麼貴?

曰天日月 西方文明以及科技革命的結晶,一點都不貴。生產效率越高越普惠大眾,非常符合馬克思理想道路的一類產品。在內卷化的東方幾乎不可能提出類似的概念,自由主義如是,馬克思主義如是,CPU也如是。 我想上大學 首先是CPU的專利成本 研發成本 包括研發工程師人力成本,流片成本,測試成本 生產成本 高階C...