Java计算密集型任务

时间:2013-04-07 12:16:41

标签: java android performance testing processing

我想比较一个Android设备和一个linux虚拟机的计算性能。 (我的硕士论文的一部分)测试必须使用某种输入(例如图像,或只是数字),并且也必须有一些输出。

例如一个jar文件,用于制作几张图像的全景图。或者也许是密码破解者。

另一个要求是,测试必须以编程方式启动。因此,必须有可能通过java方法调用启动全景制作或密码破解。

是否有开源项目或jar文件来进行此测试?

更新: 链接的答案不是我搜索的内容: @linski有想法,没有实现。如果任务可能是“现实生活”,那就更好了。场景。例如,获取一张大全景图片,或破解密码。

UPDATE2: "测试必须使用某种输入(例如图像,或只是数字),并且必须也有一些输出。" +"如果任务可能是"现实生活"那就更好了。场景"

1 个答案:

答案 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))));
                }
            }
        });
    }        
}

这很可能不足以进行基准测试: enter image description here

但是写了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密集度更低:

enter image description here

可能是因为Fibonnaci有递归调用。

链接的answer是已知为CPU密集型的问题的列表。它甚至提到了RSA challenge

相关问题