简单循环的执行时间差异巨大:怎么会这样?

VAST difference in execution time for simple loop: How come?

我注意到在两个相似但不同的设备(即三星 Galaxy S4 和 S7)上,即使是一个简单的循环,执行时间也存在巨大差异。在 S7 上,下面的测试需要大约 5 毫秒,而在 S4 上需要大约 250 毫秒,相差 50 倍。我确定 S7 比 S4 快,但是 50X???

我试过 Android Profiler (CPU, MEMORY) 但没有看到任何危险信号。 S7 应用程序的使用率约为 10% CPU,而 S4 应用程序的使用率约为 25%。

下面的代码是大量从我的实际应用中摘录的代码。

    //@ Test Timing
    public static void timingTest()
    {
        int i,count=0;
        long t1,t2;
        String TAG="MYAPP";

        t1 = System.currentTimeMillis();
        for( i=0; i<4000000; i++ ) {        // get start time
            count++;                        // just bump count
        }
        t2 = System.currentTimeMillis();    // get stop time

        String msg=String.format( "ELAPSED = %8.3f sec.", 0.001*(t2-t1) );
        Log.i( TAG, msg );                  // announce elapsed time
    }

我以为可能是优化上的差异,结果没做成相对的 如果我将 real (不可优化的)处理放在循环中,就会有所不同。调试和发布版本之间也没有任何区别。

我已经解决这个问题一个星期了,没有任何额外的见解。
有人对此有任何想法还是我只是运气不好?

实际上,它是 Exynos 5Snapdragon 820Exynos 8 CPU。 API 级别也在那里发挥作用;以及内核的数量以及并行使用的内核数量。就在昨天阅读 Q & A,它比较 CJavaARMx86 S4 上的 OS 可能是用错误的标志编译的;并非完全错误,但未像 S7 OS.

那样进行优化

您还可以使用 AnTuTu 对它们进行基准测试...其中分数约为五分之一。

我猜 S7 可能有一个 Snapdragon 820 ...

好吧,事实证明这只是一个 糟糕的 phone。多么尴尬。我借了一个朋友的 S3,我的基准测试显示性能降低了大约 50%(~10 毫秒),我认为这是对更老 phone 的正常预期。奇怪的是我的 S4 工作 完美 - 就是慢。男孩,那是浪费时间的一周,我再也回不来了。