【问题标题】:VAST difference in execution time for simple loop: How come?简单循环执行时间的巨大差异:怎么会?
【发布时间】:2018-11-17 17:08:10
【问题描述】:

我注意到,即使是在两个相似但不同的设备(即三星 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 (不可优化)处理放入循环中,则会有所不同。 Debug 和 Release 版本之间也没有任何区别。

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

【问题讨论】:

  • 两部手机的操作系统是什么,您能否确认它们是否都在 ART 上运行,或者其中一个在 dalvik 上
  • S4是Android V5.01,S7是V8.0。由于我的基准测试中没有操作系统交互,恕我直言,我看不出这个版本会产生什么影响。
  • 两者都是 Dalvik,ART 不会在 S4 上运行。

标签: android performance cpu-usage


【解决方案1】:

实际上,它是 Exynos 5Snapdragon 820Exynos 8 CPU。 API 级别也在那里发挥作用;内核的数量以及并行使用的内核数量。就在昨天阅读了Q & A,它在ARMx86 上比较CJavaS4 上的操作系统可能使用错误的标志编译;不是完全错误,但没有像S7 操作系统一样优化。

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

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

【讨论】:

  • 感谢您的快速回复。我还没有检查 CPU 型号,但是在谷歌上我看到报告的差异小于 2 倍——而不是我看到的 50 倍。就优化而言,这两款设备都使用具有相同项目设置的新构建应用程序进行了测试,因此除非有一些微妙的问题,否则我认为这不是原因。顺便说一句,S4 的 CPU 为 1.9GHz,而 S7 的 CPU 为 2.3GHz,同样,差别不大。
【解决方案2】:

原来这只是一部坏手机。多么尴尬。我借了一个朋友的 S3,我的基准测试显示性能降低了约 50%(约 10 毫秒),我认为这对于更旧的手机来说是正常的预期。奇怪的是我的 S4 工作完美 - 只是慢。男孩,那是浪费了一周的时间,我再也回不来了。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多