I'm looking for some guidance with C# and parallel programming. I know that MPI .NET exists, and OpenMP is not supported. My question then: is there some other library (TPL?) or feature that can accomplish the functionality that OpenMP provides? I'll be working (hopefully!) with the latest release of mono (C# .NET 4.0). The code will be running on a Cray XT6M, so utilizing resources one each board and on a node will be important. Thanks for your time!
You could have a look at Dryad, a parallel programming approach by Microsoft, where C# is actually a first class citizen. Apparently Microsoft uses it for Bing and training the body tracking algorithms for Kinect [2]. It uses more coarse grained data parallelism than OpenMP. It is more like processes with pipes than threads with shared memory.
I fear that setting it up on a Mono/Linux/Cray system will probably be difficult to say the least. That said C# is not your typical HPC language. It will generally be very tough to run C# efficiently at this scale / type of system. I would recommend to evaluate porting your software to a "first class" HPC language, e.g. C, Fortran.
Also as a note: OpenMP does not scale over a full Cray XT6M machine (or any HPC cluster for that matter), you can use this form of parallelism (shared memory). To communicate between nodes you need another form of parallelism, typically MPI. You can also use MPI within a node.
C# is a wonderful language for many things, but on its own, it's not going to take full advantage of that Cray. The developers at Microsoft optimize the libraries for a dozen cores or less, likely, and the developers at Xamarin worry more about cell phones. You want MPI or another parallel programming language underneath you. You can do that with C# and several other languages (python is popular in the HPC world, too), but the key is sitting atop the right libraries. TPL won't cut it at that scale of parallelism.
© 2022 - 2024 — McMap. All rights reserved.