CPU Cache的数据写入
随着时间的推移,CPU和存储器的访问性能越来越不同,因此CPU CACCHe (缓存)嵌入CPU内部,CPU Cache相当接近CPU核心,因此访问速度快,起到CPU和存储器之间的缓存作用。
CPU Cache通常分为L1 Cache、L2 Cache、L3 Cache三级缓存,级别越低,CPU核心越接近,访问速度也越快,但存储容量相对较小。 其中,多核的CPU中,各核分别有L1/L2 Cache,L3 Cache由所有核共享。
我们首先简单理解CPU Cache的结构。 CPU Cache由很多Cache Line组成。 CPU Line是CPU从存储器读取数据的基本单位,CPU Line由各种标签数据块构成。 你可以。
当然,CPU读取数据时,希望尽量从CPU Cache读取,而不是每次从存储器中获取数据。 所以,作为程序员,我们必须尽可能写高速缓存命中率高的代码,从而有效地提高程序的性能。 具体来说,上一篇文章“如何写让CPU跑得更快的代码? "。
事实上,数据不仅有读取操作,还有写入操作。 数据写入Cache时,内存和Cache对应的数据不同。 在这种情况下,Cache和内存的数据不一致。 需要使Cache的数据与内存同步。
出了问题。 那什么时候把缓存的数据写回内存呢? 介绍以下两种方法来处理这个问题。
直接写入(Write Through )
写回(Write Back )

直通写
保持存储器和高速缓存一致性最简单的方法是将数据写入存储器和高速缓存,这种方法称为写通过(Write Through )。
这种方法在写入前判断数据是否在CPU Cache中。
如果数据已经在Cache中,请将数据更新到Cache,然后写入内存。如果数据不在Cache中,则直接将数据更新到内存中。
写入直接法直观、简单,但即使数据不在Cache中,由于每次写入都会被写入内存,因此写入需要大量的时间,可能会对性能产生很大影响。
写回
写入直接通过每次写入都将数据写入存储器来影响性能,因此为了减少将数据写入存储器的频率,有写回(Write Back )的方法。
在写回机制中,如果发生写操作,新数据只需写入Cache Block,只有在修改后的Cache Block“被替换”时才需要写入内存,减少了数据写入内存的频率,
那么具体是怎么做到的呢? 以下详细说明。
如果有写入,如果数据已经在CPU Cache上,则在CPU Cache上更新数据的同时,将CPU Cache上的这个Cache Block标记为脏。 这个脏的标记表示此时的CPU Cache上的这个Cache Block。
有写入时,如果与数据对应的Cache Block中存储有“其他存储器地址的数据”,则检查该Cache Block的数据是否脏了,如果脏了,则将该Cache Block的数据保存在存储器中如果Cache Block中的数据没有脏,直接把数据写入这个Cache Block,然后把这个Cache Block标记为脏就可以了。
写回方法是,在向Cache写入数据时,在缓存错误的同时,仅在与数据对应的Cache的Cache Block为脏标志的情况下向存储器写入数据,在缓存错误的情况下,在写入后Cache后,与该数据对应
这样的优点是,如果我们的大量操作能击中缓存,大部分时间CPU不需要读写存储器,自然性能比写入直接高得多。
文/上海蓝盟 IT外包专家