1 research outputs found
McMPI – a managed-code message passing interface library for high performance communication in C#
This work endeavours to achieve technology transfer between established best-practice in
academic high-performance computing and current techniques in commercial high-productivity
computing. It shows that a credible high-performance message-passing
communication library, with semantics and syntax following the Message-Passing Interface
(MPI) Standard, can be built in pure C# (one of the .Net suite of computer languages).
Message-passing has been the dominant paradigm in high-performance parallel
programming of distributed-memory computer architectures for three decades. The MPI
Standard originally distilled architecture-independent and language-agnostic ideas from
existing specialised communication libraries and has since been enhanced and extended.
Object-oriented languages can increase programmer productivity, for example by allowing
complexity to be managed through encapsulation. Both the C# computer language and the
.Net common language runtime (CLR) were originally developed by Microsoft Corporation
but have since been standardised by the European Computer Manufacturers Association
(ECMA) and the International Standards Organisation (ISO), which facilitates portability of
source-code and compiled binary programs to a variety of operating systems and hardware. Combining these two open and mature technologies enables mainstream programmers to
write tightly-coupled parallel programs in a popular standardised object-oriented language
that is portable to most modern operating systems and hardware architectures.
This work also establishes that a thread-to-thread delivery option increases shared-memory
communication performance between MPI ranks on the same node. This suggests that the
thread-as-rank threading model should be explicitly specified in future versions of the MPI
Standard and then added to existing MPI libraries for use by thread-safe parallel codes.
This work also ascertains that the C# socket object suffers from undesirable characteristics
that are critical to communication performance and proposes ways of improving the
implementation of this object