2014-02-25 27 views
1

我有一個關於SOR(連續放鬆)的問題。我知道SOR可以描述爲N * N網格,並且您可以在網格上執行n次迭代,並且可以報告執行時間。這個基準測試在迭代和兩個內部循環上都有一個外部循環。內部循環用於更新網格的每個值,但網格的值需要計算中的鄰居,因此它是一種串行執行。我的問題是允許並行性,我必須知道是否我將在一個線程()中運行每個迭代,或者我將在線程上運行每一行。任何人都可以指導我哪個循環應該具有並行性?Java Grande SOR多線程基準

+0

內循環需要前一遍的鄰居值,對嗎? – Will

+0

是的,要更簡潔..它需要先前的值和其行中的下一個值 – Yasmin

+0

它需要左側和右側的值是來自上一次迭代的值?這聽起來像一個卷積過濾器。電網有多大?通常,多線程 - 以及重量級鎖定/同步會涉及 - 只會帶來很大的問題。如果你只有幾百萬分,那可能不利於使用線程。 – Will

回答

1

它是一個2D數組,其值僅取決於同一行中的其他值;一行中的值不取決於列中的任何值。

這意味着行可以相互隔離地計算,以傳遞的全部數量。

由於行中間的值取決於前一遍中整行的計算,所以很難共享計算行中的工作。在一個通行證中操作的行內跨度的工作竊取隊列對於這樣一個便宜的實際任務來說會是很大的協調開銷。它似乎太細緻分發。

因此,行是一個自然的工作單位。你可以有一個工作竊取隊列。