朋友们,我从事高速软件编程已经有20多年了,我几乎知道书中的每一个技巧,从微型工作台制作协作,剖析,用户模式多任务,尾部递归,你在Linux,Windows上的非常高性能的东西,等等。
问题是,当CPU密集型工作的多个线程暴露在多核处理器上时,会发生什么,这让我感到困惑。
不同线程(在不同内核上)共享数据的各种方式在微基准测试中的性能结果似乎不符合逻辑。
很明显,内核之间存在一些“隐藏的交互”,这在我自己的编程代码中并不明显。我听说过L1缓存和其他问题,但这些问题对我来说是不透明的。
问题是:我在哪里可以学到这些东西?我正在寻找一本关于多核处理器如何工作的深入书籍,如何编程来利用它们的内存缓存或其他硬件架构,而不是受到它们的惩罚。
有什么建议或者很棒的网站或书籍吗?在谷歌了很多次之后,我一无所获。
诚心诚意,韦恩
发布于 2011-12-26 12:48:12
这本书教会了我很多关于这类问题的知识,为什么原始的CPU能力并不是唯一需要注意的事情。几年前我在研究生院使用过它,但我认为所有的原则仍然适用:
http://www.amazon.com/Computer-Architecture-Quantitative-Approach-4th/dp/0123704901
基本上,多进程配置中的一个主要问题是同步对主内存的访问,如果你做得不对,它可能会成为性能的真正瓶颈。对于必须保持同步的缓存,这是相当复杂的。
发布于 2011-12-26 17:18:32
我在stackoverflow的姊妹网站https://softwareengineering.stackexchange.com/questions/126986/where-can-i-find-an-overview-of-known-multithreading-design-patterns/126993#126993上提出了自己的问题,并给出了答案
我将复制答案以避免点击:
引用Boris的话:
使用微软.NET进行
并行编程:多核体系结构https://rads.stackoverflow.com/amzn/click/0735651590上的分解和协调设计模式
这是一本我全心全意推荐的书。
它是:
新的-去年出版的。这意味着你没有读到一些过时的实践。
Short -关于200+页面,信息密集。现在有太多的书要读,而用来阅读1000+ pages书籍的时间却太少了。
易于阅读-它不仅写得很好,而且以非常简单的方式引入了难以掌握的概念。
旨在教授-每章都给出了要做的练习。我知道这样做总是有益的,但很少这样做。这本书给出了非常令人信服和有趣的任务。令人惊讶的是,我做了大部分,而且很享受。
另外,如果你想了解更多的低级细节,这是我找到的最好的资源:"The Art of Multiprocessor Programming“它是用java编写的,它在我的C#背景下运行得很好。
PS:我有大约5年的“硬核”并行编程经验,所以当我说"The Art of Multiprocessor Programming“很棒的时候,希望你能相信我
发布于 2011-12-26 12:54:41
https://stackoverflow.com/questions/8632949
复制相似问题