为什么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
配置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
两种配置的注释:
我通过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慢
上一篇: Why Exynos Octa 5420 is unusually slow
下一篇: Why does changing the sum order returns a different result?