It's been a while since I touched my NIP.NET work. NIP was originally developed in C++ as part of my PhD research with Prof. Paul Watson. It is a parallel runtime for shared- and distributed-memory multiprocessors. It implements an extension to the original Lazy Task Creation technique1, load balancing, and an object-based Distributed Shared Memory with some novel ideas on caching and locking. There are some papers available. NIP is also used as the target runtime environment of the HiPPO visual programming language.
I always wanted to port NIP on .NET and evolve it by adding more functionality. Due the object-based shared memory abstraction, the original version suffered by great overheads due to the expensive lock primitives used. In .NET, locking is done at the user-level so it's less expensive. Furthermore, a feature that we always wanted to add was distributed garbage collection. So, towards the end of 2002 I started the port. It only took me about a week or so to rewrite most of the code using C#. Unfortunately, I got involved with other things so I didn't complete it and it was only until last summer when I found some time to finish the implementation: fast DSM object locking, an optimised entry consistency model for introducing sequential consistency semantics, distributed object garbage collection, lazy task creation, etc. Cool stuff. I even wrote some unit tests. However, once I started testing multiple node scenarios, I discovered that under certain circumstances there was a deadlock but I didn't have time to investigate. I think this weekend I am going to spend few hours on fixing the problem(s). I need a break from the Grid stuff. It should be fun.
1 Mohr, E., D.A. Kranz, and R.H.J. Halstead, Lazy Task Creation: A Technique for Increasing the Granularity of Parallel Programs. IEEE Transactions on Parallel and Distributed Systems, 1991. 2(3): p.264-280.