arm内核具有什么特点_arm架构和x86架构

arm内核具有什么特点_arm架构和x86架构ARM平台NEON指令的编译和优化本文介绍了ARM平台基于ARM v7-A架构的ARM Cortex-A系列处理器(Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15)上的NEON多媒体处理硬件加速器针对C/C++语言、汇编

ARM平台NEON指令的编译和优化   本文介绍了ARM平台基于ARM v7-A架构的ARM Cortex-A系列处理器(Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15)上的NEON多媒体处理硬件加速器针对C/C++语言、汇编语言和NEON intrinsics如何编译和优化,包含如何向量化、向量化的ARMCC和GCC编译器选项、NEON的汇编和EABI程序调用规范、如何在bare-metal和Linux操作系统上检测NEON硬件、如何指导编译器进行向量化NEON指令的优化等内容。   NEON向量化   基于ARM v7-A架构的ARM Cortex-A系列处理器(Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15)都可以选用NEON多媒体处理器加速程序运行,NEON是一种SIMD(Single Instruction Multiple Data)架构的协处理器,ARM的NEON处理器还可选配置成向量浮点VFPv3(Vector Floating-Point)指令集处理器。本文引用地址:http://www.eepw.com.cn/article/201611/317417.htm   常用的编译器选项配置   自动向量化选项   armcc编译器使用–vectorize选项来使能向量化编译,一般选择更高的优化等级如-O2或者-O3就能使能–vectorize选项。   gcc编译器的向量化选项-ftree-vectorize来使能向量化选项,使用-O3会自动使能-ftree-vectorize选项。   选择处理器类型   armcc编译器使–cpu 7-A或者–cpu Cortex-A8来指定指令集架构和CPU类型。   gcc编译器的处理器选项-mfpu=neon和-mcpu来指定cpu类型。如-mcpu=cortex-a5   选择NEON和VFP类型   gcc选择用-mfpu=vfpv3-fp16来指定为vfp协处理,而-mfpu=neon-vfpv4等就能指定为NEON+VFP结构。   选择浮点处理器和ABI接口类型   -mfloat-abi=soft使用软件浮点库,不是用VFP或者NEON指令;-mfloat-abi=softfp使用软件浮点的调用规则,而可以使用VFP和NEON指令,编译的目标代码和软件浮点库链接使用;   -mfloat-abi=hard使用VFP和NEON指令,并且改变ABI调用规则来产生更有效率的代码,如用vfp寄存器来进行浮点数据的参数传递,从而减少NEON寄存器和ARM寄存器的拷贝。   常用的CPU类型编译器选项   CPU类型   CPU类型选项   FP选项   FP + SIMD选项   备注   Cortex-A5   -mcpu=cortex-a5   -mfpu=vfpv3-fp16   -mfpu=vfpv3-d16-fp16   -mfpu=neon-fp16   -d16表明只有前16个浮点寄存器可用   Cortex-A7   -mcpu=cortex-a7   -mfpu=vfpv4   -mfpu=vfpv4-d16   -mfpu=neon-vfpv4   -fp16表明支持16bit半精度浮点操作   Cortex-A8   -mcpu=cortex-a8   -mfpu=vfpv3   -mfpu=neon   Cortex-A9   -mcpu=cortex-a9   -mfpu=vfpv3-fp16   -mfpu=vfpv3-d16-fp16   -mfpu=neon-fp16   Cortex-A15   -mcpu=cortex-a15   -mfpu=vfpv4   -mfpu=neon-vfpv4   常用的gcc组合编译器选项   Cortex-A15 with a NEON unit   arm-gcc -O3 -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mfloat-abi=hard -ffast-math -omyprog.exe myprog.c   Cortex-A9 with a NEON unit   arm-gcc -O3 -mcpu=cortex-a9 -mfpu=neon-vfpv3-fp16 -mfloat-abi=hard -ffast-math -omyprog.exe myprog.c   Cortex-A7 without a NEON unit   arm-gcc -O3 -mcpu=cortex-a7 -mfpu=vfpv4-d16 -mfloat-abi=softfp -ffast-math -omyprog2.exe myprog2.c   Cortex-A8 without a NEON unit   arm-gcc -O3 -mcpu=cortex-a8 -mfloat-abi=soft -c -o myfile.o myfile.c   NEON汇编和EABI程序调用规范   GNU assembler (gas) and ARM Compiler toolchain assembler (armasm)都支持NEON指令的汇编。但必须遵循ARM Embedded Application Binary Interface (EABI)EABI的规范,即NEON寄存器的S0-S15 (D0-D7, Q0-Q3)用于传递参数和返回值,被调用函数内可以直接使用,不用保存;D16-D31 (Q8-Q15)则有调用函数来保存,被调用函数内可以不保存的随意使用;而S16-S31 (D8-D15, Q4-Q7)则必须由被调用函数内部保存。对于调用传参规范则有,对于软件浮点,参数有R0~R3和堆栈stack传递,而硬件浮点,可以通过NEON寄存器来传递参数。   NEON硬件检测和使能   编译时指定NEON单是否存在   ARM编译器(armcc)从4.0之后就支持在某些处理器和FPU的选项中预定义宏__ARM_NEON__, armasm的宏TARGET_FEATURE_NEON.   运行时指定检测NEON单   OS内可以检测NEON单是否存在,如Linux下cat /proc/cpuinfo看是否包含NEON或者VFP,如Tegra2 (双核 Cortex-A9 带 FPU), cat /proc/cpuinfo:   …   Features : swp half thumb fastmult vfp edsp thumbee vfpv3 vfpv3d16   …   四核 Cortex-A9 带NEON单   Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3   …   另外可以查看/proc/self/auxv,这里会包含二进制格式的hwcap,可以通过AT_HWCAP来搜索到。HWCAP_NEON bit (4096).另外如Ubuntu的发布在路径/lib/neon/vfp下包含lib的NEON优化版本。   Bare-metal模式下使能NEON   #include   // Bare-minimum start-up code to run NEON code   __asm void EnableNEON(void)   {   MRC p15,0,r0,c1,c0,2 // Read CP Access register   ORR r0,r0,#0x00f00000 // Enable full access to NEON/VFP by enabling access to   // Coprocessors 10 and 11   MCR p15,0,r0,c1,c0,2 // Write CP Access register   ISB   MOV r0,#0x40000000 // Switch on the VFP and NEON hardware   MSR FPEXC,r0 // Set EN bit in FPEXC   }   下面的EnableNEON函数使能NEON协处理器;使用下面的编译选择就能在bare-metal下使能NEON   armcc -c –cpu=Cortex-A8 –debug hello.c -o hello.o   armlink –entry=EnableNEON hello.o -o hello.axf   系统运行时使能NEON   内核在遇到第一个NEON指令时会产生一个Undefined Instruction的异常,这会让内核自动重启NEON协处理器,内核还可以在上下文切换时关闭NEON来省电。   Linux内核的NEON配置   

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/79289.html

(0)
上一篇 2024年 8月 2日
下一篇 2024年 8月 2日

相关推荐

关注微信