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

C# 尝试在C中使用网格计算或分布式计算#,c#,distributed,C#,Distributed,我在这里看到了很多关于这个主题的问题,但是人们发布的所有项目似乎都已经死了,或者与我的系统不兼容。我正试图为一个学校项目编写一个应用程序,用我的台式机和笔记本电脑计算pi的数量。有人能帮我发布一个项目的url吗?在这个项目中,我可以使用本地网络中的计算机进行分布式计算 我尝试了以下方法,但迄今为止没有成功: (在visual studio 2013中进行单向升级后,项目无法工作。这似乎正是我要寻找的,但它不会立即构建,因为在PiCalculationManager项目中,它有一个RemoteC

我在这里看到了很多关于这个主题的问题,但是人们发布的所有项目似乎都已经死了,或者与我的系统不兼容。我正试图为一个学校项目编写一个应用程序,用我的台式机和笔记本电脑计算pi的数量。有人能帮我发布一个项目的url吗?在这个项目中,我可以使用本地网络中的计算机进行分布式计算

我尝试了以下方法,但迄今为止没有成功:

(在visual studio 2013中进行单向升级后,项目无法工作。这似乎正是我要寻找的,但它不会立即构建,因为在PiCalculationManager项目中,它有一个RemoteClass引用的引用错误。它有一个黄色图标,并且由于无法找到它所使用的命名空间而出现4个错误。)ng)

(分布式项目无法工作,因为它无法连接到注册服务器)

(似乎无法理解实现以及如何连接到本地网络上的其他计算机)


如果您有任何建议或问题,请让我知道。这个项目我似乎没有取得任何进展

我在.NET网格计算上挖掘了一段时间,最后我决定建立自己的。仍处于测试阶段,但现在已经稳定:)请看:

我在演示项目中编写了PI示例。我将尽可能地保持可用性,这样您只需要使用AsParallerGrid函数(有一个内置的节点,其中的库将处理每个块,但当然您需要在其他机器上运行独立的节点来测试网格)

该代码是开源的,所以可以随意使用它

来自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();
}
公共字符串运行(bool启用localprocessing)
{
双和=0.0;
双步=1.0/(双)步;
/*原版
object obj=新对象();
并行ForEach(
创建(0,步骤),
() => 0.0,
(范围、状态、部分)=>
{
对于(长i=range.Item1;i{lock(obj)sum+=partial;});
*/
总和=可枚举
.范围(0,步数)
//创建桶
.GroupBy(s=>s/50)
//局部变量初始化不分布在网格上
.选择(i=>new
{
Item1=i.First(),
Item2=i.Last()+1,//包括
步骤
})
.AsParallelGrid(数据=>
{
双偏=0;
对于(var i=data.Item1;i!=data.Item2;++i)
{
双x=(i-0.5)*数据步;
部分+=(双)(4.0/(1.0+x*x));
}
返回部分;
},新网格设置()
{
EnableLocalProcessing=EnableLocalProcessing
})
.Sum()*步骤;
返回sum.ToString();
}
我正在发布并行版本和网格版本。
如果您尝试一下,我很高兴知道。

这可能是一个太宽泛的问题,因此您的答案质量参差不齐,可能没有帮助。如果你能改写你的问题,询问你提到的其中一件事(比如你从第一个问题中得到的编译错误),你可能会得到更好、更集中的帮助。很抱歉,我现在就编辑