2012-10-30 2 views
4

여러 종류의 프로그램을 실행할 수있는 분산 소프트웨어 시스템 (하나의 PC보다 빠르게 프로그램을 실행할 수있는 시스템)을 작성하고 싶습니다. (학교 프로젝트이므로,그리드 컴퓨팅 API

내 선호도는 .NET과 함께 C#으로 작성해야하며 좋은 문서를 작성하고 작성하기 쉽도록 작성해야합니다 (.NET과 함께 C#으로 새로운 것은 아니지만 전문적이지는 않습니다.) 그리드에 대한 작업을 쉽게 작성하고 .exe에서 직접 네트워크에 프로그램을로드 할 수 있습니다.

이 난에 조금 봤는데 : (? 오래된)

  1. MPAPI
  2. Utilify (연금술의 제조 업체에서)
  3. NGrid

하나는 최고입니다 어느 내 경우에는? 당신은 그들과 어떤 경험이 있습니까?

ps. 나는 많은 비슷한 질문을 여기에서 알고 있지만, 그들은 구식이거나 적절한 대답이 아니거나 제 질문에 대답하지 않았기 때문에 다시 질문하기로 선택합니다.

+0

은 모든 죽은 프로젝트처럼 당신이 Quartz.net을 탐구하지 왜 자신을 구축하려는 경우 –

+0

:(본다. JDBC 소스 전용) –

답변

2

나는 Utilify (Krishna Nadiminti)의 설립자에게 연락을했고, 현재 적극적으로 개발이 일시 중지 된 동안 그는 모든 소스 코드 here on Bitbucket을 친절하게 발표했습니다.

필자는 문자 그대로 현재로서는 (심지어 상업용으로도) 비교할만한 대안이 없기 때문에이 프로젝트를 계속할 가치가 있다고 생각합니다. 나는 그 일을 시작할지도 모르지만 나를 기다리지 마라.

+0

고마워, 내가 확실히 볼거야. 다시보고 할 것이다. – Janman

+0

"비교할 수 없다"고 정교하게 말할 수 있습니까? –

+0

Utilify와 같은 다른 소프트웨어를 찾을 수 없습니다. –

0

동일한 문제가 발생했습니다. 나는 NGrid, Alchemi 및 MS PI.net을 시도했습니다. 나는 내 자신의 오픈 소스 프로젝트를 시작하기로 결정한 후 여기를 확인하십시오 : http://lucygrid.codeplex.com/.

UPDATE :

는 PI의 예를 보이는 방법 : AsParallelGrid에 전달 된 함수는 그리드 노드에 의해 실행됩니다. DEMO 프로젝트를 실행하면서 재생할 수 있습니다. 그것은 몇 가지 제한에 불구하고 "클러스터링"지원이 (.NET이어야하고 IJob를 구현해야합니다 -.

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

    } 
}