2012-10-30 33 views
4

我想編寫一個分佈式軟件系統(系統中可以執行程序比在一臺pc上快),它可以執行不同類型的程序(因爲這是一個學校項目,我可能會執行程序,如總理查找和Pi計算器就可以了)網格計算API

我的偏好是它應該爲.NET編寫C#,有很好的文檔,編寫起來很簡單(在.NET中不是新的,但我不專業),並能夠輕鬆地爲網格編寫任務和/或直接從.exe加載程序到網絡。

我看着有點在:(?過時)

  1. MPAPI
  2. Utilify(從鍊金術的製造商)
  3. NGrid

哪一個是最好的對我的情況?你有什麼經驗嗎?

ps。我知道這裏有很多類似的問題,但是他們或者過時了,沒有正確的答案或者沒有回答我的問題,因此我選擇再次提問。

+0

看起來他們都死了項目:( –

+0

如果你想建立自己爲什麼不探索Quartz.net - 它雖然有一定的侷限性「羣集」的支持(必須是.NET和必須實現IJob。 JDBC source only) –

回答

2

我剛剛聯繫了Utilify(Krishna Nadiminti)的創始人,雖然積極開發暫停,但他已經發布了所有源代碼here on Bitbucket

我認爲值得繼續這個項目,因爲現在幾乎沒有可比的選擇(甚至是商業)。我可能會開始工作,但不要等待我:)。

+0

謝謝,我會定期看看它。 將回報:) – Janman

+0

「沒有可比性」,你能詳細說明嗎? – 2014-01-24 00:22:43

+0

我找不到其他軟件,如Utilify。 –

0

得到同樣的問題。我嘗試了NGrid,Alchemi和PI.net的MS 。 畢竟我決定啓動我自己的開源項目來玩,請點擊這裏:http://lucygrid.codeplex.com/

UPDATE:

見的樣子PI例如: 傳遞給AsParallelGrid的功能,在網格節點執行。 您可以使用它運行DEMO項目。

/// <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(); 

    } 
}