Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java矩阵乘法:在小列的情况下,线程化比非线程化慢_Java_Multithreading_Matrix_Matrix Multiplication - Fatal编程技术网

Java矩阵乘法:在小列的情况下,线程化比非线程化慢

Java矩阵乘法:在小列的情况下,线程化比非线程化慢,java,multithreading,matrix,matrix-multiplication,Java,Multithreading,Matrix,Matrix Multiplication,我正在用Java测试一个点产品程序,根据系统内核和非线程选项的数量使用线程。这个非常简单的算法将第一个矩阵(比如A矩阵)划分为与核心相同的多个矩阵,并与完整的B矩阵进行点积。完成后,收集“块”,获得结果矩阵。当行和列的数量相对较高时,例如20000行和20000列,则线程选项按预期工作,速度比标准四核系统的非线程选项快3.3-3.5倍 但是对于第一个矩阵中的少数列来说,例如,线程和非线程选项的a[20000][20]乘以B[20][20000]的速度大致相等。对于更少的列,线程条件下的执行时间明

我正在用Java测试一个点产品程序,根据系统内核和非线程选项的数量使用线程。这个非常简单的算法将第一个矩阵(比如A矩阵)划分为与核心相同的多个矩阵,并与完整的B矩阵进行点积。完成后,收集“块”,获得结果矩阵。当行和列的数量相对较高时,例如20000行和20000列,则线程选项按预期工作,速度比标准四核系统的非线程选项快3.3-3.5倍

但是对于第一个矩阵中的少数列来说,例如,线程和非线程选项的a[20000][20]乘以B[20][20000]的速度大致相等。对于更少的列,线程条件下的执行时间明显优于非线程选项下的执行时间。这个“平等边界”根据行数的不同而不同


我理解小矩阵重载线程系统的问题,但我不能完全理解在第一个矩阵因子中只有少量列,第二个矩阵因子中只有行的情况。如果问题的性质与小矩阵相同,行和列之间是否存在允许根据情况选择线程算法或非线程算法的比例?

生成新线程总是需要大约恒定的计算时间,然后程序才能从中受益,每个线程的工作时间必须长于此开销。
我不知道你的代码,请在以后发布最少的示例,就像评论建议的那样,但是你可以查看每个线程在相同的计算时间内计算的计算数multiplacation+加法。基于此,您应该能够近似地计算出矩阵的大小,该大小可能与边长=元素数的乘积成正比,多线程处理值得费心。

当您询问代码的问题时,您应该发表一篇感谢您的评论,Erwin。我记下以后的问题。非常感谢您的评论和您的时间。我的问题更多的是概念性的,而不是实用性的,为此向所有人道歉,但你的回答给了我线索,让我继续调查mult行动的数量。并添加每个线程的。当然,元素的数量和线程的有效性之间有直接的关系,但是当我们在第一个因子中找到少量的列时,我们将处理大量的乘法和少量的加法,更不用说乘积矩阵大小的不同输出结果了。再次感谢。@A.Isasa我建议您重用线程池,例如Stream使用的线程池。parallel@PeterLawrey谢谢你,彼得。我尝试了一个更“经典”的线程解决方案,但随着时间的推移,我会给一个机会将API作为一个更新的Java 8流式处理。。。解决方案非常感谢@我发现IntStream.range0、A.length.parallel等非常有用。