b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

【干货】CPU和内存的区别,你知道吗?

电脑杂谈  发布时间:2021-05-02 13:04:16  来源:网络整理

一、前言

不同存储技术的访问时间非常不同。从计算机层次结构可以看出,通常从高层到底层,存储设备变得更慢,更便宜且尺寸更大。 CPU和内存之间存在差异。速度之间存在巨大差异。这时,您将想到计算机科学界的一个著名句子:计算机科学中的任何问题都可以通过添加中间层来解决。

二、缓存层简介

为了解决速度不匹配的问题,可以通过引入缓存中间层来解决该问题,但是还将引入一些新的问题。在现代计算机系统中,从硬件到操作系统,再到某些应用程序,大多数设计都使用众所周知的局部性原理。位置通常采用两种不同的形式,如下所示:

时间局部性:在具有良好时间局部性的程序中,曾经被引用一次的存储位置很可能在不久的将来再次被引用。

空间局部性:在具有良好空间局部性的程序中,一次引用存储位置,然后很可能在不久的将来引用附近的位置。

以上述局部性原则为理论指导,为了解决两者之间的速度不匹配的问题,可以在CPU和内存之间添加一个缓存层,因此可以使用以下结构:

从CPU缓存看缓存的套路你是否知道?

cpu缓存是什么意思_cpu的缓存是什么意思_cpu 二级缓存 查看

三、何时更新缓存?

在CPU中引入缓存中间层后,虽然可以解决与内存速度不一致的问题,但也面临一个问题:当CPU更新其缓存中的数据时,应何时将其写入内存?什么? ,一个更容易想到的解决方案是在CPU更新缓存的数据后立即将缓存的数据更新到内存,也就是说,当CPU更新缓存的数据时,它将自上而下更新直到内存。 ,这是英文。对于直写,此方法的优点相对简单,但缺点也很明显。由于每次都需要访问内存,因此速度会变慢。另一种方法是,当CPU更新高速缓存时,它不会立即更新到内存,而是在适当的时候执行写入内存的操作,因为有许多高速缓存仅存储一些中间结果,因此不需要每次更新。在内存中,它被称为英文回写。这种方法的优点是CPU可以更高效地执行更新,但缺点是实现起来会更复杂。

上面提到的在适当的时间写入存储器。如果它是单核CPU,则仅当要用新输入的数据替换高速缓存时才可以更新内存。但是,在多核CPU的情况下更为复杂。 CPU的计算速度超过了1级缓存的数据I \ O能力。 CPU制造商已经引入了多级缓存结构,例如常见的L 1、 L 2、 L3三级缓存结构。 L1和L2是CPU核心。 L3是唯一的CPU共享缓存。

从CPU缓存看缓存的套路你是否知道?

如果在两个不同的内核(Core 1和Core 2)上运行两个线程,并且内存中的i值为1,则在两个不同的内核上运行的两个线程需要添加i 1操作(如果不这样做)加上一些限制,两个内核同时从内存中读取i的值,然后加1,然后分别将它们写入内存。可能会相互覆盖。相信每个人都可以解决问题。考虑一下,第一个是在一个内核修改了缓存的数据后立即更新内存和其他内核。第二个是,当内核修改了缓存的数据时,它会使也已复制数据的其他CPU内核无效,并等待适当的时间来更新数据。通常,下次读取缓存时,发现该缓存无效。 ,从内存中加载最新值。

四、缓存一致性协议

不难看出,第一种类型需要频繁访问内存以更新数据,并且执行效率相对较低,而第二种类型会将更新数据推迟到最后一分钟,然后读取内存,从而是高效的(类似于延迟加载)。高速缓存一致性协议(MESI)使用第二种方案。该协议主要是为了确保缓存中内部数据的一致性,并防止系统数据混淆。 MESI指4个州的首字母。每个缓存存储数据单元(缓存行)具有4个不同的状态,由2位表示。状态和相应的描述如下:

cpu缓存是什么意思_cpu 二级缓存 查看_cpu的缓存是什么意思

状态描述监视任务M修改(已修改)高速缓存行有效,数据已被修改,并且与内存中的数据不一致。数据仅存在于缓存中。高速缓存行必须始终监视所有读取高速缓存行的尝试。在缓存将缓存行写回到主内存并将状态更改为S(共享)状态之前,必须延迟此操作。 E独占和独占(Exclusive)缓存行有效,数据和内存数据一致,并且数据仅存在于此缓存中。高速缓存行必须监视其他高速缓存的操作,以读取主内存中的高速缓存行。一旦发生此操作,高速缓存行需要处于S(共享)状态。 S共享(Shared)高速缓存行有效,并且数据与内存中的数据一致。数据存在于许多缓存中。高速缓存行必须监视其他高速缓存以使高速缓存行无效或仅使用高速缓存行,并将高速缓存行变为无效。 )缓存行无效,没有监视任务

让我们看一下如何基于缓存一致性协议执行读写操作。假设有一个双核CPU,为了便于描述,只需看一下其逻辑结构即可简化它:

从CPU缓存看缓存的套路你是否知道?

单核读取步骤:核心0发送指令从内存中读取a,通过BUS从内存中读取a到核心0的高速缓存,因为此时数据仅在核心0的高速缓存中,因此Cache行更改为E状态(独占),该过程在中如下所示:

从CPU缓存看缓存的套路你是否知道?

双核读取步骤:首先,Core 0发送一条指令从内存中读取a,通过BUS从内存中读取a到Core 0的高速缓存,然后将Cache行设置为E状态,在内核1在哪个时间发送一条指令,这也是从内存中读取a的指令。当核心1尝试从内存中读取a时,核心0检测到地址冲突(其他缓存读取了主内存中的缓存行),然后核心0响应了相关数据。两个核心Core 0和Core 1,然后将状态设置为S状态(共享)。流程图如下:

从CPU缓存看缓存的套路你是否知道?

cpu 二级缓存 查看_cpu的缓存是什么意思_cpu缓存是什么意思

假设此时核心0需要修改a,则首先核心0将其缓存的a设置为M(已修改)状态,然后通知已缓存a的其他核心CPU(例如Core 1) Set the state)内部缓存中的a的状态为I(无效),最后为a分配一个值。过程如下:

从CPU缓存看缓存的套路你是否知道?

有思想的朋友可能已经注意到,上图中的内存中的a值(值1)不等于Core 0中缓存的最新值(值2),那么何时才是))更新值到内存?也就是说,当核心1需要读取a的值时,它将通知核心0将a的最新值同步到内存(Memory)。 Core 0中的a将被设置为E(独占)状态。同步完成后,Core 0中的已缓存a和Core 1的缓存将被设置为S(共享)状态。该原理图描述了该过程,如下所示:

从CPU缓存看缓存的套路你是否知道?

到目前为止,变量a已在CPU的两个内核Core 0和Core 1中返回到S(共享)状态。以上只是一般过程的简要说明。实际上,这些全都在CPU的硬件级别上。保证,而且操作更加复杂。

五、摘要

如今,基于这些思想设计了许多实现缓存功能的应用程序。缓存将中的数据缓存到更快的内存中,这可以加快应用程序的响应速度。例如,我们使用常见的Redis可能采取以下策略:①首先,应用程序从缓存中查询数据,如果有,它直接使用该数据执行相应的操作,然后返回,如果没有,则查询,更新缓存并返回。 ②当需要更新数据时,请先更新,然后使高速缓存无效,以便下次我们查询,然后将其回填到高速缓存中。可以发现,实际上,一些基本思想是相同的,唯一的区别是对于特定的场景可能需要添加一些其他约束。基础知识是技术大树的根源。我们先种植根,其余的树枝和树叶相对容易获得。

原始链接:

如果您认为这篇文章对您有所帮助,可以跟着我一起学习和进步


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-372498-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...