11 memory cpu computer-architecture
我的问题是,CPU如何将数据写入ram?
据我了解,现代 CPU 使用不同级别的缓存来加速 ram 访问。RAM 获取信息命令,然后向 CPU 发送突发数据,CPU 将所需数据(以及一堆接近 CPU 所需地址的额外数据)存储到最高级别的缓存中,然后 CPU 逐渐询问不同的缓存将越来越小的数据块发送到缓存级别,直到它位于 1 级缓存中,然后直接读入 CPU 寄存器。
当 CPU 写入内存时,这个过程是如何工作的?计算机是否会倒退缓存级别(与读取相比,顺序相反)?如果是这样,如何将不同缓存中的信息与主存同步?此外,与读取操作相比,写入操作的速度如何?如果我连续写入 RAM(例如在桶排序的情况下)会发生什么?
提前致谢,
-假的
编辑:我还没有真正得到我可以完全接受的答案。我特别想知道 RAM 写入的同步部分。我知道我们直接从 CPU 写入 L1 缓存,当我们同步不同级别的缓存时,数据会被推送到缓存级别,最终主 RAM 与最高层缓存同步。但是,我想知道的是,缓存何时与主 RAM 同步和同步,以及它们相对于读取命令的速度有多快。
Ski*_*izz 11
啊,这是那些答案非常复杂的简单问题之一。简单的答案是,这取决于写入是如何完成的以及有什么样的缓存。这是有关缓存如何工作的有用入门。
CPU 可以通过多种方式写入数据。没有任何缓存,数据直接存储在内存中,CPU 等待写入完成。对于缓存,CPU 通常按程序顺序存储数据,即如果程序先写入地址 A,然后写入地址 B,那么无论缓存如何,内存 A 都会先于内存 B 写入。缓存仅影响物理内存何时更新,这取决于所使用的缓存类型(请参阅上面的链接)。一些 CPU 还可以非临时存储数据,即可以重新排序写入以充分利用内存带宽。因此,写入 A,然后是 B,然后 (A+1) 可以重新排序为在单个突发中写入 A,然后是 A+1,然后是 B。
另一种复杂情况是存在多个 CPU 时。根据系统的设计方式,一个 CPU 的写入不会被其他 CPU 看到,因为数据仍在第一个 CPU 缓存中(缓存是脏的)。在多 CPU 系统中,使每个 CPU 的缓存与物理内存中的内容相匹配称为缓存一致性。有多种方法可以实现这一点。
当然,以上是针对奔腾处理器的。其他处理器可以以其他方式做事。以 PS3 的 Cell 处理器为例。Cell CPU 的基本架构是一个 PowerPC 内核和多个 Cell 内核(在 PS3 上有八个单元,其中一个始终处于禁用状态以提高产量)。每个单元都有自己的本地内存,类似于从不写入系统 RAM 的 L1 缓存。可以使用 DMA(直接内存访问)传输在此本地 RAM 和系统 RAM 之间传输数据。单元可以使用看似正常的读取和写入来访问系统 RAM 和其他单元的 RAM,但这只会触发 DMA 传输(因此它很慢并且确实应该避免)。这个系统背后的想法是游戏不仅仅是一个程序,
总而言之,在 CPU 速度与 RAM 速度相匹配的时代,写入 RAM 曾经非常简单,但随着 CPU 速度的提高和缓存的引入,该过程变得更加复杂,有许多不同的方法。
斯基兹
是的,它会向后向下缓存级别并保存到内存中,但重要的是在多处理系统中,缓存在 2 个或更多处理器(核心)之间共享,并且数据必须一致,这是通过为所有多处理器创建共享缓存来完成的或不同的缓存,但通过使用关键部分保存一致性(如果一个缓存中的数据发生更改,则会强制其写入内存并更新其他缓存)
| 归档时间: |
|
| 查看次数: |
13023 次 |
| 最近记录: |