如何跨多台机器(如渲染农场)运行C#任务并行库?

Cau*_*tix 5 c# multithreading multicore task-parallel-library

我正在使用TPL在C#中编写计算密集型程序.一些初步基准测试通过使用具有更多内核/线程的处理器显示出计算时间的显着减少.

但是,单个CPU上可用的线程数量有限(我认为即使是最好的Xeons资金也可以购买,目前大约有16个).

我一直在阅读有关如何在自己的机器中使用多个廉价CPU的"网格"渲染农场是增加整体核心数量的好方法,但我不知道如何实现其中一个.它是在操作系统级别使用Microsoft服务器技术实现的(如果是,如何实现?),还是我还需要修改C#代码本身?

任何帮助或现有信息的链接将不胜感激.

Ade*_*ler 3

如果您想大规模(数百个节点)执行此操作,那么开发自己的系统就很困难。你必须处理;节点变得不可用、数据复制到每个节点、跟踪作业进度......这是一个很长的列表。您还需要考虑节点之间需要的通信类型。请记住,与通过网络将消息(数据)发送到另一台机器(即使是快速机器)的成本相比,从一个线程向另一个线程发送消息(数据)的成本很小。您可能必须完全重写多线程应用程序才能在分布式系统上良好运行,甚至使用完全不同的算法。

Hadoop

Microsoft 曾计划将 Dryad 商业化为LINQ to HPC,但该项目不久前被搁置(我在离开 Microsoft 之前曾参与过该项目)。我相信您仍然可以获得最终的“公共预览版”,但它不受支持。SQL 团队选择与 Hadoop/Hortonworks 人员合作,推出 Windows/Azure/.NET 友好的 Hadoop 发行版。据我所知,他们唯一提供的就是HDInsight。在 Azure 中运行的 Hadoop 服务。

现在有一个Microsoft .NET SDK For Hadoop,它允许您管理集群并提交作业等。它似乎不允许您编写在 Hadoop 节点上执行的代码。不过,您可以使用 Hadoop 流 API。这是相当低的级别,但与语言无关,因此您几乎可以使用它来将用任何语言编写的 MapReduce 代码与 Hadoop 集成。有关此内容的更多详细信息,请参阅这篇博客文章。

面向 .NET 开发人员的 Hadoop

如果您想以较小的规模(10 个节点)执行此操作,那么我会寻找类似MPI .NET的东西。看起来这个项目已被放弃,但类似的东西可能正是您想要的。