亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

并行回路性能下降

并行回路性能下降

C#
鴻蒙傳說 2021-04-05 17:14:46
我目前正在優化用于并行執行的數據處理邏輯。我注意到,隨著核心數量的增加-數據處理性能并不一定會增加我認為應該的方式。結果如下:從結果集中可以看到,通過使用2個內核而不是1個內核,您可以獲得幾乎理想的性能提升(事實是,其中1個內核在運行4700Mhz,而4600Mhz每個2個內核在運行)。此后,當應該在3個內核上并行處理數據時,我預計與2個內核執行相比,性能將提高33%。實際增長21.62%。接下來,隨著核心數量的增加-“并行”執行性能的下降持續增加。最后,當我們有12個核心結果時-actual與ideal結果之間的差異是原來的兩倍多(96442ms與39610ms)!我當然沒想到差異會如此之大。我有一個Intel 8700k處理器。6個物理核心和6個邏輯核心-共有12個線程。1個內核以Turbo模式,2C 4600、3C 4500、4C 4400、5-6C 4400、6C 4300在Turbo模式下以4700Mhz運行。如果很重要-我在以下地方做了其他觀察Core-temp:當1個核心處理正在運行時-6個核心中有1個繁忙50%當2個核心處理正在運行時-6個核心中有2個繁忙50%當運行3個核心處理時-6個核心中有3個繁忙50%當4個核心處理正在運行時-6個核心中有4個繁忙50%當5個核心處理正在運行時-6個核心中有5個繁忙50%當6個核心處理正在運行時-6個核心中有6個繁忙50%當7個核心處理正在運行時-6個核心中有5個繁忙50%,1個核心100%當8個核心處理正在運行時-6個核心中有4個繁忙50%,2個核心100%當9個核心處理正在運行時-6個核心中有3個繁忙50%,3個核心100%當運行10個核心處理時-6個核心中有2個繁忙50%,4個核心100%當11個核心處理正在運行時-6個核心中有1個繁忙50%,5個核心100%當運行12個核心處理時-所有6個核心的運行率均為100%我當然可以看到最終結果不應該像ideal結果那樣好,因為每個內核的頻率降低了,但是仍然如此。.是否有很好的解釋說明為什么我的代碼在12個內核上的性能如此差?這是每臺計算機上的普遍情況,還是PC的局限性?
查看完整描述

2 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

是的,Ahmdahl定律。性能提升永遠不會與引發問題的內核數量成線性關系。

還互惠...


查看完整回答
反對 回復 2021-04-17
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

無論您有多少個處理器,您的分塊代碼都將運行一次,但是它仍然取決于處理器的數量。

特別是Skip/Take部分后跟兩次ToArray()調用似乎非常需要優化。請參見如何在C#中將數組的一部分復制到另一個數組?有關如何復制數組而不遍歷整個對象的知識。

這應該會使您的性能更接近您的預期。也就是說,分支和組合結果的工作將始終降低并行執行的性能?!白畲蟛⑿卸取辈⒎峭耆档脿帄Z??傆幸粋€最好的地方,那就是并行化要比為它做準備好得多。您需要找到它?;蛘咦?NET通過忽略內核的手動替代來解決這一問題。


查看完整回答
反對 回復 2021-04-17
  • 2 回答
  • 0 關注
  • 176 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號