PowerPC cache相关常用指令总结

来源:互联网 发布:动态ppt软件 编辑:程序博客网 时间:2024/06/06 20:58

总结自:powerpc programming environment manual

PowerPC的Cache相关指令


PowerPC 750 实现了分开的指令Cache和数据Cache。每个Cache打开是32KB,8路组相连。根据PowerPC的体系结构定义,他们是被物理索引的。每个Cache块包含了8字对齐的内存内容。因此,一个Cache块永远也不会跨越一个页面边界。对于一个非对齐的访问(也就是跨越了页边界)可能会导致性能下降。Cache是非阻塞的回写cache,在cache产生miss的时候由硬件支持进行重载。

The critical double word is transferred on the first beat and is simultaneously written to the
cache and forwarded to the requesting unit, minimizing stalls due to load delays. The cache being loaded is not blocked to internal accesses while the load completes.

临界双字在第一拍被传输和同时写入到缓存,并转发给请求单元,使load delays带来的延迟最小化。加载缓存对于内部存取来说是非阻塞的(这句话没看懂)。


在一个CPU工作周期内,数据缓存可以给LSU提供2字的存取。和指令Cache(I-Cache)一样,数据Cache(D-Cache)可以做全局无效化或者以cache块为单位进行无效化操作。D-Cache可以通过清零HID0[DCE]位被禁能,同时通过设置HID0[DCFI]位进行无效化。D-Cache可以通过设置HID0[DLOCK]位来进行锁定。为了保证Cache一致性,D-Cache遵循三状态MEI协议。D-Cache的tags是单端口的,所以同时进行load和store操作和一个探测存取(snoop access)资源会发生冲突。

If a snoop hit occurs, the LSU is blocked internally for one cycle to allow theeight-word block of data to be copied to the write-back buffer

如果一个snoop hit发生了,LSU会阻塞一个周期来让8字的块的数据被复制到回写缓冲里。

在每一个CPU周期内,I-cache可以提供多达4条指令到指令队列内。I-Cache可以被一次性全局无效化或者以cache块为单位进行无效化。I-Cache可以通过清零HID0[ICE]位被禁能,同时通过设置HID0[ICFI]位进行无效化。I-Cache可以通过设置HID0[ILOCK]位来进行锁定。指令Cache只支持valid和invalid状态,也即他没有D-cache的modified以及exclusive状态。







因为Cache的指令不是经常用到,所以之前一直没有记过,这里把Cache相关的指令都记录一下,作为一个备忘。

dcba

Data Cache Block Allocate

dcba根据EA分配数据cache块,方式是把该块标记为有效,并且不会从内存中读取该块的数据。当dcba完成的时候,分配的cache块中的数据被当做是未定义的。Dcba预示着这个程序也许马上就会存储进块中,但是块剩下部分的内容对于程序是没有意义的(忽略从主存中读取整个块的必要性),并且可以用来给相关代码序列以优化性能。Dcba通过下面的方式执行。

• 如果数据cache中一个cache块包含了EA所在的字节,那么块中所有字节都被认为是未定义,但是这个cache块仍然被视作有效。注意,如果这个cache块中的数据被马上读取或者被错误的使用了的话,程序仍然可能会出错。

•如果EA所在的字节的cache块不在数据cache中,并且相关的区域是cache-allowed,这个cache块就被分配并且不需要从主存中读取相关的数据。所有的字节值都是做未定义。

•如果相关的字节是caching-inhibited的页或块(设置了I位),dcba被视作no-op.

•如果包含EA字节的cache块是coherency-required,并且存在于其他的处理器的cache中,这些处理器通过适当的总线强制性确保一致性。Dcba就扮演着一个存储功能(与其他转换、引用、变化记录、内存保护、eioio和caching-inhibited和guarded属性同时考虑)但是,不会引起DSI中断。

这条指令是可选的(也就是说可能部分型号的PowerPC不支持这个指令?)

dcbf

Data Cache Block Flush

Dcbf 使数据cache里的EA所在的块无效化,并且会先把这个块拷贝到内存中,如果他包含了更改过的数据的话。如果这个块被标记为coherency-required,当前处理器会发送一条address-only的广播给其他处理器。如果这个块被其他处理器修改,广播的dcbf会导致当前处理器拷贝块内容到内存中并无效化这个块。这个动作的发生依赖于内存模式,包含EA的块以及块的状态。下面的列表描述了不同的memory coherency属性状态下的发生的动作。

dcbi

Data Cache Block Invalidate

无效化一个cache块

工作的方式如下列:

在一些实现中,dcbi和dcbf的工作方式一样。

dsbst

Data Cache Block Store

如果数据cache里有EA,就会写到内存中去,强制包含有修改过的指令的高速缓存行进行存储(the writing of it to main memory is initiated)。这个initialted不知道指什么意思= =。

dcbt

Data Cache Block Touch

The program uses the dcbt instruction torequest a cache block fetch before it is actually needed by the program. This instruction is treated as a load from the addressedbyte with respect to address translation, memory protection, and reference andchange recording except that reference and change bit recording may not occur.

从上面这段话来讲,这条指令是用来预取数据以提升性能的指令,并且不会引发中断(和下面的dcbtst对应为store touch相比,这条一般用于load)。

dcbtst

Data Cache Block Touch for Store

         和上面的差不多,只是用来store,也是提升性能用来预取的。

dcbz

Data Cache Block Clear to Zero

用来讲一块cache清零,工作方式如下:

简而言之:数据缓存中有,就清零;

                     数据缓存中没有,且内存中区域为cache-allowed,就分配cache并清零

                     如果该页为caching-inhibited或者为write-through模式,则内存对应字节也会清零

                     如果是coherency-required模式,则需要与其他处理器保持一致性(也就是说其他处理器用了这个指令,那么对应的该处理器的部分也应该清零)

 


0 0
原创粉丝点击