原帖由 xiaozhaoz 于 2006-3-8 17:36 发表
地址:
http://groups.google.com/group/l ... d0#cdfbcb70e9c48cd0
有兴趣的可以在这里讨论,那边都是牛人![]()
原帖由 xiaozhaoz 于 2006-3-9 14:59 发表
对barrier() 我的理解是这只是一个compiler barrier, 这个barrier加入到代码中,会使cache invalidation
而mb是hardware barrier,在代码运行中,CPU会prevent from reordering cache visit.
我想知道,在 ...
原帖由 albcamus 于 2006-3-9 15:37 发表
个人理解, 一个CPU调用lock;前缀(或者xchg这样的串行指令), 会导致其他的CPU也触发一定的动作来同步自己的缓存。在CLF看到一朋友说, CPU的#lock引脚连接到北桥芯片的#lock引脚, 因此带lock;前缀的指令执行前,北桥芯片拉起#lock电平, 锁住总线, 直到指令执行完毕再放开。 总线加锁会自动invalidate所有CPU的cache吧? 如果是,那mb()也能保证所有CPU的cache一致的。
原帖由 xiaozhaoz 于 2006-3-9 17:04 发表
你的说法是对的。
察看手册,看到以下说明:
LOCK ── Assert LOCK# Signal Prefix
Opcode Instruction Clocks Description
F0 LOCK 0 Assert LOCK# signal for the next instruction
Description
...
原帖由 albcamus 于 2006-3-9 17:29 发表
您千万别客气, 偶是ULK2还没看完的菜鸟, ,
您说:
>lock 会使某个CPU独享 share memory(内存??)。 但是不会使cache invalidate.
我想, lock(或cpuid、xchg等)使得本CPU的缓存全部写入 ...
原帖由 albcamus 于 2006-3-9 15:37 发表
>对barrier() 我的理解是这只是一个compiler barrier, 这个barrier加入到代码中,会使cache invalidation
>而mb是hardware barrier,在代码运行中,CPU会prevent from reordering cache visit.
非常感 ...
原帖由 albcamus 于 2006-3-9 15:37 发表
可是您给我看的那篇文章说:
A given CPU always perceives its own memory operations as occurring in program order. That is, memory-reordering issues arise only when a CPU is observing other CPUs' memory operations.
似乎只有一个主体访问内存时, 无论如何也不会需求barrier。 只有两个或更多主体(CPU、DMA控制器)访问内存, 且其中一个观测另一个, 就需要barrier了。
原帖由 Solaris12 于 2006-3-10 11:06 发表
这个推论是正确的。CPU为了让pipeline更高效是会打乱内存读取顺序,但是,这都建立在分析指令间依赖关系之上,因此即便是乱序,对同一单元那部分存取指令也是顺序执行的。
因此,在单cpu的系统上,程序员还 ...
MESI协议是“修改(modified)、排它(exclusive)、共享(shared)、无效(invalid)”四个功能的简称,每个缓存模块必须按照MESI协议完成这4个独立的功能。
● 修改:如果某一内存数据区记录只存在于一个CPU缓存中,那么此CPU可以对此数据进行修改,而无需通知其他CPU。
● 排它:同一时间只能有一个CPU对同一内存数据区进行修改或者更新。
● 共享:如果某一内存数据区记录存在于多个CPU缓存中,那么CPU对此数据修改后,必须通知其他CPU。
● 无效:一旦CPU对缓存数据访问失效,那么就必须重新从内存中读取数据。
原帖由 albcamus 于 2006-3-10 11:27 发表
再补充一点, 关于snoopying和SMP上的缓存一致性:
IA32的每个CPU都要实现MESI协议(M:Modified;E:Exclusive;S:Shared;I:Invalid)
9.28 KB, 下载次数: 27
LKML memory-barrier.txt version 4
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |