首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >很少有大型矩阵的计算,而大量的小矩阵计算

很少有大型矩阵的计算,而大量的小矩阵计算
EN

Stack Overflow用户
提问于 2014-05-19 09:37:37
回答 2查看 113关注 0票数 1

我正在做一个Java项目,它有数千个矩阵计算。但这些矩阵最多都是10x10矩阵。

我想知道是否最好使用矩阵库或使用编写简单的函数(determinant()dotproduct()等)。因为当使用小矩阵时,建议不要使用库,而是通过自定义函数进行操作。

我知道像JAMA这样的矩阵库在涉及10000x10000矩阵时提供了高性能。

我用10000x10000矩阵进行5-6次计算,用10x10矩阵进行100000次计算.基本操作的数量几乎相同。

这两种情况在性能方面是否相同?我应该把自己当作是在处理大型矩阵并使用库吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-19 10:13:24

我怀疑10x10矩阵,你不会看到太大的差别。

在我为手工编写4x4矩阵所做的测试中,最大的开销是将数据加载到L1缓存中,而如何做到这一点并不重要。对于3x3矩阵和更小的矩阵,它确实产生了显著的差异。

票数 3
EN

Stack Overflow用户

发布于 2014-05-19 10:47:09

获得最大可能的速度(付出很大的努力)

为了达到最大的速度,我建议编写一个C函数,它使用向量数学本质,比如流SIMD扩展(SSE)高级矢量扩展(AVX)操作,以及多线程(例如通过OpenMP)。

您的Java程序将将所有100 k矩阵传递给这个本机函数,然后该函数将处理所有计算。可移植性成为一个问题,例如AVX指令只支持最近的CPU。开发人员的工作,特别是如果您不熟悉SSE/AVX,也会增加很多。

的合理速度不需要太多的努力

您应该通过创建扩展java.lang.Thread或实现java.lang.Runnable的类来使用多个线程。每个线程遍历矩阵的子集,为每个矩阵调用您的数学例程。这部分是在多核CPU上获得良好速度的关键.数学可以是您自己的Java函数来在单个矩阵上进行计算,或者您可以使用库的函数。

我想知道是否最好使用矩阵库或使用编写简单函数(行列式()、dotproduct()等)。因为当使用小矩阵时,建议不要使用库,而是通过自定义函数进行操作。 ..。 这两种情况在性能方面是否相同?我应该把自己当作是在处理大型矩阵并使用库吗?

不,使用库和为数学编写自己的函数是不同的表现。您可能会编写一个专门针对您的应用程序的更快的函数,但请考虑以下几点:

  • 库函数应该比您编写的代码有更少的bug。
  • 一个好的库将使用高效的实现(即最少数量的操作)。你有时间研究和实现最有效的算法吗?

您可能会发现Apache Commons Math库很有用。我鼓励您对和JAMA进行基准测试,选择最快的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23734393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档