Project Description
This project will provide self-organizing peer to peer computing system (+ maybe storage in future) for volunteer computing.

This consists of two parts.

First one is the service that you may install to your computer. It provides applications on other computers an ability to launch their tasks on your machine. They will be launched under restricted user account to prevent harming your files. Service will also restrict how these tasks will use your computer resources so that your tasks could get as much computer power as they needed.

Second part is a library, which provides easy, fault-tolerant way to use free resources from computers running service.

Parallel Objects
This library also simplifies creation and using remote objects. It does not handle inter-object communication, but allows to maintain mutliple object instances with the same contents easily. To use such an object you just need to create interface class and one implementation class. Library will find some volunteer hosts, transfer your interface and its implementation there, and create several instances of your object on each host.

On local machine it than creates proxy class which implements your interface. Any state change method calls to this proxy (currently, any functions with return type of void) will spread across all remote instances. For any other call only one remote object will be scheduled to compute result based on its state and passed arguments.

An example of using this library is distributed ray tracing. You
- define scene interface like this:
public interface IScene
  void Add(Sphere sphere);
  void Delete(Sphere sphere);
  Color Trace(Ray ray);

- provide an implementation for this interface
public class Scene: IScene
  void Add(Sphere sphere) { ... }
  void Delete(Sphere sphere) { ... }
  Color Trace(Ray ray) { ... }

- create and use distributed scene
var scene = ParallelObject<IScene>.Create<Scene>();

- at this point you can do calls to Add, Delete and Trace keeping in mind that Add and Delete will be repeated on all remote instances created by this library, but only one of them will execute Trace, so you can do calls to Trace from parallel threads.


Project is developed using Visual Studio 2010 and it uses HgScc.

License for this project slightly differs from pure GPLv2. Changes are related to commercial usage and using the project from languages without support for function overloading by parameter count or types. Please read License.txt

Last edited Nov 8, 2010 at 9:33 PM by LostTheBlack, version 7