- 论坛徽章:
- 0
|
本帖最后由 _zhao_zhang 于 2010-03-31 17:38 编辑
多核或ht上 cpu会将读写指令会依据规则重新排序以便更快执行.
首先要看是amd64位cpu 还是intel 32位 再或是intel 64位 每种cpu规则不同
大体分两种
1.内存访问指令严格按照编程顺序执行, 即不排序.
2.内存访问指令自由重新排序. CPU自由按照最大的效能原则重新排序内存访问顺序, CPU和总线效能得到最大发挥. 但是你根本无法为这样的CPU编写程序, 因为CPU不保证任何事情. 比如, 你写了这样一个程序, i = 1; i ++; 得到的i可能是0, 可能是1, 也可能是2.
辩证的说, 正确性是第一位的需求, 效能是第二位的需求. 具体实现在两者之间摇摆, 偏近极端1的实现, 我们称为强模型(strong model); 向极端2的方向的实现, 我们称其为弱模型(weak model)
例如intel64就是弱模型.什么读操作之间不能重新排序,写操作不能跟旧的读操作排序,主存写操作不能跟其他的写操作排序===...
具体规则挺复杂的 记不住 看intel 手册吧...
...出这问题的考官是在炫耀自己,觉的没品 |
|