gpt4 book ai didi

cpu-architecture - 直接内存访问

转载 作者:行者123 更新时间:2023-12-02 00:52:21 27 4
gpt4 key购买 nike

我对 DMA 有这个基本的疑问。当CPU放弃总线让DMA进行数据的取/存时,它如何继续处理?

我的意思是,即使是 CPU 也必须获取指令,通过总线将结果存储回内存/IO,不是吗?

最佳答案

CPUs have cache ,所以他们可以在没有任何实际的主内存访问的情况下做很多事情。即使是低功耗系统也往往有缓存,因为在片外驱动信号会消耗足够的能量,以至于缓存可以通过缓存命中节省的能量来收回成本。

更重要的是,DMA 不会“接管”RAM,甚至不一定会使内存带宽饱和。 CPU 不会“放弃总线”;内存 Controller 接受来自 CPU 内核和其他系统设备的读/写请求。在 CPU 上运行内存密集型任务将减慢延迟 DMA,反之亦然,因为内存 Controller 或系统代理仲裁对内存的访问,对来自所有源的读取和写入请求进行排队。

DMA 非常适合仍然比内存带宽慢得多的传输。例如SATAIII是6Gbits/s,而双 channel DDR3-1600MHz的主内存带宽大约是25GBytes/s。因此,programmed-io 会花费大部分时间等待来自 SATA Controller 的数据,甚至不会在存储到 RAM 时遇到瓶颈。


现代 Intel x86 CPU 中各个部分如何组合在一起的示例: this diagram of Intel Skylake's system architecture (including eDRAM as memory-side cache) .抱歉,我没有找到仅显示核心和系统代理的更简单的图表,但在没有 eDRAM 的系统中,系统代理右侧唯一的东西是内存 Controller ,其他一切都保持不变。

内存 Controller 是片上的,因此此图中唯一的片外连接是 PCIe 总线。

Skylake system agent diagram, from IDF via ARStechnica

关于cpu-architecture - 直接内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com