This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求教大神 6678的存储器问题



问题背景:我用a[10][402][902]表示三维空间的情况,程序需要反复的随机的访问一个点周围6个点的数据,程序执行缓慢 问题1 速度瓶颈是不是在cpu访问ddr3上? 问题2 cpu访问ddr3是否用的预存预取技术? 问题3 cpu访问4M共享sram是否用预存预取技术? 问题4 预存预取技术有办法取消么? 问题5 有什么办法提高程序运行速度?
  • 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 访问。

  • 5-a的解答中片内指的是msmc还是ll2还是l1d 如果是msmc那么我将prefetch关掉是不是就可以了