我正在寻找像代码重新排序这样的东西,在多处理器的情况下甚至可能破坏代码。
发布于 2008-11-07 14:44:42
维基百科有一个相当全面的here优化技术列表。
发布于 2008-11-07 14:48:35
最重要的一个是内存访问重新排序。
在没有内存围栏或序列化指令的情况下,处理器可以自由地重新排序内存访问。一些处理器架构对它们可以重新排序的数量有限制;Alpha是众所周知的最弱的(即可以重新排序最多的)。
在Documentation/memory-barriers.txt上的Linux内核源代码文档中可以找到这个主题的一个很好的解决方案。
大多数情况下,最好使用编译器或标准库中的锁定原语;这些原语经过了良好的测试,应该具有所有必要的内存屏障,并且可能是非常优化的(优化锁定原语是很棘手的;即使是专家有时也会出错)。
发布于 2008-11-07 14:39:08
是的,但你的问题到底是什么?
然而,由于这是一个有趣的话题:编译器和处理器用来优化代码的技巧不应该破坏代码,即使在代码中没有竞争条件的情况下,使用多个处理器也是如此。这就是所谓的顺序一致性保证:如果您的程序没有任何争用条件,并且所有数据在访问之前都被正确锁定,则代码的行为将如同它是按顺序执行的一样。
Herb Sutter在这里谈到了一个非常好的视频:
http://video.google.com/videoplay?docid=-4714369049736584770
每个人都应该看看这个:)
https://stackoverflow.com/questions/272246
复制相似问题