我正在寻找诸如在多处理器的情况下甚至可能破坏代码的重新排序代码的事情。处理器如何优化代码有哪些技巧?
回答
维基百科的优化技术here相当全面的清单。
是的,但究竟是什么问题?
但是,由于这是一个有趣的话题:编译器和处理器用来优化代码的技巧不应该在代码中没有竞争条件的情况下破坏代码,即使使用多个处理器也是如此。这被称为顺序一致性的保证:如果你的程序没有任何竞争条件,并且所有数据在访问之前都被正确地锁定,那么代码将按照顺序执行。
有香草萨特的一个很好的视频说起这个位置:
http://video.google.com/videoplay?docid=-4714369049736584770
每个人都应该看这个:)
最重要的将是内存访问重新排序。
缺少内存隔离或序列化指令,处理器可自由重新排序内存访问。一些处理器体系结构对它们可重新排序的次数有限制; Alpha被认为是最弱的(即可以重新排序最多的那个)。
在Linux内核源文档的Documentation/memory-barriers.txt处可找到有关该主题的非常好的处理方法。大多数情况下,最好使用来自编译器或标准库的锁定原语;这些都经过了充分的测试,应该具备所有必要的内存屏障,并且可能是相当优化的(优化锁定原语是非常棘手的;即使专家有时也会让它们错误)。
DavidK的回答是正确的,但是了解语言/运行时的内存模型也非常重要。即使没有竞争条件并且具有连续一致性和互斥锁使用情况,当数据由在cpu的不同核心中运行的不同线程缓存数据时,您的代码仍然可能会中断。一些语言,Java是一个例子,确保了在使用互斥锁时线程之间的数据状态,但仅仅确保没有两个线程能够同时访问数据是不够的。您需要以正确的方式使用互斥锁,以确保语言运行库同步两个线程之间的数据状态。在java中,这是通过让两个线程在同一个对象上同步来完成的。
这是一个很好的网页,解释问题以及如何在javas记忆模型中处理它。
- 1. Android代码优化技巧
- 2. 代码优化技巧:
- 3. extjs中的代码优化技巧?
- 4. 什么是一些jSoup优化技巧?
- 5. 2d图形优化技巧
- 6. 基于“优化技巧”
- 7. C#中的优化技巧
- 8. MySQL查询优化技巧
- 9. 查询优化技巧
- 10. 使用Alexa技巧处理本地化
- 11. Spark SQL如何优化连接?什么是优化技巧?
- 12. 有没有批处理代码优化器这样的事情?
- 13. Python,多处理:如何优化代码?让代码更快?
- 14. 提示和技巧有关查询优化[SQL服务器2005]
- 15. CSS代码组织技巧
- 16. PHP代码部署技巧
- 17. 优化技巧? AS3 iOS AIR 3.0
- 18. 寻找MySQL优化和微调技巧
- 19. 优化-webkit转换性能的技巧?
- 20. Python/PHP Tesseract输出优化技巧
- 21. jQuery的Ajax优化技巧 - MVC
- 22. 内存优化的Python技巧
- 23. 需要InnoDB优化技巧 - mysql
- 24. 全文搜索优化技巧
- 25. 有效的GLSL代码技巧
- 26. 寻找一些技巧,以优化我的WebGL 3D引擎
- 27. 提高UI响应度的一些技巧有哪些?
- 28. 写好CSS的一些技巧有哪些?
- 29. 如何知道哪些代码已被优化?
- 30. 哪些Python PEP处理代码风格?
可否请你更新到这一短语在问题的形式? – 2008-11-07 14:36:58
你的意思是编译器吗?因为你会得到截然不同的答案... – 2008-11-07 14:36:59
哪个编译器?哪个平台? – 2008-11-07 14:37:31