尽管大多数答案都是从软件和/或硬件模型的角度出发,但最干净的方法是考虑物理RAM芯片的工作方式。(高速缓存位于处理器和内存之间,并且仅使用相同的地址总线,并且其操作对处理器而言是完全透明的。)RAM芯片具有一个单个地址解码器,该解码器接收存储单元的地址并到达地址总线(以及类似的数据总线,输入或输出)。当前的存储器以“单处理器方法”构建,即,一个处理器通过一条总线连接到一个存储芯片。换句话说,这就是“冯·诺依曼瓶颈”,因为每条指令必须至少引用一次内存。因此,在一根电线(或多根电线,又名总线)上,一次只能存在一个信号,因此RAM芯片一次只能接收一个单元地址。在确保两个内核将相同地址放入地址总线之前,实际上不可能通过两个不同的总线驱动程序(如内核)同时访问总线。(并且,如果相同,则是多余的)。
剩下的就是所谓的硬件加速。相干总线,高速缓存,SIMD访问等只是物理RAM前面的一些漂亮外观,您的问题是关于。提到的加速器可能会专门解决使用地址总线的问题,而编程模型与您的问题关系不大。还应注意,同时访问也将违反抽象的“专用地址空间”。
因此,您的问题是:不能同时使用相同或不同的地址进行直接直接RAM访问。使用缓存可能涵盖了这一事实,并且在某些情况下可能允许同时进行访问。它取决于缓存级别和构造,以及数据的空间和时间局部性。是的,您是对的:没有增强的RAM访问权限的多核处理对RAM密集型应用程序无济于事。
为了更好地理解,请回想一下直接内存访问的工作原理。CPU和DMA设备都可以将地址放入总线,因此必须在同时使用总线时将彼此排斥。