2015-12-30 71 views
1

我正在嘗試Java ForkJoin框架並編寫了一個處理大型數據列表的程序。Java7中哪個閾值會更好ForkJoinTask

衆所周知,字段閾值總是在ForkJoinTask中設置,以指出數據列表分區的最小數量。

問題是,閾值有多大或多少會使性能更好,或者是靈活的,只與CPU或線程支持的核心數量相關聯?

在並行計算框架(如Forkjointask)中是否有閾值的最佳實踐?

回答

1

沒有設定閾值的規則。一個好的數字取決於數組中元素的數量(N),每個元素(Q)的處理類型(對兩個數字進行簡單比較是一個低Q,做一個複雜的計算是一個高Q.)

我使用的通用公式在大多數情況下都能很好地工作,但我並不總是知道問:我想要生成的任務多於線程的8倍,或者32k的最小閾值(當然取決於N)。 )

int temp = count/(threads << 3); 
threshold = (temp < 32768) ? 32768 : temp; 

其中count爲N,threads爲線程數。

+0

嗨,謝謝你的回答。 32768應該是2的15次方?爲什麼這個數字可以是閾值的上限? – Vincent

+0

選擇你自己的號碼。 32k是用於特定的操作。正如我首先說的那樣:沒有設定閾值的規則。 – edharned