Кто-нибудь сравнивал вычислительную мощность мобильных устройств с ПК? У меня очень простая матричная работа. Кодированный на Java, для моего старого ПК требуется ~ 115 мс, чтобы завершить работу. ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ФУНКЦИЯ занимает 17000 мс. Я был очень потрясен. Я не ожидал, что планшет будет близок к ПК - но я не ожидал, что он будет на 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' сделать любой вид бенчмаркинга ... –
фактор библиотека взывает. Вы не хотите сравнивать «случайные» или триггерные функции. –
@ Тайлер и Майкл, я удалил функцию триггера и случайный, я также изменил дату на System.currentTimeMillis(). Но он по-прежнему в 45 раз медленнее. Сказав это, я не уверен, понимаю ли я, почему вы сказали, что я не могу использовать триггерные функции? Разве Android и Java не используют тот же алгоритм для Math.sin? – Kasra