11

自从 Microsoft 首次宣布 .NET 任务并行库 (TPL) 以来,我一直非常感兴趣地关注它的开发。

毫无疑问,我们最终会利用 TPL。我要质疑的是,当 Visual Studio 2010 和 .NET 4.0 发布时开始利用 TPL 是否有意义,或者等待一段时间是否有意义。

为什么现在开始?

  • .NET 4.0 任务并行库似乎设计得很好,一些相对简单的测试表明它在当今的多核 CPU 上运行良好。
  • 自从大约七年前购买我的第一个四核处理器 Dell Poweredge 6400 以来,我一直对使用多个轻量级线程来加速我们的软件的潜在优势非常感兴趣。当时的实验表明,这样做不值得,我将其主要归因于在每个 CPU 的缓存(当时没有共享缓存)和 RAM 之间移动数据的开销。
  • 竞争优势——我们的一些客户永远无法获得足够的性能,毫无疑问,我们今天可以使用 TPL 构建更快的产品。
  • 听起来很有趣。是的,我意识到有些开发人员宁愿用锋利的棍子戳自己的眼睛,但我们真的很喜欢最大化性能。

为什么要等?

  • 随着多核支持的成熟,今天的 Intel Nehalem CPU 是否代表了我们的发展方向?您现在可以购买具有 4 个内核且共享一个 3 级缓存的 Nehalem CPU,并且很可能在 Visual Studio 2010 / .NET 4.0 发布时共享一个 3 级缓存的 6 核 CPU。显然,内核数量会随着时间的推移而增加,但架构呢?随着核心数量的增加,它们还会共享缓存吗?Nehalem 的一个问题是,即使内核之间的互连速度非常快,它们的内存访问 (NUMA) 也不一致,这会导致性能下降和结果的可预测性降低。未来的多核架构能否取消 NUMA?
  • 同样,.NET 任务并行库是否会随着成熟而改变,需要修改代码才能充分利用它?

限制

  • 我们的核心引擎是 100% C# 并且必须在没有完全信任的情况下运行,因此我们仅限于使用 .NET API。
4

5 回答 5

8

我现在就开始。我强烈怀疑我们已经看到了大部分更改——即使在候选版本中有一些调整,我相信它们会在PFX 团队博客中得到很好的记录,并且很容易更改。即使芯片发生变化,我希望 TPL 能够在未来的版本中进行适当调整——而且我个人希望当前的 TPL 在处理这些新芯片方面仍然可能比任何手工制作的线程代码做得更好,比如凡人我们可以写。

我现在开始看到的一个真正的缺点是学习资源还没有真正存在。有一些文档、一些博客文章(其中一些现在已经过时)和一些示例代码 - 但没有专门针对 PFX 的书籍。不过,我相信这些会及时到来——如果你在游戏的早期,你甚至可以写一个:)

根据您的应用程序,您可能还想查看Reactive Extensions,它与 PFX 携手合作。

于 2010-01-28T17:51:26.177 回答
1

最后,如果您的核心引擎总体上可以从并行性中受益,则更为重要。它是否有很多需要用锁保护的共享状态?如果这是真的,是否可以轻松地将其转移到以无锁数据结构为中心的设计中?

我认为必须首先回答这些问题,以便您可以更清楚地了解 TPL 是否会在未来有所帮助。

于 2010-01-28T17:55:48.407 回答
1

我也不会等。

事实上,我会更进一步说不要等待 VS2010/.NET 4.0。TPL 现在可用于 .NET 3.5,作为 .NET 的响应式扩展的一部分。

于 2010-03-17T20:48:50.260 回答
1

嗯 - 您今天反对使用 TPL 的主要原因似乎如下:
您不知道 TPL 是否会最大限度地利用未来的多核 CPU。

我会说(这只是一个猜测——尤其是在计算机科学领域,你永远无法知道接下来会发生什么):是的,它们会改变。是的,TPL 将在某些时候进行更改以最大限度地提高性能。但是,一些更改将是“在幕后” - 您将受益于优化而无需实际更改一行代码。

即使架构发生了变化,仅在更改代码的组合中才会导致更高的性能:我认为这些更改不会影响您的整个代码-也许每毫秒的百分比非常重要。

替代方案在哪里?使用线程池?好吧 - 那么 TPL 是最新的。因此,恕我直言,您的代码在使用时将更具前瞻性。例如,VS 2010 的调试功能的演示看起来相当不错。

此外,在我看来,TPL 似乎非常灵活——如果它不适合特定情况,您不必在那里使用它。另一方面,它简化了其他地方的开发。

我认为今天最重要的是考虑并行化并将其包含到架构中。TPL 使这个过程变得更加容易。

因此,我的结论是:使用它!

于 2010-01-28T17:56:10.247 回答
1

我也会去的。在我看来,最大的变化是“范式”从“过去 8 年我们都是这样做的”开发转变为更具功能性/无副作用的编程。

如果您今天开始使用 PFX,我猜想它需要一些时间来加快速度并真正移植您的代码以充分利用它。另一方面,如果 PFX 在 2 年内消失或带来重大变化,我希望您的代码仍然可以使用您将获得的任何东西更好地工作。我们不会再次减少核心数量,并且在很长一段时间内都不会放弃更好地扩展的大任务。

关于 CPU 架构更改:我无法真正评论这些,但我认为您现在的投资将在现在 + X 个月后带来业务优势。X 可能比 CPU 开发发生重大变化的时间更短 -> 你赢了。

于 2010-01-28T18:01:44.277 回答