首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

怎样使用DSP的cache(3)

怎样使用DSP的cache(3)

脏数据位指示当cache里面的数据被写操作修改时,而修改后的新数据还未被写入到主存储器中。最初脏数据位将被赋值为0。一旦当CPU对某列进行写操作时,脏数据位将变为1。当此列被逐出cache时,这个数据将被写回主存储器中。当发生读不命中操作时新数据将从脏数据列中申请,这种情况才会发生。一个写回命令将传递给cache控制器从而产生一个写回操作,只是这种情况并不经常发生。  优化cache性能

  这里有三种不命中的情况:

  必然不命中(也叫首次不命中):这种不命中发生在当数据第一次放入cache中,为了和下面两种不命中方式区分开来,它们可以被避免。

  冲突不命中:不命中发生在在该列在被重复使用之前被取代。

  容量不命中:这种方式发生在当cache容量被耗尽时,容量不命中是冲突命中的一种方式。

  对于每一种不命中方式,控制器在将数据从存储器放入cache中时都会产生延迟。为了得到更高的性能,每一列中的内容在被取代之前应该尽可能的被重复利用。重复使用某列以此来获得不同的位置能够改善空间位置的访问,而重复使用某列可以改善时间位置的访问。这就是优化cache存储
  性能的一个最基本的准则。
  例如,当cache存储器经常被访问时,cache的性能是比较高的。这种访问模式在对下一列访问之前将重复对上一列的访问。例如,下面的代码就

  有一个很高的命中率:
   而下面的代码的性能就如上一个,因为他的内存的访问有一个很大幅度的跨越,这就意味着在对下一列访问之前对上一列的访问率就降低了。

  如果某一列被从cache里驱除而又需要重新访问,这一列必须重新写入cache。因此,如何避免这种驱除就变得非常重要,确定这种不命中的原因可以帮助我们避免下一次的不命中。
  正如上面所说,容量不命中产生的原因是因为cache的容量小于主存储器。如果发生容量不命中,最简单的办法就是加大cache的容量。例如,
  C64xDSP上的L2cache可以被配置为cache和SRAM的混合体。如果有很多的容量不命中的情况,编程者可以将L2存储器更多的申请为cache。另一种
  解决办法就是减少所需要的数据量。

  如果产生冲突不命中,关键在于重新编排数据的排列方式,从而使得最近时间数据能够映射到其他路中。(对于直接映射方式,这个类似于将数据映射对应于不同的行中)改变存储器的排列方式,可以使得数据位于存储器中的不同位置,从而不会产生冲突。作为可选择的,从一个硬件设计的角度,多设置方式可以产生多列的方式。因此,存储器中映射于相同设置的两列都可以在cache中被申请,而不会发生冲突。
继承事业,薪火相传
返回列表