我一直在挖掘一段時間的.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();
}
我張貼的水貨版本和網格之一。 我很樂意知道你是否嘗試過。
這可能有點太寬泛的一個問題,所以你的答案將是不同的質量,可能無益。如果你可以用你的問題來回答你的問題,詢問你提到的其中一個問題(比如你從第一個問題中得到的編譯錯誤),你可能會得到更好更有針對性的幫助。 – StingyJack 2015-01-20 21:05:38
對不起,我現在編輯 – user3610374 2015-01-20 21:06:48