NGrid
Open source grid computing

NGrid overview

See the Wikipedia for an introduction on grid computing.
NGrid falls in the category of computational grids.

What is NGrid ?

NGrid, or precisely NGrid.Core, is a two sides grid abstraction layer for .Net (written in C#). The first side is the grid programming model. As a developper, you don't want (or even need) to handle directly a physical grid (machines and communication), you want something as close as possible to what you are used to, a multithread programming model with a shared memory. The second side is the grid services abstraction. NGrid.Core is not tighten to any particular grid. By implementing the grid services, NGrid.Core could be connected to any physical grid.

The grid programming model

Most of the existing grid frameworks are job-based, NGrid is not. NGrid.Core provides a grid Garbage Collected (GC) model. In other words, objects are created and live in the grid. When not referenced anymore, objects are collected. Just like when programming C# (or Java). Grid threads run on top of those grid objects. Synchronizations and communications between grid threads work in the same way than with local threads.

The objective of any physical grid implementation is to manage as efficiently as possible this grid model. In order to make the optimization problem tractable, NGrid.Core includes some code meta-data, known as attributes in C#, that could be used to decorate the client code (the code whose execution is actually distributed). The NGrid.Core tuning attributes could be used by the physical grid in order to adapt the grid behaviour for better performance. These attribute have an effect limited to the computional efficiency of the grid. In particular they do not have any semantic impact: with or without tuning attribute the result returned at the end of the grid computation is the same. The only parameter that may vary is the time of execution.

Why using NGrid

The first question about grid computing is "Do I really need to distribute my application?". Eventually, few years afterwards, some computation become possible on a single machine within a reasonable amount of time. So why bother to distribute in such case, particularly if it implies strong design constraints ?

The first benefit of using NGrid is to keep the code as close as possible from the original (multithreaded) code. The client side (as opposed to the physical grid side) of NGrid.Core imitates closely the threading elements of the .Net framework.

The second benefit of NGrid is the physical grid independence. NGrid already provides (see the roadmap) several physical grid implementations. Eventually better grid implementations will be provided (or connector to other existing grids). In any case, the NGrid client code will not have to change.

Contact the author: Joannes Vermorel