尝试在 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();
}
我正在发布并行版本和网格版本。
如果您尝试一下,我会很高兴。
我在这里看到了很多关于这个主题的问题,但是人们 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();
}
我正在发布并行版本和网格版本。 如果您尝试一下,我会很高兴。