The 10th LCI (Linux Cluster Institute) international Conference on High Performance Clustered Computing was hosted at National Center for Atmospheric Research (NCAR) in Boulder, Colorado on 3/9 - 3/12. This year's focus was on large scale system design that address balance between inter-and intra-node parallelism. LCI is a small conference that had roughly 150 attendees. Microsoft was invited not only as a vendor sponsor but also to give a tutorial on Windows HPC Server 2008.
Here's a list of abstracts, technical papers, and program schedule. Microsoft is relatively new to the field of HPC. We were there to listen to HPC users, educators, and developers, and update them about what we are doing to make their lives easier with latest tools, and best practices from the software industry.
Developers are starting to see more user demand for their HPC applications on the Windows HPC Server platform. Like any software projects, due to budget and time constraint, the platform that the developer is not developing on may not get a build. After discussing with several HPC developers at the conference, I have a few ideas as a result, to share with everyone in terms of sustainable cross platform development specific to many HPC apps.
First, there is no silver bullet in getting your HPC code running on the Windows platform, but it is generally not difficult, since most HPC apps are console applications. There are also numerous Unix environments on the Windows platform including SUA, Cygwin, MingW/MSYS. These environments allow you to build your applications without changing your build system too much. The free Windows HPC SDK, enables you to build your HPC application against our MSMPI library, which is industry standard.
Some of the more complex platform issues include dealing with Unix System calls, Pthreads, on Windows. Developers don't necessarily know how to code to specific OS for some of these calls. There are articles, guides and books on them. Of course, for the hyper-impatient developers, I could always offer the advice of hiring a professional Windows programmer to resolve these issues.
As a software engineering practices, it is always a great idea to develop your Linux HPC software with portability in mind. In many cases, by going to a new platform, your code is exercised more, thus revealing some of the bugs not discovered using a single platform. One thing that is a big plus on the Windows platform is that Microsoft has invested billons in Visual studio to help developer write faster, better code. Today's complex software projects demand an IDE for productivity, why not take advantage of the best tool in the industry.
During the discussions with developers, we have concluded that the best way to keep a quality build of your HPC project on Windows is to have at least one of project developer using Visual studio to write the code, that way there is no more last minute scrambling to get a Windows binary built. If the project can spare more cycles, then an automated regression test that checks out and builds the project in a regular basis would also make the build on Windows platform better. This, however may require expertise in maintaining the original Unix build system with the windows platform in mind. The PETSC project does a great job of making things transparent; their python build system runs great under cygwin, thus no additional automated build system is needed on Windows.
References and tools on the Windows platform:
HPC Resource kit. HPC white papers, presentations, tutorials.
Windows SDK with free command line compilers, libraries.