Java矩阵乘法:在小列情况下,线程处理要比非线程处理慢

时间:2018-07-22 11:25:38

标签: java multithreading matrix matrix-multiplication

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

但是对于第一个矩阵中的少量列(例如,A [20000] [20]乘以B [20] [20000]),线程和非线程选项的速度大致相等。对于较少的列,线程条件下的执行时间明显优于非线程选项下的执行时间。该“平等边界”根据行数而变化。

我了解很少矩阵使用重载线程系统的问题,但是我仅在少数列(第一个矩阵因数的列,第二个矩阵因数的行)下无法完全理解这种情况。如果问题的性质与小矩阵的性质相同,那么在行和列之间是否存在一定比例,可以根据情况选择线程算法还是非线程算法?

1 个答案:

答案 0 :(得分:0)

生成新线程总是要花费(大约恒定)的计算时间,并且在程序可以从中受益之前,每个线程的工作所花的时间必须大于此开销。 我不知道您要编写代码(请在将来发布最少的示例,如建议的注释所示),但是您可以查看每个线程在相同的计算时间进行评估的计算数量(乘法+加法)。基于此,您应该能够估算出多线程值得解决的矩阵大小(可能与边长的乘积=元素数成正比)。