尝试在 C# 中使用网格计算或分布式计算

Trying to use grid computing or distributed computing in C#

我在这里看到了很多关于这个主题的问题,但是人们 post 讨论过的所有项目似乎都已失效或无法在我的系统上运行。我正在尝试为一个学校项目编写一个应用程序,以使用我的台式机和笔记本电脑计算 pi 的数量。任何人都可以帮助 post 一个 url 一个项目,在这个项目中我可以使用本地网络中的计算机进行分布式计算。

我尝试了以下方法,但到目前为止没有成功:

http://www.codeproject.com/Articles/71897/Grid-Computing-Using-C-Script-and-NET-Remoting (在 visual studio 2013 年进行单向升级后项目无法运行。这似乎正是我正在寻找的,但它不会开箱即用,因为在 PiCalculationManager 项目中它有一个参考RemoteClass 引用错误。它有一个黄色图标,并且由于无法找到它正在使用的命名空间而收到 4 个错误)

http://mpapi.codeplex.com/ (分布式项目不工作,因为它不会连接到注册服务器)

https://github.com/tylerjensen/duovia-distributed (似乎无法弄清楚实现以及如何连接到我本地网络上的其他计算机)

如果您有任何建议或问题,请告诉我。我似乎对这个项目毫无进展

我一直在研究 .NET 网格计算,最后我决定构建自己的网格。仍处于测试阶段,但现在很稳定 :) 看看:http://lucygrid.codeplex.com/

我在演示项目中写了PI示例。我会尽量保持可用性尽可能简单,所以你只需要使用 AsParallelGrid 函数(有一个内置节点和库将处理每个块,但当然你需要 运行 个独立节点其他机器测试网格)

代码是开源的,请随意使用它。

来自 LucyDemo 项目:

public string Run(bool enableLocalProcessing)
{
    double sum = 0.0;
    double step = 1.0 / (double)Steps;

    /* ORIGINAL VERSION
    object obj = new object();

    Parallel.ForEach(
        Partitioner.Create(0, Steps),
        () => 0.0,
        (range, state, partial) =>
        {
            for (long i = range.Item1; i < range.Item2; i++)
            {
                double x = (i - 0.5) * step;
                partial += 4.0 / (1.0 + x * x);
            }
            return partial;
        },
        partial => { lock (obj) sum += partial; });
    */

    sum = Enumerable
        .Range(0, Steps)
        // Create bucket
        .GroupBy(s => s / 50)
        // Local variable initialization is not distributed over the grid
        .Select(i => new 
        {
            Item1 = i.First(),
            Item2 = i.Last() + 1, // Inclusive
            Step = step
        })
        .AsParallelGrid(data =>
        {
            double partial = 0;
            for (var i = data.Item1; i != data.Item2 ; ++i)
            {
                double x = (i - 0.5) * data.Step;
                partial += (double)(4.0 / (1.0 + x * x));
            }
            return partial;
        }, new GridSettings()
        {
            EnableLocalProcessing = enableLocalProcessing
        })
        .Sum() * step;

    return sum.ToString();
}

我正在发布并行版本和网格版本。 如果您尝试一下,我会很高兴。