C# 网格计算API
我想写一个分布式软件系统(在这个系统中,你可以比在一台pc上更快地执行程序),它可以执行不同种类的程序。(因为这是一个学校项目,我可能会在上面执行像Prime finder和Pi calculator这样的程序) 我的偏好是,它应该是为C#with.NET编写的,有很好的文档,编写简单(在C#with.NET中并不新鲜,但我并不专业),并且能够轻松地为网格编写任务和/或直接从.exe将程序加载到网络 我已经看了一下:C# 网格计算API,c#,grid-computing,C#,Grid Computing,我想写一个分布式软件系统(在这个系统中,你可以比在一台pc上更快地执行程序),它可以执行不同种类的程序。(因为这是一个学校项目,我可能会在上面执行像Prime finder和Pi calculator这样的程序) 我的偏好是,它应该是为C#with.NET编写的,有很好的文档,编写简单(在C#with.NET中并不新鲜,但我并不专业),并且能够轻松地为网格编写任务和/或直接从.exe将程序加载到网络 我已经看了一下: (来自炼金术制造者) (过时?) 哪一个最适合我的情况?你对他们有什么经验吗
注:我知道这里有很多类似的问题,但它们要么已经过时,没有正确的答案,要么没有回答我的问题,因此我选择再次提问。我刚刚联系了Utifiy(Krishna Nadiminti)的创始人,虽然目前活动开发已经暂停,但他已经发布了所有的源代码
我认为值得继续这个项目,因为目前还没有可比的替代方案(甚至商业)。我可以开始工作,但不要等我:)。也有同样的问题。我试过NGrid,Alchemi和MS PI.net。 在我决定开始我自己的开源项目后,请点击这里: 更新: 请参见以下示例: 传递给aspallelgrid的函数将由网格节点执行。 您可以在运行演示项目时使用它
/// <summary>
/// Distributes simple const processing
/// </summary>
class PICalculation : AbstractDemo
{
public int Steps = 100000;
public int ChunkSize = 50;
public PICalculation()
{
}
override
public string Info()
{
return "Calculates PI over the grid.";
}
override
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();
}
}
//
///分发简单常量处理
///
类PICalculation:AbstractDemo
{
公共整数步长=100000;
公共int ChunkSize=50;
公共PICalculation()
{
}
推翻
公共字符串信息()
{
return“计算网格上的PI。”;
}
推翻
公共字符串运行(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();
}
}
看起来它们都是死项目:(.如果你想构建自己的为什么不探索Quartz.net-它有“集群”支持,尽管有一些限制(必须是.net,并且必须只实现IJob.JDBC源代码)谢谢,我会仔细看一看。将报告:)“没有可比性”你能详细说明一下吗?我找不到其他像Utifiy这样的软件。