问题是这样的,有时候我们需要用到查表法,而且大部分情况下是对数组的访问是非线性的,通常的做法是将这个表存放在L2SRAM里,以提高对数组的访问速
度。但问题有时候是这个表无论是放在片外还是放在片内对效率的影响不大,放在片内的效率几乎得不到提升,这样的问题遇到好些次了,有时候是通过合理的
搭配片内与片外的存储比例得到解决,很多情况下又得不到解决。找不到一个比较行之有效的方法。比如,
这样定义这样一个数组:
#pragma DATA_SECTION(ALGCC_gammaR, ".internalHeap")
#pragma DATA_ALIGN( ALGCC_gammaR, 128);
short ALGCC_gammaR[] = {......}
与直接定义
short ALGCC_gammaR[] = {......}
算法是采用了EDMA的pingpong结构处理了的,除数组外其他的数据都已搬运到片内。
经过测试算法对查表还是比较耗时的,所耗的cycles比重还比较大,但放在片内所耗cycles机会降不下来。按理说如果是非线性的查表,不管是存放在
片外和片内,cache的命中率都会很低,但是片外的cache未命中率的访问成本远高于片内cache成本,即使是每次访问都照成cache缺失,那也必然好于
片外的效果。
可为什么这样的将数组存放在片内反而没有提升的余地,不知道大家有遇到过类似的问题没有?TI的专家能不能帮我分析下。