TI中文支持网
TI专业的中文技术问题搜集分享网站

F28335指令周期问题,如何最高效

int32数组300个求和,如何最快执行?实测执行1次加法运算平均要4个指令周期,是否有问题

int32 a[300],b;

方法1测试:

b=a[0];

b+=a[1];

b+=a[2];

b+=a[299];

不用循环语句,直接加,加载在RAM中测试,运行耗时8us左右;

方法2测试:

i=300;b=0;

while(i–)

    b+=a[i];

加载在RAM中运行测试,耗时为30us左右;

另外使用浮点加法也测试了下,同样的while循环耗时大致为38us左右。

测试的时间是采用在程序前后加GPIO翻转操作,使用示波器看电平时间测试得到。

问题是如何优化类似数组的求和计算,按理说流水线结构第一种方式测试耗时应该是2us左右,为什么感觉慢了4倍!

onebyte:

这个可以看一下汇编代码

int32数组300个求和,如何最快执行?实测执行1次加法运算平均要4个指令周期,是否有问题

int32 a[300],b;

方法1测试:

b=a[0];

b+=a[1];

b+=a[2];

b+=a[299];

不用循环语句,直接加,加载在RAM中测试,运行耗时8us左右;

方法2测试:

i=300;b=0;

while(i–)

    b+=a[i];

加载在RAM中运行测试,耗时为30us左右;

另外使用浮点加法也测试了下,同样的while循环耗时大致为38us左右。

测试的时间是采用在程序前后加GPIO翻转操作,使用示波器看电平时间测试得到。

问题是如何优化类似数组的求和计算,按理说流水线结构第一种方式测试耗时应该是2us左右,为什么感觉慢了4倍!

Martin Yu:

用电平翻转方法测试,会加入IO口的电平改变时间,建议计算操作所需的指令周期数,再根据主频计算时间。

int32数组300个求和,如何最快执行?实测执行1次加法运算平均要4个指令周期,是否有问题

int32 a[300],b;

方法1测试:

b=a[0];

b+=a[1];

b+=a[2];

b+=a[299];

不用循环语句,直接加,加载在RAM中测试,运行耗时8us左右;

方法2测试:

i=300;b=0;

while(i–)

    b+=a[i];

加载在RAM中运行测试,耗时为30us左右;

另外使用浮点加法也测试了下,同样的while循环耗时大致为38us左右。

测试的时间是采用在程序前后加GPIO翻转操作,使用示波器看电平时间测试得到。

问题是如何优化类似数组的求和计算,按理说流水线结构第一种方式测试耗时应该是2us左右,为什么感觉慢了4倍!

jian liu:

回复 Martin Yu:

连续300次加法求和,IO翻转时间基本可以忽略;

按照我的理解,300次加法,连续的没有循环语句的,每一次应该就是只要1个周期,150M下应该只有2us左右,不会是测到的8us

不懂汇编。。。

赞(0)
未经允许不得转载:TI中文支持网 » F28335指令周期问题,如何最高效
分享到: 更多 (0)