我正在尝试编写关于传感器计算器的程序,我想听听你们的意见,我怎样才能改进我的程序的执行时间?
简而言之,传感器计算器是执行矩阵乘法的程序。它可以每秒接收50,000块矩阵。传感器计算器的主要工作是接收矩阵,并使用程序中已经存储的5个矩阵之一计算它们。
传感器计算器有5种方法,每种方法都有自己的矩阵,它们与接收的(参数)矩阵(矩阵乘法)相乘。当然,它们还会返回产生的矩阵。
所有矩阵都是10x10大小的。
例如,第一种方法是:
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,这会有帮助吗?
我正试图找到最快的方法。告诉我所有你认为能帮助我的程序提高性能的东西。改变编程语言?使用唯一的算法?
除使用汇编外,欢迎所有建议,谢谢您的建议。
发布于 2014-04-10 21:43:17
您应该在分析器中运行该程序,以查找热点,并测量您的更改所产生的影响。
一个可能的改进是重新排序您的循环,以尽量减少缓存丢失:
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可能会更好,但对于如此小的矩阵,两者的差别可能并不大。
发布于 2014-04-10 21:42:15
有些库用比简单的三个嵌套循环更快的算法实现矩阵乘法。
https://stackoverflow.com/questions/22999298
复制相似问题