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

怎样使用DSP的cache(2)

怎样使用DSP的cache(2)

一个cache系统的性能决定于cache申请命中的次数,也称为命中率。对于一个特定的级别的cache来说,一个高的cache命中率意为着更高的性能。而整个cahce系统的性能决定于各级cache的命中率。比如一个cache系统第一级L1cache命中率为70%,第二级L2cache命中率为20%,第三级L3cache命中率为5%,整个存储器的为5%,因此基于图三这个系统的平均存储器性能为:

  (0.7 * 4) + (0.2 * 5) + (0.05 * 30) + (0.05 * 220) = 16.30ns

  为了阐述这个概念,我们以TI的TMS320C64x DSP存储器结构为例,(表四)包含了一个两级内部cache存储器以及外部存储器。L1cache可以被CPU无延迟的访问。L2存储器可被编程并且可分配为L2SRAM(可设地址的片上存储器)和L2cache。无论何种设置中,L2存储器都只能每两个周期被访问一次。L2的大小决定于芯片的不同,但总是比L1大的多。以TMS320C6454DSP为例,L2的大小为1MByte。而C64x DSP 最多支持2GBytes的外部存储器。存储器的速度决定于存储器采用的技术种类,绝大多数在100MHZ左右。在图三中,所有的cache和数据通道均自动的由cache控制器控制。

  图四:TMS320C64x Cache 存储器结构
  Cache的数据更新

  因为cache也是主存储器中的一部分备份,因此cache是否能实时反映主存储器的数据显得至关重要。当cache里的数据改变,而主存储器内的数据未能改变时,cache里的数据被称为“脏”数据。当数据在主存储中改变,而cache中未能实时改变,cache里的这个数据被称为“延迟”数据。

  cache控制器采用一系列的技术来维持cache的一致性从而保证cache里存储的都是有用的信息而不是延迟数据。“监测”和“写回”操作便是两种保持cache一致性的办法。”监测“指的是用来允许cache在主存储器中是否进行影响cache地址的传输。如果cache探测到有这样的传输发生,它将及时更性自己从而匹配主存储器。这个在主存储器中复制数据的过程称为”写回“操作。

  因为cache比主存储器体积小,因此经常会被填充满。当此种情况发生时,所有搬到cache里面的新数据将会取代已经存在的数据。这里有多种决定数据取代的方法。例如随机取代法、先入先出取代法、最近最少使用取代法。大多数的处理器采用的都是最近最少使用取代法。这样可以是的最新的数据取代最近最少使用的数据。这种方法来源于时间位置法则。
  直接映射cache

  cache存储器可以被设置为“直接映射”或者“联合方式”。为了解释这些术语,我们以图四所示的C64X的L1Pcache为例,这些cache由512列32字节组成。每一排映射到一些固定的具有相识的存储器地址上。比如:
从0000h 到 0019h的地址经常被cache安排在第0列
从0020h 到 0039h的地址经常被cache安排在第1列
从3FE0h 到 3FFFh 的地址经常被cache安排在第511列。

  因此一旦我们需要获得地址4000h,由于cache的容量被用尽了,因此从4000h 到4019h的地址需要从新从第0列开始。


  图五:直接映射caches
  为了保持复制的数据,每一行的L1Pcache包括:

   一位有效信号,用来指示cache的列中 是否包含的是有用的信息

  一个标记符,其值等于地址的高18位,这个是必须的因为一个指定的列可能包含着不同地址的数据,比如,第0列可以包含的是从0000h 到0019h的数据,也可以是从4000h 到 4019h的数据。

   一个可设置的数据,这个数据等同于从第5位到第13位的地址。对于直接映射方式,这个设置的数据同这个列的值是一样的。而对于联合方式时要更加复杂,这种情况我们将在随后讨论。

  现在让我们看看当CPU访问位于0020h的地址时发生了什么。假定cache被完全无效,即意为着所有的列都没有包含有效数据。当CPU发出对地址20h的访问请求时,cache控制器开始首先在部分地址位(比如:从第5位到13位)等同于列地址的位置查询。当这个部分地址值(从第5位到13位)被设置为1时,匹配需查询的地址。控制器将继续检查第一列的标记位是否也和地址0020h到0039h的高18位相符合。当这些都完成时,将检查有效数据位看cache保存的是否为有效数据。如果有效数据位为0时,cache控制器记录一个不命中操作。

  这个不命中操作将使得控制器将从存储器中将此列的数据0020h-0039h读入,并将该有效数据位设置为1。同时将部分地址值保存在标记符RAM中。取得的数据将被传送到CPU中,完成访问操作。

  如果这个0020h的地址被再次访问,cache控制器将再次取得这个地址,检查它的设置符和标记符。当有效数据位为1时,控制器将记录一个命中操作,因此cache列里面的数据也将被送到CPU中,完成整个访问操作。
  联合设置方式

  联合设置方式是直接映射方式的延续。在直接映射方式中,每一个设置只包含一列。而在联合设置方式中,每一个设置包含多个列,被称为多路方式。图五中阐述了这样一个联合设置的cache,以C64xDSP's L1D为例。这是一个两路的包含64个字节总共16KBytes容量的联合设置cache。

  为了保持数据,L1Dcache的每一列包含以下:
  一个最近最少使用位用来指示哪些路最近很少被使用(这个在L1P中未被使用);
  一个脏数据位,用来指示cache列是否匹配主存储器的容量(这个在L1P中未被使用);
  一个有效数据位,用来指示cache列中包含的是否是有效数据;
  一个标记位,等价于地址的高18位;
  一个设置数据,等价于地址的5到13位。
  命中和不命中决定的方式和直接映射cache方式是一样的。不同的是此时需要两个标记位,一个标记位记录是哪一路的请求数据。如果是第0路的数据被命中,则第0路的列中的数据被访问,如果是第1路的数据被命中,则第1路的列中的数据被访问。

  如果两路均不命中的话,数据将从内存中被指派。一个最近最少使用位将决定数据如何分配类似于一个开关[url=][/url]

操作。如果被指派的第0列的最近最少使用位被设置为0,那么将把此数据分配于第一列。无论对这个cache列是读还是写的访问,都将改变这个最近最少使用标记位。例如:如果第0路的列被读取,则最近最少使用位将切换到1。由于最近最少使用位只记录不命中操作,但是它的状态每次都会更新,无论对列访问是命中还是不命中,读或者写。

  对于L1P来说,L1D是一个读分配的cache,不管新数据在内存中申请时读操作是命中或者不命中。在一个写不命中操作时,数据从写存储器传递到内存中,绕过L1Dcacee。在一个写命中操作时,数据写入cache中而不是立即写入内存。当数据被CPU写访问改变时,cache里的内容将提交给一个写回cache,随后数据将被写入内存中。
继承事业,薪火相传
返回列表