【发布时间】:2011-06-03 10:19:08
【问题描述】:
我最近一直在阅读内存模型,我对它的工作原理有点困惑。
引用http://cis.poly.edu/muller/CS623/weakmemory.htm
如果处理器写入一个新的 X 然后写入一个新的 Y,所有其他处理器随后 执行读取 Y 然后读取 X,将 访问新的 Y 和新的 X, 旧 Y 和新 X,或旧 X 和 老 Y:但没有处理器可以访问 新的 Y 和旧的 X。这个 强排序的假设是,在 一次,合理。当前计算机 但是,制造商建议 程序员不依赖内存 订购。这是因为较新的内存 管理系统试图重新排序 内存访问优化 目的。允许的系统 重新排序内存请求被调用 弱序记忆系统 (楷模)。检查如何重新排序 可用于提高性能, 考虑以下汇编代码 [2]。
Load reg1, A // register1 = contents of memory A
Load reg2, B // register2 = contents of memory B
ADD reg3, reg1, reg2 // register3 = register1 + register2
Store reg3, C // contents of memory C = contents of register3
如果我们假设位置 B 是 当前在缓存中,位置 A 是 未缓存,则加载 A 将采取 比 B 长。而不是等待 A,CPU可以从它的缓存中获取B, 隐藏 B 的延迟:因此 CPU 可以 只要 A 是就执行加法 可用的。通过放松强者 (顺序)执行的内存模型 (即,必须先加载 A,然后再加载 B),更大的性能是 可能----但可能无法重新排序 对软件透明。考虑 下面的代码片段,它是 可用于实现的代码 自旋锁信号量 [2]。
我的问题是,较弱的内存模型怎么可能导致处理器可以访问新 Y 和旧 X 的情况。它不是写入同一个内存 (ram) 还是可以工作不同?我假设如果一个进程修改了一个变量,然后另一个进程读取它,它会读取最新的值。
我不确定的另一件事是哪个组件允许内存访问重新排序,我现在的假设是允许编译器重新排序指令。但是 CPU 也可以重新排序吗?
谢谢
【问题讨论】:
标签: cpu-architecture cpu-registers memory-model