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
/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
- 我通过CPU调优应用程序将最低CPU时钟频率设置为可能的最高频率,即1.9 Ghz
- 我确保没有后台进程占用CPU
- 我还特别尝试了
标志,它不会显著改变执行时间-mcpu=cortex-a15
- 还尝试了
,但没有显著改变执行时间-mfpu=neon-marm-mtune=cortex-a15
不是罪魁祸首,代码明显较慢clock_gettime()
- 我尝试过的其他代码,包括OpenCV
和STL调用的一部分,例如imgproc
和std::map::find()
都是可见的,而且与我上面列出的两个其他调用相比,Exynos Octa 5420上的std::sort()
速度要慢得多clock_gettime()
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构建自己合适的内核?