我正在寻找重新排序代码的事情,甚至可能在多处理器的情况下破坏代码。

有帮助吗?

解决方案

维基百科有一个相当全面的优化技术列表此处

其他提示

最重要的一个是内存访问重新排序。

缺少内存屏障或序列化指令,处理器可以自由重新排序内存访问。某些处理器架构限制了它们可以重新排序的程度; Alpha被认为是最弱的(即可以重新排序最多的那个)。

可以在Linux内核源代码文档中找到对该主题的非常好的处理,在 Documentation / memory-barriers.txt

大多数情况下,最好使用编译器或标准库中的锁定原语;这些都经过了充分的测试,应该具备所有必要的内存障碍,并且可能已经进行了相当优化(优化锁定原语很棘手;即使是专家也有时会弄错它们。)

是的,但究竟是什么问题?

然而,由于这是一个有趣的话题:编译器和处理器用来优化代码的技巧不应该破坏代码,即使有多个处理器,在该代码中没有竞争条件。这被称为顺序一致性的保证:如果您的程序没有任何竞争条件,并且所有数据在访问之前都被正确锁定,则代码将表现为顺序执行。

有一个非常好的Herb Sutter视频在这里谈论这个:

http://video.google.com/videoplay?docid=-4714369049736584770

每个人都应该注意这一点:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top