问题背景:我用a[10][402][902]表示三维空间的情况,程序需要反复的随机的访问一个点周围6个点的数据,程序执行缓慢
问题1 速度瓶颈是不是在cpu访问ddr3上?
问题2 cpu访问ddr3是否用的预存预取技术?
问题3 cpu访问4M共享sram是否用预存预取技术?
问题4 预存预取技术有办法取消么?
问题5 有什么办法提高程序运行速度?
Zhan Xiang:
1. DDR随机访问会带来额外的开销,所以当你随机访问某个点周围的数据,可能会造成memory bank切换,这种访问比起连续访问开销要大很多
2. 你指cache吗,如果你开了cache,如果访问某个地址的数据,那么cache控制器会把整条cache line的数据搬移到片内的L1D cache中,随后的访问会直接从cache中取数据,而不是从ddr取
3.MSMC支持prefetch功能,这个和cache不太一样,MSMC控制器会假设你在做连续数据访问,会把额外的数据搬移到prefetch buffer中,之后的数据访问如果落到了prefetch 的数据,那么就直接从prefetch buffer中取数,如果不在prefecth bufffer中会导致prefetch miss,带来额外的开销
4. cache 和 prefetch都可以关掉,通常关掉prefetch,保留cache
5. 你的程序看起来是在做图像处理,通常有以下几种方法提高memory 访问效率:
a. 如果片内数据空间足够,那么用edma把数据搬到片内处理,或者把大块数据拆成小块数据搬到片内处理。
b. 打开访问空间的cache
c. 如果数据被反复使用,用instrisic 指令一次性load 多个字节,保证在处理的过程中尽量不需要重新读取新的数据,这样可以减少memory 访问。
ying jiang:
回复 Zhan Xiang:
5-a的解答中片内指的是msmc还是ll2还是l1d 如果是msmc那么我将prefetch关掉是不是就可以了
TI中文支持网


