【发布时间】:2011-12-26 04:42:19
【问题描述】:
伙计们,我已经编写了 20 多年的高速软件,并且几乎知道书中的每一个技巧,从微基准制作合作、分析、用户模式多任务处理、尾递归,你可以将其命名为非常高性能的东西Linux、Windows 等。
问题在于,当 CPU 密集型工作的多个线程暴露于多核处理器时会发生什么,我感到很困惑。
在线程之间(在不同内核上)共享日期的各种方式的微观基准测试中的性能结果似乎不符合逻辑。
很明显,内核之间存在一些“隐藏的交互”,这在我自己的编程代码中并不明显。我听说过 L1 缓存和其他问题,但这些对我来说是不透明的。
问题是:我在哪里可以学到这些东西?我正在寻找一本关于多核处理器如何工作、如何编程以利用其内存缓存或其他硬件架构而不是被它们惩罚的深度书籍。
有什么建议或很棒的网站或书籍吗?经过大量谷歌搜索后,我空空如也。
真诚地, 韦恩
【问题讨论】:
-
我认为很大程度上取决于您要完成的工作。服务器端与桌面,图形与文本处理与模拟核爆炸;几十个任务的高吞吐量 vs. 10,000 个任务的低延迟。您有什么特别感兴趣的领域吗?
-
好的。好问题。本质上,我们正在构建一个 CEP(复杂事件处理)系统,该系统必须以软实时方式每秒处理数百万小比特数据。从理论上讲,单核性能表明,通过将 X 4 乘以四核或 X 8,可以实现必要的性能。数据需要从不同的来源流向组合,然后以不同的方式相乘到客户端。每个步骤都需要 CPU 处理或 I/O,因此我们使用 Interlocked 构建了无锁协作用户模式多任务。但是存在无法解释的(迄今为止)性能问题。
标签: c# .net parallel-processing cpu