首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找最快的方法来计算大型矩阵并输出它们?

寻找最快的方法来计算大型矩阵并输出它们?
EN

Stack Overflow用户
提问于 2014-04-10 21:24:26
回答 2查看 185关注 0票数 0

我正在尝试编写关于传感器计算器的程序,我想听听你们的意见,我怎样才能改进我的程序的执行时间?

简而言之,传感器计算器是执行矩阵乘法的程序。它可以每秒接收50,000块矩阵。传感器计算器的主要工作是接收矩阵,并使用程序中已经存储的5个矩阵之一计算它们。

传感器计算器有5种方法,每种方法都有自己的矩阵,它们与接收的(参数)矩阵(矩阵乘法)相乘。当然,它们还会返回产生的矩阵。

  1. 我在各种电脑上总共有5万个虚拟审查器。
  2. 每个传感器每秒钟用UDP将一个矩阵发送到计算器(服务器)。
  3. 服务器,托管传感器计算器,接收矩阵并进行计算。
  4. 服务器将用UDP将结果发送回传感器(客户端)。

所有矩阵都是10x10大小的。

例如,第一种方法是:

代码语言:javascript
复制
public int[10][10] calculateWind(int[10][10] A){

 int[10][10] C = new int[10][10]; //

    for (int i = 0; i < 10; i++) { // Row
        for (int j = 0; j < 10; j++) { // Column
            for (int k = 0; k < 10; k++) { // Column
                C[i][j] += A[i][k] * B[k][j];//B is constant matrix(private attribute)
            }
        }
    }

    return C;}

我正在使用Java,但是有人告诉我,我可以在java中使用FORTRAN &C,这会有帮助吗?

我正试图找到最快的方法。告诉我所有你认为能帮助我的程序提高性能的东西。改变编程语言?使用唯一的算法?

除使用汇编外,欢迎所有建议,谢谢您的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-10 21:43:17

您应该在分析器中运行该程序,以查找热点,并测量您的更改所产生的影响。

一个可能的改进是重新排序您的循环,以尽量减少缓存丢失:

代码语言:javascript
复制
for (int i = 0; i < 10; i++) {
    for (int k = 0; k < 10; k++) {
        for (int j = 0; j < 10; j++) {
            C[i][j] += A[i][k] * B[k][j];
        }
    }
}

对于像您这样小的矩阵,不太可能有显著的改进,因为您的整个数据适合CPU缓存。

使用C不太可能提高性能。经过几次迭代之后,JIT将代码编译为本机,CPU运行的代码与C编译器产生的代码基本相同。由于自动矢量化,Fortran可能会更好,但对于如此小的矩阵,两者的差别可能并不大。

票数 0
EN

Stack Overflow用户

发布于 2014-04-10 21:42:15

有些库用比简单的三个嵌套循环更快的算法实现矩阵乘法。

考虑一下这个答案:Performance of Java matrix math libraries?

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

https://stackoverflow.com/questions/22999298

复制
相关文章

相似问题

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