我正在尝试Java ForkJoin框架并编写了一个程序来处理大型数据列表。
众所周知,字段阈值始终在ForkJoinTask中设置,以指出数据列表分区的最小数量。
问题是,阈值的大小会产生更好的性能,还是灵活的,只与核心数量的CPU或线程支持相关联?
并行计算框架中的阈值是否有最佳实践,例如Forkjointask?
答案 0 :(得分:1)
阈值没有设定规则。一个好的数字取决于数组中元素的数量(N),每个元素的处理类型(Q)(做两个数字的简单比较是一个低Q,做一个复杂的计算是一个高Q.)< / p>
我使用的通用公式在大多数情况下都运行得相当好,我不总是知道Q:我想生成大约8倍于线程的任务或最小阈值32k(当然取决于N. )
int temp = count / (threads << 3);
threshold = (temp < 32768) ? 32768 : temp;
其中count是N,thread是线程数。