源码级和算法级的功耗测试与优化
[09-12 18:27:41] 来源:http://www.88dzw.com EDA/PLD 阅读:8416次
文章摘要:2.1源码级的功耗测试本小节对C语言的源码级功耗进行测试,测试过程分为以下几步:①对每种数据类型的不同操作的功耗进行测试。要测试8位整型、16位整型、32位整型以及32位浮点型和64位浮点型的基本操作功耗。基本操作有:加、减、乘、除、取余、赋值、移位、与、或、非。此处测试的结果与处理器的位数有关,StrongARM110为32位精简指令集系统,在此基础上测试的结果如表1所列。从表1可知,对于相同数据类型,加、减、乘、除和取余操作的功耗一样,与、或、非操作的功耗一样,而移位功耗最低。对于不同数据类型来说,32位数比16位数的操作功耗低,16位数比8位数的操作功耗低。32位浮点数与32位整形数的操
源码级和算法级的功耗测试与优化,标签:eda技术,eda技术实用教程,http://www.88dzw.com2.1源码级的功耗测试
本小节对C语言的源码级功耗进行测试,测试过程分为以下几步:
①对每种数据类型的不同操作的功耗进行测试。要测试8位整型、16位整型、32位整型以及32位浮点型和64位浮点型的基本操作功耗。基本操作有:加、减、乘、除、取余、赋值、移位、与、或、非。此处测试的结果与处理器的位数有关,StrongARM110为32位精简指令集系统,在此基础上测试的结果如表1所列。
从表1可知,对于相同数据类型,加、减、乘、除和取余操作的功耗一样,与、或、非操作的功耗一样,而移位功耗最低。对于不同数据类型来说,32位数比16位数的操作功耗低,16位数比8位数的操作功耗低。32位浮点数与32位整形数的操作功耗一样。在所有数据类型中64位浮点数的操作功耗最高。
测试环境的处理器StrongARM110为32位处理器,对8位数和16位数的处理要考虑字节对齐问题,而对32位就不用考虑该问题。
②对函数、内联函数和宏定义的功耗进行测试。如表2所列,内联函数和宏定义的功耗比一般函数的功耗低,CPU周期数及指令数也小。
③对相同功能不同实现语句的功耗进行测试。主要针对循环语句、选择语句(二元和多元)、乘法、移位、除法、移位进行测试,测试结果如表3所列。
从表3可知,同样实现循环功能,for循环的功耗比while、goto的要大,goto语句的功耗明显最低;二元选择运算中三目运算比if语句的功耗低,但是只能在单条赋值语句中使用三目运算,在复杂的多条语句的情况下,两者功耗一样;多元选择运算中,switch语句比if…elseif…语句功耗低;寄存器变量的操作比自动变量的操作功耗低近50%,因为处理器从寄存器里直接读取变量省去了反复从内存读取变量的过程,从而达到降低功耗的目的。
2.2算法级功耗测试
算法级功耗测试是比源码级功耗测试更高一层次的测试,不同的算法针对同一问题的考虑方面不同,如可靠性、易用性、时间复杂度、空间复杂度、功耗等。以往对软件算法的研究着重在性能上面,本文把功耗作为主要考虑对象,研究算法对功耗的影响。为了便于讨论,本文提出一具体问题,针对该问题提出5种不同的算法,然后分析这些算法对软件功耗的影响。
问题描述:对于1字节的变量v,求其二进制表示中1的个数。
算法1:用除法和取余实现。对于二进制操作,除以2,原来的数将会减少1个0,如果在除的过程中有余,就表示当前位置为1。
算法2:使用与&(即移位>>)操作。&操作,把8位数字v与00000001进行与操作,如果结果为1,表示当前8位的最后1位为1,否则为0,然后再将v右移1位,循环进行。
算法3:使用与&操作,仅考虑v中1的个数。
算法4:使用分支操作,直接把0~255的情况都罗列出来,使用switch…case…,即可得到答案。
算法5:使用查表法,将0~255中1的个数直接存储在数组Array中,v作为数组的下标,则Array[v]就是v中1的个数。
测试结果如表4所列。
其中,M是v中1的个数,log2v为v的位数。
- 上一篇:C语言类型转换
《源码级和算法级的功耗测试与优化》相关文章
- › 源码级和算法级的功耗测试与优化
- 在百度中搜索相关文章:源码级和算法级的功耗测试与优化
- 在谷歌中搜索相关文章:源码级和算法级的功耗测试与优化
- 在soso中搜索相关文章:源码级和算法级的功耗测试与优化
- 在搜狗中搜索相关文章:源码级和算法级的功耗测试与优化