现在开始设计任务并行库还为时过早吗?

时间:2010-01-28 17:43:44

标签: c# .net vb.net multicore task-parallel-library

自微软首次宣布以来,我一直关注.NET任务并行库(TPL)的开发。

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

为什么要立即开始?

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

为什么要等?

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

限制

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

5 个答案:

答案 0 :(得分:8)

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

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

根据您的应用程序,您可能还需要查看Reactive Extensions,它与PFX密切配合。

答案 1 :(得分:1)

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

我认为必须首先回答这些问题,以便他们能够更清楚地了解TPL是否可以帮助我们做好准备。

答案 2 :(得分:1)

嗯 - 你今天反对使用TPL的主要原因似乎如下:
你不知道TPL是否会在未来的多核CPU中占据最大值。

我想说(这只是猜测 - 特别是在计算机科学中你永远无法分辨接下来会发生什么):是的,它们会改变。是的,TPL将在某些方面进行更改,以最大限度地提高性能。但是,一些变化将“引人注目” - 您将从优化中获益,而无需实际更改单行代码。

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

替代方案在哪里?使用Threadpool?好吧 - 然后TPL更新了。因此,使用它时,您的代码将更加面向未来。例如,VS 2010调试功能的演示看起来非常不错。

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

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

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

答案 3 :(得分:1)

我也会这样做。我认为最大的变化是“范式”从“我们在过去8年中这样做”的发展转变为更具功能性/副作用的自由编程。

如果你今天开始使用PFX,我猜它需要一些时间才能快速掌握它并从字面上移植你的代码以从中获得最大收益。 另一方面,如果PFX在2年内消失或带来重大变化,我希望你的代码仍能更好地运用你所能达到的目标。我们不会再次减少核心数量,而且要在一段时间内完成扩展的大任务也不会被淘汰。

关于CPU体系结构的变化:我无法对这些进行真正的评论,除了在我看来,您现在的投资将在+ X个月之后带来业务优势。 X可能小于CPU开发发生重大变化的时间 - >你赢了。

答案 4 :(得分:1)

我也不会等。

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