有没有人比较移动设备与PC的处理能力?我有一个非常简单的矩阵工作。用Java编码,我的旧电脑需要115ms才能完成工作。非常非常相同的功能需要17000毫秒。我非常震惊。我没有想到这款平板电脑会接近PC - 但我没有想到它的速度会降低150倍!处理能力 - 移动设备与桌面 - 100倍的差异?
有没有人有类似的经历?任何建议?如果我用C编写代码并使用Android NDK,它有帮助吗?
基准代码Java中:
package mainpackage;
import java.util.Date;
public class mainclass {
public static void main(String[] args){
Date startD = new Date();
double[][] testOut;
double[] v = {1,0,0};
double t;
for (int i = 0; i < 100000; i++) {
t=Math.random();
testOut=rot_mat(v, t);
}
Date endD = new Date();
System.out.println("Time Taken ms: "+(-startD.getTime()+endD.getTime()));
}
public static double[][] rot_mat(double v[], double t)
{
double absolute;
double x[] = new double[3];
double temp[][] = new double[3][3];
double temp_2[][] = new double[3][3];
double sum;
int i;
int k;
int j;
// Normalize the v matrix into k
absolute = abs_val_vec(v);
for (i = 0; i < 3; i++)
{
x[i] = v[i]/absolute;
}
// Create 3x3 matrix kx
double kx[][] = {{0, -x[2], x[1]},
{x[2], 0, -x[0]},
{-x[1], x[0], 0}};
// Calculate output
// Calculate third term in output
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
sum = 0;
for (k = 0; k < 3; k++)
{
sum = sum + kx[i][k] * kx[k][j];
}
temp[i][j] = (1-Math.cos(t))*sum;
}
}
// Calculate second term in output
for (i = 0; i < 3; i++)
{
for (k = 0; k < 3; k++)
{
temp_2[i][k] = Math.sin(t)*kx[i][k];
}
}
// Calculate output
double[][] resOut = new double[3][3];
for (i = 0; i < 3; i++)
{
for (k = 0; k < 3; k++)
{
resOut[i][k] = temp_2[i][k] + temp[i][k] + ((i==k)?1:0);
}
}
return resOut;
}
private static double abs_val_vec (double v[])
{
double output;
output = Math.sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
return output;
}
}
首先,我不会用'Date'做任何一种标杆... –
因子库中调出。你不想基准'随机'或触发函数。 –
@泰勒和迈克尔,我删除了trig函数和随机,我也将Date更改为System.currentTimeMillis()。但它仍然慢了45倍。话虽如此,我不知道我是否明白为什么你说我不能使用trig函数?不要Android和Java对Math.sin使用相同的算法? – Kasra