我目前正在優化用于并行執行的數據處理邏輯。我注意到,隨著核心數量的增加-數據處理性能并不一定會增加我認為應該的方式。結果如下:從結果集中可以看到,通過使用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 回答

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
無論您有多少個處理器,您的分塊代碼都將運行一次,但是它仍然取決于處理器的數量。
特別是Skip
/Take
部分后跟兩次ToArray()
調用似乎非常需要優化。請參見如何在C#中將數組的一部分復制到另一個數組?有關如何復制數組而不遍歷整個對象的知識。
這應該會使您的性能更接近您的預期。也就是說,分支和組合結果的工作將始終降低并行執行的性能?!白畲蟛⑿卸取辈⒎峭耆档脿帄Z??傆幸粋€最好的地方,那就是并行化要比為它做準備好得多。您需要找到它?;蛘咦?NET通過忽略內核的手動替代來解決這一問題。
- 2 回答
- 0 關注
- 176 瀏覽
添加回答
舉報
0/150
提交
取消