age*_*emO 3 x86 assembly cpu-architecture
从理论上讲,有没有办法在RAM中执行任何计算,使用与内存相关的指令,例如move
,clflush
或者其他什么,例如xor
两个相邻的行之间?
由于我对RAM和装配的了解有限,我想不出任何这样的可能性.
不,任何计算都在CPU(或GPU,或可以加载/存储到RAM的其他系统设备)中完成.甚至@PaulR在评论中链接的图灵完整的移动内容只是使用CPU的地址生成硬件和寄存器中的数据来进行计算.
当CPU有缓存未命中时,内存仍然只能看到64B突发加载和64B突发存储.
另请参阅每个程序员应该了解的内存,了解DDR协议的工作原理(发送地址,然后向RAM传输数据突发)
相关:是num++
C 中的原子,还是x86inc [mem]
?
lock inc [mem]
实际上是在CPU内部实现了一个加载/修改/存储,CPU 对系统中所有可能的其他观察者(例如其他CPU核心和PCIe设备)看起来是原子的.但是不包括将逻辑分析器连接到内存总线之类的东西,这不符合CPU内核在执行原子读取 - 修改 - 写入时用来保存缓存行的独占权的缓存一致性协议.
有些人认为添加是在内存芯片"内部"完成的,但它们是错误的.DRAM芯片(或连接到DDR4总线的接口芯片)中没有加法器,甚至布尔AND/OR/XOR硬件; 它所能做的只是从给定的地址加载或存储.任何可以做得更多的芯片不仅仅是DRAM.
显然,存储器接口芯片中存在逻辑,但它并没有连接到数据上.
如果确实如此,它将是一种计算RAM.(感谢评论中的链接,BTW.有趣的计算机架构理念.AFAIK,没有主流CPU或GPU使用C-RAM.)
您甚至不能要求DDR4 DRAM将页面归零.CPU必须通过内存控制器来做到这一点.