Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么Exynos Octa 5420速度异常缓慢_Android_C++_Performance_Android Ndk_Arm - Fatal编程技术网

Android 为什么Exynos Octa 5420速度异常缓慢

Android 为什么Exynos Octa 5420速度异常缓慢,android,c++,performance,android-ndk,arm,Android,C++,Performance,Android Ndk,Arm,我的代码: #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++)

我的代码:

#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("%lld\n",mt);

    return 0;
}
链接器配置:

/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
/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.0秒
  • 三星Galaxy Note II在1.6 GHz下运行基于Android 4.4.4的CyanogenMod 11,代码需要0.75秒
  • 三星Galaxy S3,搭载1.4 Ghz的Exynos 4412,运行基于安卓4.4.4的CyanogenMod 11,代码耗时1.1秒
  • 配置2:

    几乎以前的所有标志都已删除

    编译器配置:

    /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
    
    /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
    
    链接器配置:

    /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
    
    /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在1.6 GHz下运行基于Android 4.4.4的CyanogenMod 11,代码需要0.94秒
  • 三星Galaxy S3,搭载1.4 Ghz的Exynos 4412,运行基于安卓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()
      都是可见的,而且与我上面列出的两个其他调用相比,Exynos Octa 5420上的
      clock_gettime()
      速度要慢得多

    我的假设:

  • 我的线不知怎的卡在了Cortex-A7的一个核心上,而不是跳到Cortex-A15的一个核心上。如果可能是这样的话,我该怎么做才能确保是这样,或者我该如何将线程强制到Cortex-A15内核上

  • 我未能设置CPU时钟频率下限,CPU正在被节流。如果情况可能是这样,我如何确保情况是这样

  • 三星的内核在某种程度上比CM的更差。这会导致执行时间上的差异吗

  • 在这一点上我几乎被难住了。你有什么建议和见解,使我可以得到我的钱的价值从这个设备


    Edit:我闪现了一个自定义调整的内核(),并将调控器设置为
    performance
    ,执行时间下降到大约1.3秒,因此我认为我的第三个假设现在更为有力。它仍然比旧的CPU慢,但是…

    请注意,您实际上只是在测试单个系统调用的延迟,内核版本和配置很可能比那里的硬件更重要。事实上,我有点惊讶于这段代码的编译选项会产生任何明显的差异。至于核心亲和力,.@Notlikethat,如果像
    clock\u gettime()
    这样的系统调用速度较慢,我会更加怀疑,也不会那么担心;但在我运行的每一段代码中,速度都较慢。不过,我并没有完全衡量速度有多慢。这可能是第一位客人。如果您可以将所有8个内核保持在线(可能会导致电源和热量问题),或者使用sysfs->…->cpu->…->online mask仅将大内核保持在线,则可以尝试将关联设置为大内核。啊,这在问题中有点隐藏,抱歉。回想起来,我记得Exynos 5410(Odroid XU)在4xA15上运行hackbench需要相当长的时间,而在2xA15+3xA7上运行时钟较低的多功能Express TC2需要相当长的时间。我没有设法在Odroid上启动主线内核以进行公平的比较,但我确实记得Exynos defconfig中包含了更多的内容。@不一样,谢谢提醒!这确实不是个好消息,你会建议我从哪里开始寻找,以便为Exynos5构建自己合适的内核?