News: KNEM 0.8.0 has been released (2010/03/03). It brings small improvements all over the place.
News: The KNEM OpenMPI has been branch into trunk (2009/12/16), it will be available in OpenMPI 1.5.
KNEM is a Linux kernel module enabling high-performance intra-node MPI communication for large messages. KNEM works on all Linux kernel since 2.6.15 and offers support for asynchronous and vectorial data transfers as well as offloading memory copies on to Intel I/OAT hardware.
MPICH2 (since release 1.1.1) uses KNEM in the DMA LMT to improve large message performance within a single node. Open MPI also includes KNEM support in its SM BTL component since release 1.5. Discover how to use them here.
The programming interface is documented here.
To get the latest KNEM news, you should subscribe to the knem-announce mailing list. For discussions regarding the KNEM development, see the knem-devel mailing list.
MPI implementations usually offer a user-space double-copy based intra-node communication strategy. It's very good for small message latency, but it wastes many CPU cycles, pollutes the caches, and saturates memory busses. KNEM transfers data from one process to another through a single copy within the Linux kernel. The system call overhead (about 100ns these days) isn't good for small message latency but having a single memory copy is very good for large messages (usually starting from dozens of kilobytes).
Some vendor-specific MPI stacks (such as Myricom MX, Qlogic PSM, ...) offer similar abilities but they may only run on specific hardware interconnect while KNEM is generic (and open-source). Also, none of these competitors offers asynchronous completion models, I/OAT copy offload and/or vectorial memory buffers support as KNEM does.
KNEM is freely available under the terms of the CeCILL-B licence (BSD-like).
The latest stable release is KNEM 0.8.0 Source code access and all tarballs are available from the Download page.
Bug reports and questions should be sent to the knem-devel mailing list.
All KNEM papers are also listed here with the corresponding Bibtex entries.
KNEM is developed by the INRIA Runtime Team-Project (headed by Raymond Namyst) in collaboration with the MPICH2 team at Argonne National Laboratory and the Open MPI community. The main developer is Brice Goglin, with contributions from Dave Goodell, Stéphanie Moreaud, Jeff Squyres, and George Bosilca.
Last updated on 2010/03/03.