为什么Exynos Octa 5420异常缓慢

我的代码:

#include<ctime>
#include<cstdio>

int main(){
    struct timespec t,mt1,mt2;
    unsigned long long int mt;

    clock_gettime(CLOCK_THREAD_CPUTIME_ID,&mt1);

    //Measured block begin
    for(int i=0;i<1000000;i++)
        clock_gettime(CLOCK_THREAD_CPUTIME_ID,&t);
    //Measured block end

    clock_gettime(CLOCK_THREAD_CPUTIME_ID,&mt2);
    mt = (mt2.tv_sec - mt1.tv_sec)*1000000000LL + mt2.tv_nsec - mt1.tv_nsec;

    printf("%lldn",mt);

    return 0;
}

我正在使用独立的arm-v7a工具链,该工具链由位于/opt/android-toolchain下的Android NDK r9d生成。

配置1:

这些是https://github.com/taka-no-me/android-cmake中工具链文件生成的默认标志。

编译器配置:

/opt/android-toolchain/bin/arm-linux-androideabi-g++ 
    -DANDROID -Wno-psabi --sysroot=/opt/android-toolchain/sysroot 
    -fpic -funwind-tables -finline-limit=64 -fsigned-char 
    -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp 
    -mfpu=vfpv3-d16 -fdata-sections -ffunction-sections 
    -Wa,--noexecstack  -mthumb -fomit-frame-pointer 
    -fno-strict-aliasing -O3 -DNDEBUG 
    -isystem /opt/android-toolchain/sysroot/usr/include 
    -isystem /opt/android-toolchain/include/c++/4.8 
    -isystem /opt/android-toolchain/include/c++/4.8/arm-linux-androideabi/armv7-a 
    -o my-object-file.o -c my-source-file.cpp

链接器配置:

/opt/android-toolchain/bin/arm-linux-androideabi-gcc 
    -Wno-psabi --sysroot=/opt/android-toolchain/sysroot 
    -fpic -funwind-tables -finline-limit=64 -fsigned-char 
    -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp 
    -mfpu=vfpv3-d16 -fdata-sections -ffunction-sections 
    -Wa,--noexecstack  -mthumb -fomit-frame-pointer 
    -fno-strict-aliasing -O3 -DNDEBUG -Wl,--fix-cortex-a8 
    -Wl,--no-undefined -Wl,-allow-shlib-undefined -Wl,--gc-sections 
    -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now 
    -Wl,-z,nocopyreloc my-object-file.o -o my-executable 
    -L/libs/armeabi-v7a -rdynamic 
    "/opt/android-toolchain/arm-linux-androideabi/lib/armv7-a/thumb/libstdc++.a" 
    "/opt/android-toolchain/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.a" 
    -lm
  • 三星Galaxy Note 10.1 2014版与Exynos Octa 5420 @ 1.9 Ghz运行三星股票4.4.2 ROM,代码需要2.0秒
  • 三星Galaxy Note II采用基于Android 4.4.4的Exynos 4412 @ 1.6 GHz运行CyanogenMod 11,代码需要0.75秒
  • 三星Galaxy S3与Exynos 4412 @ 1.4 Ghz运行基于Android 4.4.4的CyanogenMod 11,代码需要1.1秒
  • 配置2:

    几乎所有来自之前的标志都被删除。

    编译器配置:

    /opt/android-toolchain/bin/arm-linux-androideabi-g++ 
        -DANDROID --sysroot=/opt/android-toolchain/sysroot 
        -O3 -DNDEBUG 
        -isystem /opt/android-toolchain/sysroot/usr/include 
        -isystem /opt/android-toolchain/include/c++/4.8 
        -isystem /opt/android-toolchain/include/c++/4.8/arm-linux-androideabi/armv7-a 
        -o my-object-file.o -c my-source-file.cpp
    

    链接器配置:

    /opt/android-toolchain/bin/arm-linux-androideabi-gcc 
        --sysroot=/opt/android-toolchain/sysroot -O3 -DNDEBUG 
        -Wl,-z,nocopyreloc my-object-file.o -o my-executable 
        -L/libs/armeabi-v7a -rdynamic 
        "/opt/android-toolchain/arm-linux-androideabi/lib/armv7-a/thumb/libstdc++.a" 
        "/opt/android-toolchain/arm-linux-androideabi/lib/armv7-a/thumb/libsupc++.a" 
        -lm
    
  • 三星Galaxy Note 10.1 2014版与Exynos Octa 5420 @ 1.9 Ghz运行三星股票4.4.2 ROM,代码需要2.2秒
  • 三星Galaxy Note II采用基于Android 4.4.4的Exynos 4412 @ 1.6 GHz运行CyanogenMod 11,代码需要0.94秒
  • 三星Galaxy S3与Exynos 4412 @ 1.4 Ghz运行基于Android 4.4.4的CyanogenMod 11,代码需要1.1秒
  • 两种配置的注释:

  • 我通过CPU调整应用程序将最低CPU时钟频率设置为最高可能值,即1.9 Ghz。

  • 我确定没有后台进程占用CPU。

  • 我也特别试过-mcpu=cortex-a15标志,不会显着改变执行时间。

  • 还试过-mfpu=neon -marm -mtune=cortex-a15 ,不会显着改变执行时间。

  • clock_gettime()不是罪魁祸首,代码明显变慢。

  • 我试过的其他代码包括OpenCV imgproc和STL调用的部分,比如std::map::find()std::sort() ,都是明显的,而clock_gettime() -在Exynos Octa 5420上比较 ,我上面列出的另外两个。

  • 我的假设:

  • 我的线程以某种方式卡在Cortex-A7内核之一上,而不是跳入其中一个Cortex-A15内核。 如果出现这种情况,我可以做些什么来确保是这种情况,或者如何将我的线程强制到Cortex-A15内核上?

  • 我未能设置CPU时钟频率下限,并且CPU正在被限制。 如果情况可能如此,我如何确保这种情况?

  • 与CM相比,三星的内核在某种程度上更糟糕。 这会在执行时间上造成这么大的差别吗?

  • 在这一点上我非常难过。 你有什么建议和见解,以便我可以从这个设备中获得我的钱的价值?

    编辑:我刷新了一个自定义调整的内核(http://forum.xda-developers.com/showthread.php?t=2725193),并设置管理器的performance和执行时间下降到约1.3秒 ,所以我认为我的第三现在假设有点强。 尽管如此,它仍然比较旧的CPU慢

    链接地址: http://www.djcxy.com/p/14991.html

    上一篇: Why Exynos Octa 5420 is unusually slow

    下一篇: Why does changing the sum order returns a different result?