我想比较一个Android设备和一个linux虚拟机的计算性能。 (我的硕士论文的一部分)测试必须使用某种输入(例如图像,或只是数字),并且也必须有一些输出。
例如一个jar文件,用于制作几张图像的全景图。或者也许是密码破解者。
另一个要求是,测试必须以编程方式启动。因此,必须有可能通过java方法调用启动全景制作或密码破解。
是否有开源项目或jar文件来进行此测试?
更新: 链接的答案不是我搜索的内容: @linski有想法,没有实现。如果任务可能是“现实生活”,那就更好了。场景。例如,获取一张大全景图片,或破解密码。
UPDATE2: "测试必须使用某种输入(例如图像,或只是数字),并且必须也有一些输出。" +"如果任务可能是"现实生活"那就更好了。场景"
答案 0 :(得分:7)
这个Fibonnaci序列使我的所有4个核心达到接近100%:
public static BigInteger fib(BigInteger n) {
if (n.compareTo(BigInteger.ONE) == -1 || n.compareTo(BigInteger.ONE) == 0 ) return n;
else
return fib(n.subtract(BigInteger.ONE)).add(fib(n.subtract(BigInteger.ONE).subtract(BigInteger.ONE)));
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int j = 0; j < 10; j++) {
final int ID = j;
executorService.submit(new Runnable() {
public void run() {
for (int i=0;i < Integer.MAX_VALUE; i++) {
System.out.println(ID+" worker: "+i + ": " + fib(new BigInteger(String.valueOf(i))));
}
}
});
}
}
这很可能不足以进行基准测试:
但是写了15分钟,而且它是CPU密集型的。关于现实生活中的例子,请阅读HotLicks评论。所以,如果你想要密码破解者,这是查找素数的最有效方法,这是breaking RSA中的基本操作:
public static boolean isPrime(BigInteger n) {
BigInteger counter = BigInteger.ONE.add(BigInteger.ONE);
boolean isPrime = true;
while (counter.compareTo(n) == -1) {
if (n.remainder(counter).compareTo(BigInteger.ZERO) == 0) {
isPrime = false;
break;
}
counter = counter.add(BigInteger.ONE);
}
return isPrime;
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int j = 0; j < 10; j++) {
final int ID = j;
executorService.submit(new Runnable() {
public void run() {
BigInteger number = BigInteger.ONE;
while(true) {
System.out.println(ID+" worker: "+number + ": " + isPrime(number));
number = number.add(BigInteger.ONE);
}
}
});
}
}
它比Fibonnaci的CPU密集度更低:
可能是因为Fibonnaci有递归调用。
链接的answer是已知为CPU密集型的问题的列表。它甚至提到了RSA challenge。