有两组矩阵,即A(1 500个矩阵)和B(150 000个矩阵)。
对于来自集合A的每个矩阵a,我遍历a和b上的B检查标准中的所有元素b(如果对于某些矩阵b是真的,我停止迭代并返回true。但是如果在迭代之后没有找到匹配,则整个Set B,然后返回false)。
我的问题是如何使用Java使这个程序并行?
据我所知,矩阵集很大(我上面发布的元素数量只是例如,在现实生活中它们会更大)。如何正确地完成所有计算?创建1 5000个线程并完成所有计算实际上不是一个好主意。什么是最佳线程数量,这需要进行所有计算工作?
答案 0 :(得分:1)
正如你所说,你可能需要检查所有对,并且没有启发式来帮助我们检查顺序,所以如果检查不需要任何导致CPU浪费的I / O或某事,如果你有4个例子{ {1}}核心,创建4
线程(0-3),线程i负责检查4
和每个a(4k+i)
。在每次检查每个线程之前,你必须检查是否找到了真正的对,这可以通过扩展b
的类中的静态变量来实现
Thread
你需要等到所有线程都停止工作。
答案 1 :(得分:1)
我认为您可能正在寻找ForkJoinPool。
我会尝试将适合您情况的示例放在一起。从本质上讲,您应该将流程拆分为多个部分,也许在您的情况下,为每个a
使用一个fork,并遍历该fork中的所有b
。该池自动充分利用您的处理器。
有一个非常简单的例子here。