我有一個嵌套for循環。 我已經替換了第一個用於Parallel.For()
並且計算速度增加了。嵌套的Parallel.For()循環速度和性能
我的問題是關於用Parallel.For()
替換(在一個裏面)的第二個問題。它會提高速度嗎?還是沒有區別?或者它會變慢?
編輯:
因爲鐵芯不是無限的(通常有2至8個內核),則內循環運行並行。所以,如果我改變了Parallel.For()
的內部,它再次平行運行。但我不確定它是如何改變性能和速度的。
我有一個嵌套for循環。 我已經替換了第一個用於Parallel.For()
並且計算速度增加了。嵌套的Parallel.For()循環速度和性能
我的問題是關於用Parallel.For()
替換(在一個裏面)的第二個問題。它會提高速度嗎?還是沒有區別?或者它會變慢?
編輯:
因爲鐵芯不是無限的(通常有2至8個內核),則內循環運行並行。所以,如果我改變了Parallel.For()
的內部,它再次平行運行。但我不確定它是如何改變性能和速度的。
從「太精細,太粗粒度」款,「反模式」在"Patterns of parallel programming"書.NET parallel computing team部分:
答案是最好的平衡是通過績效 測試中發現。如果與正在進行的工作相比的並行化開銷很小,請儘可能並行化:在這種情況下, 這意味着要並行化兩個循環。如果 並行化內部循環的開銷會降低大多數系統的性能,請在這之前仔細考慮,因爲它可能最好只與 並行化外部循環。
看看這個小節,它是自包含並行光線追蹤應用程序的詳細示例。並且其建議展平環路有更好的並行度也許對你也有幫助。
這很大程度上取決於您在for和機器中使用的數據和功能。最近我一直在使用parallel.for和parallel.foreach,並發現他們讓我的應用程序更慢......(在4核心機器上,可能如果你有24核心服務器是另一回事)
我認爲管理線程意味着太多的開銷......
即使MS在他們的文檔(這裏是一個關於msdn的很長的pdf關於它http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=19222)承認它並沒有使應用程序運行得更快。你必須每次嘗試,如果它有效,那很好,如果運氣不好的話。
你應該嘗試與外部的和內部的,但至少在我嘗試的應用程序,他們都沒有讓應用程序更快。外部或內部並不重要,我只是得到相同的執行時間,甚至更糟。
也許如果你使用Concurrent集合,你會獲得更好的性能。但是,沒有嘗試就沒有辦法說。
編輯:
我剛剛發現在MSDN一個很好的鏈接被證明是非常有用的(在我的情況),以提高性能Parallel.foreach http://msdn.microsoft.com/en-us/library/dd560853.aspx
這又取決於許多情況下,
如果你的CPU是單核處理器,你不會得到任何好處。
如果迭代次數更多,您將得到一些改進。
如果只有一些迭代,它會很慢,因爲它會引起額外的過載。
取決於內核的數量,但我懷疑你不會看到任何改進。儘管如此,請嘗試一下。 – Ryan 2012-01-10 17:07:12
http://guyellisrocks.com/coding/nested-parallel-foreach/ ...我們可以告訴你一個簡單的基準測試不會呢? – 2012-01-10 17:10:13