ARMThumb 指令的性能比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.ARM/Thumb 指令的性能比较
在ARM处理器中,内核同时支持32位的ARM指令和16位的Thumb令。
对于ARM指令来说,所有的指令长度都是32位,并且执行周期大多为单周期,指令都是有条件执行的。
而THUMB指令的特点如下:
∙指令执行条件经常不会使用;
∙源寄存器与目标寄存器经常是相同的;
∙使用的寄存器数量比较少;
∙常数的值比较小;
∙内核中的桶式移位器(barrel shifter)经常是不使用的;
也就是说16位的Thumb指令一般可以完成和32位ARM相同的任务。
当用户使用C程序来处理应用时,如果编译为Thumb指令,那么它的目标代码大小只有编译为ARM指令时的65%左右,这样就增加了指令密度。
从另一方面来看,处理器在这两种状态下的性能是依赖于指令执行的存储器的宽度的。
下面的图一具体说明二者的性能比较。
可以看出,在存储器是32位的情况下,ARM性能较好,这时因为同样的代码编译的结果Thumb指令将会比ARM多,Thumb指令仍旧花费指令周期来从32-bit块内存预取。
在16-bit 内存上,即使有比ARM多的代码,这时Thumb性能也较好,因为Thumb每一条指令预取需要一个周期而每条ARM指令需要两个周期。
另外在16-bit内存上,Thumb的性能降低了;这是因为数据去操作和特殊的堆栈操作,即使在Thumb下,堆栈操作仍是32-bit操作,导致低的性能在16-bit内存架构上。
一个改进的方法是提供32-bit的内存来放置堆栈。
在这种情况下的性能提高到了32-bit内存架构的水平。
主要的差别是因为使用的整型的(32-bit)全局数据将仍被存储在16-bit内存上。
另外,与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%。
图一
显然,ARM指令集和Thumb指令集各有其优点,若对系统的执行效率有较高的要求,应使用32位的存储系统和ARM指令集,若对系统的成本及功耗有较高的要求,则应使用16为的存储系统和Thumb指令集。
当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。