我们在TDA4中开展业务,需要将某些控制算法放在R5F上运行,因此对R5F上的计算性能做了一些测试,其结果让我感到吃惊。
具体这么测试的,我们的测试中仅针对基本的运算进行了benchmark,比如加、乘、除、乘加以及开根号的运算,
同样的运算我们对比了tda4的arm72和r5f
测试分为2组,都是循环1000,不同的是第一组运算的数据长度为1024,第二组的运算长度是2048,
具体benchmark的结果如下,具体数值以微妙为单位,
第一组,数据长度1024:
A72 | R5F | |||||
---|---|---|---|---|---|---|
int | float | double | int | float | double | |
add | 395 | 394 | 918 | 8290 | 9316 | 132996 |
mul | 395 | 421 | 913 | 10428 | 9305 | 133133 |
div | 2529 | 2304 | 8091 | 16259 | 23175 | 211596 |
mac | 522 | 491 | 1340 | 10317 | 13407 | 217621 |
sqrt | 3774 | 14932 | 26693 | 77689 |
第二组,数据长度2048:
A72 | R5F | |||||
---|---|---|---|---|---|---|
int | float | double | int | float | double | |
add | 1085 | 1119 | 2044 | 142343 | 143280 | 308498 |
mul | 1128 | 1123 | 2049 | 147337 | 144264 | 166844 |
div | 5167 | 4615 | 16181 | 166844 | 185564 | 414781 |
mac | 1536 | 1536 | 2914 | 228298 | 220402 | 463613 |
sqrt | 7605 | 30191 | 54626 | 271268 |
第一组测试,可以看出A72的运算性能几乎是R5F的20-30倍,
第二组测试,可以看出A72的运算性能几乎是R5F的100倍,
这个有点意外,通过手册得知,A72的主频2.3G,R5F的主频1G,主频没差到1个量级,运算性能却差了2个量级。
从表2可知,R5F的sqrt的性能比其他的运算性能都强,
我是这么想的,sqrt以外的运算都是双目运算符,基本这样:z = op(x, y)
而sqrt是单目运算,这样:y = op(x)
这样看,sqrt和其它运算的差异就在访存上了,从此也可以看出R5F运算性能出奇低的原因在于访存。
因此,我想请教的是:
1)A72和R5F的性能差异为什么会差20倍到100倍?有什么具体的原因吗?
2)从表1和表2的对比,似乎可以看出R5F的cache很小,至少可以看出,表1的测试,其cache命中率远高于表二,R5F的cache大小可以设定吗?如何设定?
3)是因为访存的问题吗?我现在没有搞清楚如何直接申请R5F的片上内存,我测试了2种内存申请的接口,原生的malloc,以及TI提供的tivxMemAlloc(work_buf_size,TIVX_MEM_EXTERNAL)。测试出来的性能几乎没有区别,因此我猜原生的malloc也是在DDR上申请的。该如何申请片上内存?即便全部在DDR上操作,我猜这段DDR也是non-cache的,该如何设定DDR的cache呢?