gpt4 book ai didi

memory - 多核架构中的CPU和内存访问

转载 作者:行者123 更新时间:2023-12-01 11:21:22 27 4
gpt4 key购买 nike

我想知道,例如,如果2个CPU内核尝试同时(通过内存控制器)访问内存,那么“一般”如何处理内存访问?实际上,当内核和启用DMA的IO设备尝试以相同方式进行访问时,情况相同。

I think,内存控制器足够聪明,可以利用地址总线并发地处理这些请求,但是我不确定当他们尝试访问相同的位置或IO操作垄断了地址总线并且没有足够的CPU占用空间时会发生什么情况继续。

谢谢

最佳答案

简短的回答是“它很复杂,但是在某些情况下访问肯定可以并行发生”。

我认为您的问题有点太黑白了:您可能正在寻找一个答案,例如“是的,多个设备可以同时访问内存”或“没有,它们不能”,但是现实是,首先d需要描述一些特定的硬件配置,包括一些底层实现细节和优化功能,以获得确切的答案。最后,您需要准确定义“相同时间”的含义。

通常,一个好的一阶近似值是硬件将使所有硬件似乎可以同时访问存储器,这可能是由于争用而导致等待时间的增加和带宽的减少。在非常精细的时序级别,一台设备实际上可能会推迟另一台设备的访问,也可能不会,这取决于许多因素。您极不可能需要此信息来正确实现软件,并且极不可能需要了解详细信息甚至最大化性能。

就是说,如果您真的需要了解详细信息,请继续阅读,我可以就某种理想化的latpop /台式机/服务器规模的硬件给出一些一般性的意见。

正如Matthias所述,您首先必须考虑缓存。缓存意味着任何要进行缓存的读取或写入操作(几乎包括所有CPU请求以及许多其他类型的请求)都可能根本不接触内存,因此在这种意义上,许多内核可以“访问”内存(至少是缓存)图片)同时进行。

如果然后考虑所有高速缓存级别中未命中的请求,则需要了解内存子系统的配置。通常,RAM芯片一次只能做“一件事情”(即,诸如读取和写入这样的命令适用于整个模块),并且通常扩展到由多个芯片组成的DRAM模块以及通过DRAM连接的一系列DRAM。到单个内存控制器的总线。

因此,可以说,从电气上来说,一个内存控制器及其附加的RAM的组合可能只同时执行某件事。现在,事情通常类似于从物理上连续的字节跨度中读取字节,但是该操作实际上可以帮助一次处理来自不同设备的多个请求:即使每个设备向控制器发送单独的请求,良好的实现也会将coalesce请求发送给相同或附近的内存区域。

此外,即使CPU也可能具有这样的能力:当发生新请求时,它可以/必须注意到重叠区域的现有请求正在进行中,并将新请求与旧请求绑定在一起。

不过,您可以说,对于单个内存控制器,通常一次只能处理一个设备的请求,而没有合并请求的特殊机会。现在,请求本身通常为纳秒级,因此可以在一个较小的时间单位内处理许多单独的请求,因此这种“排他性”是细粒度的,通常不会引起注意。

现在,在上面我已经小心地将讨论限制在一个内存控制器上-当您有多个内存控制器4时,即使在RAM级别,也肯定可以有多个设备同时访问内存。这里每个控制器本质上都是独立的,因此,如果来自两个设备的请求映射到不同的控制器(不同的NUMA区域),则它们可以并行进行。

那是很长的答案。

1实际上,命令流比“读”或“写”之类的命令级别更低,更复杂,并且涉及诸如打开内存页,从中传输字节流等概念。What every programmer should know about memory是该主题的出色介绍。

2例如,假设有两个对内存中相邻字节的请求:如果它们适合总线宽度,则控制器可以将它们合并为一个请求。

3当然,如果您正在多个设备上争夺内存,那么总体影响可能会非常明显:每设备带宽的减少和延迟的增加,但是我的意思是共享的粒度足够细,您可以通常,我们无法分辨细分的独占访问和某些假设设备之间的区别,该设备在每个周期中对每个请求都同时进行。

4在现代硬件上,最常见的配置是每个插槽一个内存控制器,因此在2P系统上,您通常有两个控制器,当然也可以使用其他比率(更高和更低)。

关于memory - 多核架构中的CPU和内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42403764/

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