======================= HISTORY: MPI for Python ======================= :Author: Lisandro Dalcin :Organization: CIMEC_ :Address: PTLC, 3000 Santa Fe, Argentina :Contact: dalcinl@gmail.com :Web Site: http://mpi4py.scipy.org/ .. contents:: Release 0.6.0 (200X-XX-XX) ========================== * Point to point communications with pickled data were reimplemented. Now a single message (for the data) is needed, the message length is obtained using MPI routines ``MPI_Probe()`` and ``MPI_Get_count()``. Because of this, ``MPI.Comm.Sendrecv()`` for pickled data is no longer implemented in terms of the canonical ``MPI_Sendrecv()`` * Collective communications with pickled data are now safer in 64 bits architectures when the available memory is more than 2GB. In short: now pickled data is concatenated in a single contiguous buffer. This necessarily introduces some CPU and memory overhead at the sending processes. * Added initial support for vector variants of collectives. * Added initial support for generalized requests. However, this is not expected to work yet on the Python side. * Solved some import-time warnings/errors for Open MPI with shared libraries. In short: ``sys.setdlopenflags()`` is passed ``RTLD_GLOBAL`` for importing MPI extension modules. * Pushed some fixes for building on SGI ALTIX machines. Release 0.5.0 (2007-07-31) ========================== * some nasty globals (size, rank, zero, last, even, odd) in MPI module are no longer available. Convenience functions ``distribute()``, ``pprint()``, and ``rprint()`` are now prefixed with an underscore. Now it is safe to do wildcard import ``from mpi4py.MPI import *``, ``MPI.Exception`` will then be available as ``ExceptionMPI``. * fixed and improved support for spawning new MPI processes with ``Intracomm.Spawn()``. Arguments are now only required at the specified root. Added support for getting the error codes: just pass a (perhaps empty) list at the root, and the results will go there (and previous list items go away). * improved way to pass arguments to windows for *RMA* calls ``Win.Put()``, ``Win.Get()``, and ``Win.Accumulate()``. This is backward-incompatible, but far better and simpler than previous approach. Window attributes (base, size, disp_unit) are now accesible trough a property ``attrs``; a new property ``memory`` was added to access the memory buffer (you could use it to build a NumPy array with ``numpy.frombuffer()``). * compile time support for selecting MPI thread level with option ``--thread-level=xxx`` where ``xxx`` should be one of ``single``, ``funneled``, ``serialized``, or ``multiple``. In the near future this will be selectable at runtime. * compile time support for detecting (possibly) leaked MPI handles with option ``--enable-leak-warning``. Then, a warning will be issued if any handle (other than MPI_Status) is not ``MPI_XXX_NULL`` at destruction time. This feature helps to discover unfreed handles, as ``mpi4py`` currently does not automatically free them for you. * compile time support for faster (and fewer) MPI calls with option ``--enable-fast-errcheck``. This mode avoids calls for getting/setting/restoring error handlers in order to be able to raise Python exceptions instead of the default MPI action (aborting processes) . This assumes that all MPI handles (``Comm``, ``Win``, ``File``) have a ``MPI_ERRORS_RETURN`` error handler. Additionally, ``MPI_ERRORS_RETURN`` is set at import time in ``MPI_COMM_SELF``, ``MPI_COMM_WORLD``, and ``MPI_FILE_NULL``, and at creation time for new MPI handles created through ``mpi4py``. Unfortunately, this mode can interact badly with external modules/libraries making MPI calls, so it should be used with care. * introduced many changes at the C and Python level for better support the upcoming Python 3.0 following the ``py3k-struni`` branch. Release 0.4.0 (2007-06-01) ========================== * support for direct communication of objects exporting single-segment buffer interface, should work with numpy/numarray/Numeric. * support for non-blocking communications. Request/Prequest classes are now fully implemented and functional. * full support for parallel I/O and one-sided communications. * almost full support for parallel process management. * support for using many MPI-2 features availables in some MPI-1 implementations. Added option '--try-mpi-2' to 'build' command. Use it to test for MPI-2 features available in a MPI-1 implementations, or a incomplete/broken MPI-2 implementation. Release 0.3.1 (2002-08-02) ========================== * setup.py: - Simplified build process, now based in 'mpicc' compiler, by request and suggestions from Brian Granger. * mpi/MPI.py: - Removed '@staticmethod' decorators in order to support Py2.3, by request from Brian Granger. * mpi/ext/libmpi.c: - Removed call to MPI_Init(). * mpi/ext/pickle.c: - Added faster pickling support. * mpi/ext/macros.h: - Updated to support Open MPI implementation. * mpi/ext/mpi_cobj.c: - Removed support for CObject. Release 0.2.0 (2005-05-25) ========================== * mpi/MPI.py: - file mpi/mpi.py renamed to mpi/MPI.py - Corrected a bug in Op.__init__ method, moved initialization code of some private attributes to Op.__new__ method. - Added SWIG and CObject support to all MPI types using an improved mechanism. * mpi/MPU.py: - file mpi/mpu.py renamed to mpi/MPU.py * mpi/ext/libmpi.[c,h]: - Added files libmpi.[c,h]. They contains all code previously located in files mpi/ext/*object.[c,h]. - Added new extension module ``libmpi`` wich exports API pointers using the approach suggested in http://www.python.org/doc/2.3.5/ext/using-cobjects.html - Added number methods to all MPI types (except ``Status``) in order to support truth value testing. All predefined objects ``MPI_<OBJ>_NULL`` now have a truth value of ``False``. * mpi/ext/mpi.c: - Implemented cart_map() and graph_map(). - Corrected a bug in errhandler_free(), format string for PyArg_ParseTuple() changed from "O" to "O&". - Renamed file mpi/ext/mpi4py.c to mpi/ext/mpi.c; removed file mpi/ext/mpi4py.h. - Extension module ``_mpi`` use the new ``libmpi`` module to get the C API. * mpi/ext/mpi_swig.i: - Changed typemaps for MPI objects. Now accepting PySwigObject and PySwigPacked indistinctly. - Extension module ``_mpi_swig`` uses the new ``libmpi`` module to get the C API. Converter functions renamed to ``as_<Type>`` and ``from_<Type>``. * mpi/ext/mpi_cobj.c: - Extension module ``_mpi_cobj`` containing CObject support uses uses the new ``libmpi`` module to get the C API. Converter functions named ``as_<Type>`` and ``from_<Type>``. Release 0.1.0 (2005-01-09) ========================== This is the first release of *MPI for Python*. .. _CIMEC: http://www.cimec.org.ar/