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



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

但对于第一个矩阵中的少量列(例如,a[2000][20]乘以B[20][20000](,线程和非线程选项的速度大致相等。对于较少的列,线程条件下的执行时间明显优于非线程选项。这个"平等边界"随行数的不同而不同。

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

生成一个新线程总是要花费(大致恒定的(计算时间,在程序从中受益之前,每个线程的工作必须比这一开销花费更长的时间。我不知道你的代码(请在未来发布最少的例子,就像建议的评论一样(,但你可以看看每个线程在相同的计算时间内评估的计算次数(多位置+加法(。基于此,您应该能够近似矩阵的大小(可能与边长=元素数量的乘积成比例(,其中多线程值得麻烦。

最新更新