I've just catched a problem with packing/unpacking using 'external32' in Linux. The problem seems to be word ordering, I believe you forgot to make the little-endian <-> big-endian conversion somewhere. Below, an interactive session with ipython (sorry, no time to write in C) showing the problem. Please, ignore me if this has been already reported.
In [1]: import numpy In [2]: from mpi4py import MPI In [3]: print numpy.dtype('i').itemsize, MPI.INT.extent 4 4 In [4]: print numpy.dtype('b').itemsize, MPI.BYTE.extent 1 1 In [5]: In [5]: arr1 = numpy.array([256], dtype='i') # one int, for input In [6]: print arr1 [256] In [7]: buf = numpy.array([0,0,0,0], dtype='b') # four bytes, auxiliar In [8]: print buf [0 0 0 0] In [9]: p = MPI.INT.Pack_external('external32', arr1, buf, 0) In [10]: print buf, repr(buf.tostring()) [0 1 0 0] '\x00\x01\x00\x00' In [11]: arr2 = numpy.array([0], dtype='i') # one int, for output In [12]: print arr2 [0] In [13]: p = MPI.INT.Unpack_external('external32', buf, 0, arr2) In [14]: print arr2 [65536] In [15]: print arr2.byteswap() [256] -- Lisandro Dalcín --------------- Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC) Instituto de Desarrollo Tecnológico para la Industria Química (INTEC) Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET) PTLC - Güemes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594